# tableau Api Tableau REST API (rest_api) - Full Documentation [Skip to main content](#main-content) # About Tableau Help ## Addressing Implicit Bias in Technical Language In an effort to align with one of our core company values, equality, we have changed terminology to be more inclusive where possible. Because changing terms in code can break current implementations, we maintain the current terminology in the following places: - Tableau APIs: methods, parameters, and variables - Tableau CLIs: commands and options - Installers, installation directories, and terms in configuration files - (Undefined variable: Variables.PT\_server\_long) (we plan to make changes to non-inclusive terminology in the web interface, error messages, and related documentation soon.) - Third-party systems documentation For more information about our ongoing effort to address implicit bias, see [Salesforce Updates Technical Language in Ongoing Effort to Address Implicit Bias](https://www.salesforce.com/news/stories/salesforce-updates-technical-language-in-ongoing-effort-to-address-implicit-bias/) on the Salesforce website. [Skip to main content](#main-content) # Analytics Extensions Settings Methods Enable and configure [analytics extensions](https://help.tableau.com/current/server/en-us/config_r_tabpy.htm) on sites and, for on premise installations, on servers. With these extensions you can extend Tableau dynamic calculations with languages like R and python, and with other tools and platforms. For more information, see [Analytics Extensions API](https://tableau.github.io/analytics-extensions-api/). When upgrading from a server version less than 2020.2, analytics extensions must be enabled on each site even if external services were enabled on the server being upgraded. Connections for sites must be ported manually. Using the analytics extensions settings methods you can: - Enable and disable analytics extensions for a Tableau server (on-premise only) or for a site. - Create and manage an extension's connections to the service hosting your custom calculations. # 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: [Analytics Extensions Settings Methods](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-2273366b-11e3-454c-8f8a-f68a59a7b375) ## Add analytics extension connection to site Adds a new analytics extension connection for an external service to a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:create\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/settings/site/extensions/analytics/connections [view details](#) ## Delete analytics extension connection from site Deletes a specific analytics extension connection for an external service from a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/settings/site/extensions/analytics/connections/{connection\_luid} [view details](#) ## Remove current analytics extension connection for workbook Remove the currently used analytics extension connection to an external service from the specified workbook. The connection remains configured, and is available for further usage by the workbook. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users that have permissions to the specified workbook. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:delete\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection [view details](#) ## Get analytics extension details Get the details of a specified analytics extension connection to an external service. **Version:** Available in API 3.11 (Tableau Cloud March 2021/ Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics/connections/{connection\_luid} [view details](#) ## List analytics extension connections on site Lists a site's analytics extension connections for external services. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics/connections [view details](#) ## Get enabled state of analytics extensions on server Gets the enabled/disabled state of analytics extensions on a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:extensions\_server\_settings:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for connected apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/server/extensions/analytics [view details](#) ## Get enabled state of analytics extensions on site Gets the enabled/disabled state of analytics extensions on a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics [view details](#) ## List analytics extension connections of workbook Lists basic details of each analytics extension connection available for a specified workbook, including connection type and name. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users that have permissions to the specified workbook. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/connections [view details](#) ## Get current analytics extension for workbook Gets basic details, including connection type and name, of the analytics extension connection to an external service that the specified workbook is currently using. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users that have permissions to the specified workbook. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection [view details](#) ## Update analytics extension connection of site Updates the details of specified analytics extension connection for an external service to a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/analytics/connections/{connection\_luid} [view details](#) ## Enable or disable analytics extensions on server Enables or disables analytics extensions on a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:extensions\_server\_settings:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for connected apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/server/extensions/analytics [view details](#) ## Update enabled state of analytics extensions on site Enables or disables analytics extensions on a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/analytics [view details](#) ## Update analytics extension for workbook Updates the analytics extension connection to external service currently used by a workbook. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users that have permissions to the specified workbook. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection [view details](#) [Skip to main content](#main-content) # Ask Data Lens Methods - Retired * * * ## Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * * * * Ask data lenses enable you to refine the way a user's natural language query is interpreted, based on the specific audience they belong to. For instance, you might make one lens for medical staff at a hospital, and another for administrative staff. A lens allows you to define synonyms to associate key words with common terms used for them. For instance, "SF" for "San Francisco", or "Rx" for "prescription". You can also configure recommended visualizations for each lens. > Introduced: Tableau Cloud June 2022. Not currently available for Tableau Server. > > Using the Tableau REST API, you can: > > - Create a lens and configure its properties > - Delete a lens > - Import an existing lens > - Get a list of lenses on a site or the details of a specified lens ## 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: [Ask Data Lens Methods - Retired](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-42ceab2a-996a-4466-a9b7-aa8e5239d560) ## Create ask data lens - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Create an ask data lens. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users who have Create permissions for lenses on the site. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:create\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/askdata/lenses [view details](#) ## Delete ask data lens - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Delete an ask data lens. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users with administrator and lens owner permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:delete\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/askdata/lenses/{lens\_id} [view details](#) ## Get ask data lens - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Get the details of the specified ask data lens. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users who have Read access to the lens. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/askdata/lenses/{lens\_id} [view details](#) ## Import ask data lens - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Import an existing ask data lens on a server to a site, and optionally transform the metadata of the lens in the process. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by server administrators or site administrators. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:create\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/askdata/lenses/import [view details](#) ## List ask data lenses in site - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Returns a list of ask data lenses in a site. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by any user. Responses will include only the lenses to the user has access to. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/askdata/lenses [view details](#) [Skip to main content](#main-content) # Authentication Methods Using the authentication methods of the Tableau REST API you can: - Sign in a user to Tableau Server or Tableau Cloud - Authenticate with a [personal access token](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm) (PAT) for improved security with granular monitoring and revocation - If you're any Tableau Cloud user, you can list and revoke PATs - If you're a Tableau Cloud site admin, you can list and revoke users' PATs - Authenticate with username and password for quick manual sign in for all users and user impersonation for administrators - Authorize access using a Tableau connected app and a JSON Web Token (JWT) - Authorize access using a unified access token and a JSON Web Token (JWT) - Impersonate a user if you are a Tableau Server administrator, using username and password or PAT - Sign out a user from a Tableau server - Switch the from the current site you are signed into, to another on the server without authenticating again This functionality relates to the UI elements and concepts described at: [Sign in to Tableau Server or Online](https://help.tableau.com/current/pro/desktop/en-us/sign_in_server.htm). The [Tableau Server Client library](https://tableau.github.io/server-client-python/), a Python wrapper for the REST API, offers the following related items: [Auth Methods](https://tableau.github.io/server-client-python/docs/api-ref#authentication); and [Sign In and Out](https://tableau.github.io/server-client-python/docs/sign-in-out). ## 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: Authenticate](https://www.postman.com/salesforce-developers/salesforce-developers/folder/2b4ttqa/authenticate) ## List Personal Access Tokens List all personal access tokens (PATs). If you're a site admin, list PATs of a user when you are the site admin on all sites that the PAT owner is a member of. This method is not available for Tableau Server. **Version:** Available in API 3.21 (Tableau Cloud October 2023) 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:** Any Tableau Cloud user. If you're a Tableau Cloud site admin, you can list the PATs of a user when you are the site admin on all sites that the PAT owner is a member of. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** Not available. #### URI GET /api/api-version/sites/site-luid/users/user-luid/personal-access-tokens #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
user-luidThe LUID of the user. The user LUID is returned after you successfully authenticate to the Tableau REST API.
#### Request Body None #### cURL Request Example `curl "http://myco/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/d5704762-603a-42b2-a9a7-f9cd2b2c4253/personal-access-tokens" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body Copy ```                                  ``` Copy ``` {  "personalAccessTokens": [    {      "tokenName": "user_pat1",      "tokenGuid": "011b6267-a067-473a-9d16-b34cc58f90df",      "lastUsedAt": "2023-06-13T16:55:46Z",      "expiresAt": "2024-06-12T16:55:46Z"    },    {      "tokenName": "user_pat4",      "tokenGuid": "0fb30637-b638-4ce2-bbac-ac6611104ed9",      "lastUsedAt": "2023-06-13T16:55:51Z",      "expiresAt": "2024-06-12T16:55:51Z"    },    {      "tokenName": "user_pat5",      "tokenGuid": "db8c0b5d-5946-4f7c-a966-af334a3d10a5",      "lastUsedAt": "2023-06-13T16:55:56Z",      "expiresAt": "2024-06-12T16:55:56Z"    }  ]} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004ForbiddenYou can only list PATs that are yours.
403403010Cross-site access is forbiddenYou're a site admin and can't list PATs when you're not the site admin for all sites the PAT owner is a member of.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Revoke Administrator Personal Access Tokens Revokes all [personal access tokens](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm) (PATs) created by server administrators. This method is not available for Tableau Cloud. #### URI DELETE /api/api-version/auth/serverAdminAccessTokens #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body None #### Permissions Only Tableau Server users with server administrator permissions can use this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:server_admin_tokens: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 #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Revoke server admin tokens forbidden,The user does not have the server administrator permissions required to call this method.
404404000Server not foundThe Tableau Server in the URI doesn't correspond to an existing server.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Revoke Personal Access Token Revoke a personal access token (PAT). If you're a site admin, you can revoke a users PAT owhen you are the site admin on all sites that the PAT owner is a member of. This method is not available for Tableau Server. **Version:** Available in API 3.21 (Tableau Cloud October 2023) 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:** Any Tableau Cloud user. If you're a Tableau Cloud site admin, you can revoke the PAT of a user when you are the site admin on all sites that the PAT owner is a member of. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** Not available. #### URI DELETE /api/api-version/sites/site-luid/users/user-luid/personal-access-tokens/pat-name #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
user-luidThe LUID of the user. The user LUID is returned after you successfully authenticate to the Tableau REST API.
pat-nameThe name of the PAT you want to revoke.
#### Request Body None #### cURL Request Example `curl "http://myco/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/d5704762-603a-42b2-a9a7-f9cd2b2c4253/personal-access-tokens/my_pat" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 204 #### Response Body None #### Errors
HTTP status error Code Condition Details
401 401002 Unauthorized Access The credentials token provided in the request header was invalid or has expired.
403 403004 Forbidden You can only revoke PATs that are yours.
403 403010 Cross-site access is forbidden You're a site admin and can't revoke a PAT when you're not the site admin for all sites the PAT owner is a member of.
404 404051 Personal access token not found The PAT couldn't be revoked because it does not exist.
405 405000 Not supported This error can occur for the following reasons:
  • The URI contains an incorrect PAT name or the PAT name is missing
  • The request type is not DELETE
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Sign In Signs you in as a user on the specified site on Tableau Server or Tableau Cloud. This call returns a credentials token that you use in subsequent calls to Tableau Server or Tableau Cloud. For more information about authentication, see [Signing In and Signing Out (Authentication)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm). **Notes:** - [SAML single sign on](https://help.tableau.com/current/server/en-us/saml_requ.htm) (SSO) authentication does not validate REST API requests. For a scenario where you want to integrate Tableau authentication into a SSO environment you will need to incorporate a REST sign in request, and then use the credentials token from its response in the header of subsequent requests. - The credentials token is valid for REST API calls and Tableau Metadata API (GraphQL) queries. You cannot use the credentials token as authentication for other operations with Tableau Server. In addition, the credentials token is good only for operations in the site that you're signed in to. You cannot sign in to one site and then use the credentials token you get back to send requests to a different site. If you do, the server returns an HTTP 403 (Forbidden) error. - (Tableau Cloud only) If multi-factor authentication (MFA) is enabled with Tableau authentication, PATs are required. You must use a PAT, instead of user name and password, to make a REST API sign in request to Tableau Cloud. Alternatively, you can use a unified access token (UAT) to sign in to Tableau Cloud. **Tableau Server** Typically, a credentials token is valid for 240 minutes. With administrator permissions on Tableau Server, you can change this timeout by using the [tsm configuration set](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm) command and setting the wgserver.session.idle\_limit option. In addition, if you are a Tableau Server administrator, you can use your username and password to sign in and impersonate a specific user. You might use impersonation in order to double check or troubleshoot the impact of permissions settings for that user. **Tableau Cloud** A credentials token is valid for 120 minutes on Tableau Cloud. #### URI POST /api/api-version/auth/signin **Note:** For Tableau Cloud, the server address in the URI must contain the pod name, such as prod-ca-a or us-east-1. For example, the URI to sign in to a site in the 10ay pod would be:https://prod-ca-a.online.tableau.com/api/api-version/auth/signin. For more information, see [About the pod name](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm#pod). #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body ### PAT Signing in with a user's personal access token (PAT):  - For Tableau Server, see [personal access token](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm). - For Tableau Cloud, see [personal access token](https://help.tableau.com/current/online/en-us/security_personal_access_tokens.htm). ``` ``` ### User name and password Signing in with a user's user name and password: ``` ``` ### Impersonating user using username and password Signing in with server administrator's username and password to impersonate a user (Tableau Server only): ``` ``` ### Impersonating user using PAT Signing in with server administrator's [personal access token](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm) (PAT) to impersonate a user (Tableau Server only): ``` ``` ### Connected apps JWT Signing in with a JSON Web Token (JWT), from a [connected app](https://help.tableau.com/current/online/en-us/connected_apps.htm) (added in Tableau Cloud June 2022 (API 3.16); Tableau Server 2022.3 (API 3.17)): ``` ``` When a JWT sign-in is used, the JWT must be configured with the scopes of the REST API methods the connected app can access. You can find the scope for a JWT-supported method in a method's properties block or references details under the **Access scope** section. These sections show the scope declaration to use in the JWT that calls that method. **Note:** Beginning in API 3.20 (June 2023) for Tableau Cloud and API 3.21 (Tableau 2023.3) for Tableau Server, the Sign In (and Sign Out) method is supported by JWT authorization using connected apps but does not require a scope to use. **About connected app errors** If you encounter issues with signing in with a JWT, the response body is appended with an additional error code that you can reference in [Troubleshoot scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm#signin) (Tableau Cloud Help) or [Troubleshoot scopes](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm#signin) (Tableau Server Help). For example, in the following response body, you can reference “10084” to help troubleshoot issues with signing in to Tableau Cloud or Tableau Server using a JWT for REST API authorization. "summary": "Signin Error", "detail": "Error signing in to Tableau Cloud (10084)" ### Unified access tokens JWT Signing in with a JSON Web Token (JWT) using a unified access token (added in Tableau Cloud December 2025 (API 3.27)): XML ``` ``` JSON ``` { "credentials": { "jwt": "json-web-token", "isUat": is-uat, "site": { "contentUrl": "" } } } ``` When JWT sign-in is used, the JWT must be configured with the scopes for the REST API capabilities that should be available to the unified access token (UAT). You can find the scope for a JWT-supported method in a method's properties block. The properties block shows the scope declaration to use in the JWT that calls that method. If a scope is not listed in the method's properties block, access to that method can't be limited by a JWT. For more information about UATs, see [Unified Access Tokens](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html) in the Tableau Cloud Manager REST API Help. #### Attribute Values
personal-access-token-name

The name of the personal access token when signing in with a personal access token. The token name is available on a user’s account page on Tableau server or online.

personal-access-token-secret

The secret value of the personal access token when signing in with a personal access token. The value of the secret is available only in the dialog that appears when a user creates a personal access token as described in the Tableau Help.

username The name of the user when signing in with username and password. The name and password in the <credentials> element can represent any user in the specified site. If the user is not an administrator, they might have limited permissions to perform subsequent operations.

Note: If the server is configured to use Active Directory authentication, and if the user name is not unique across domains, you must include the domain as part of the user name (for example, domain_name\Adam).

password The password when signing in with username and password.
json-web-token A JSON Web Token (JWT) associated with a Tableau connected app or unified access token (Tableau Cloud only).

Tableau connected apps JWT: If using Tableau connected apps, the JWT uses a shared secret provided by the Tableau connected app and signed by your external application. Depending on the method used to create the connected app, a JWT can be generated by the connected app as part of the external app's call to sign in to Tableau. The JWT must include access scopes that determine which REST methods the external app can call.

Unified access tokens: Starting in December 2025, if using unified access tokens (UATs), the JWT uses a shared secret as part of the UAT configuration. Added in API 3.27, Tableau Cloud only.

is-uat Enables JWT authorization using a unified access token (UAT) when set to true. Added in API 3.27, Tableau Cloud only.
content-url

The permanent name of the site to sign in to. The content URL appears in the URL path of Tableau content in your browser address bar after the Tableau Server URL.

mySite is the content URL in the following example:

http://<server or cloud URL>/#/site/mySite/explore

For Tableau Server, to specify the default site, omit contentUrl from the site element, or make the contentUrl value an empty string (contentUrl="").

For Tableau Cloud, a sign-in request must have a site element containing a contentUrl with the value of an existing site. If these are missing, the sign-in request will fail.

user-to-impersonate The LUID of a user to sign in as. For impersonation when a system administrator signs in with user name and password.
#### Permissions Any Tableau user can sign in through the REST API. A user that does not have administrator permissions will have limited permissions to perform subsequent operations. Only server administrators can sign in with username and password in order to impersonate other Tableau Server users. #### Response Code 200 #### Response Body ``` ``` An `estimatedTimeToExpiration` value is returned when you sign in using a PAT. The value represents the approximate time until the PAT will expire and need to be refreshed. The estimated time is based on regular usage of the token for authenticating calls, but actual time may be shorter if the token is unused for an extended length of time. The `estimatedTimeToExpiration` value uses the format `DAYS:HH:MM`, where: - The first segment represents **days** - The second segment represents **hours** - The third segment represents **minutes** For example, a value of `2:12:30` indicates 2 days, 12 hours, and 30 minutes until expiration. This format does _not_ represent hours:minutes:seconds. For more information, see the following: - Tableau Cloud - [About PAT expiration](https://help.tableau.com/current/online/en-us/security_personal_access_tokens.htm#about-pat-expiration) - Tableau Server - [Change personal access tokens expiry](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm#change-personal-access-tokens-expiry) #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains both username/password and a personal access token, or contains malformed XML.
401401001Login errorThe credentials (name or password, or personal access token name or secret) are invalid for the specified site, or the site contentURL is invalid.
401401001Login errorLogin is blocked because several requests with invalid credentials were made.
401401001Login errorThe Administrator requires the user to update their password.
401401001Login errorThe password has expired.
401401009Login errorThe request body is missing or empty.
405405000Invalid request methodRequest type was not POST.

If you are signing in to a Tableau Cloud site, this error may be caused by leaving the pod name out of the server address in the URI.

The error can also be caused by attempting to make a request to a SSL-protected server using HTTP, rather than HTTPS.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "https://MY-SERVER/api/3.29/auth/signin" -X POST -d @signin.xml` **Content of signin.xml:** ``` ``` **Example response:** ``` ``` ## Sign Out Signs you out of the current session. This call invalidates the authentication token that is created by a call to [Sign In](#sign_in). **Notes:** - Beginning in API 3.20 (June 2023) for Tableau Cloud and API 3.21 (Tableau 2023.3) for Tableau Server, the Sign Out (and Sign In) method is supported by JWT authorization but does not require a scope to use. For more information, see [JWT](#jwt). #### URI POST /api/api-version/auth/signout #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body None #### Permissions Any user can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:*:* ``` 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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Examples `curl "http://MY-SERVER/api/3.29/auth/signout" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Switch Site Switches you onto another site without having to provide a user name and password again. This method allows an authenticated user to switch sites that they have access to. When you call this method, you must provide the current authorization token as the value of the X-Tableau-Auth header. Using the current authentication token, the method signs you in as a user on the site specified in the request payload. The method returns a new authentication token and invalidates the old one. You have the permissions of the user associated with the authorization token. By default, the token is good for 240 minutes. (You can specify a different timeout value for the token by calling the `tsm configuration set` command to change the wgserver.session.idle\_limit setting.) **Note** This method is not available on Tableau Cloud. #### URI POST /api/api-version/auth/switchSite #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body ``` ``` #### Attribute Values
content-url

The permanent name of the site to sign in to. The content URL appears in the URL path of Tableau content in your browser address bar after the Tableau Server URL.

mySite is the content URL in the following example:

http://<server or cloud URL>/#/site/mySite/explore

For Tableau Server, to specify the default site, omit contentUrl from the site element, or make the contentUrl value an empty string (contentUrl="").

For Tableau Cloud, a sign-in request must have a site element containing a contentUrl with the value of an existing site. If these are missing, the sign-in request will fail.

#### Permissions Tableau Server users who are not server administrators can switch sites, provided that they have access to the destination site. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:sites:switch ``` 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 ``` ``` #### Version Version 2.6 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authentication credentials were provided.
401401002Unauthorized accessInvalid authentication credentials were provided.
401401003Switch site errorThere was a problem switching sites. The site might be unavailable or is not found.
403403070Cannot switch to the same siteThe site specified as the destination site is also the current site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "https://MY-SERVER/api/3.29/auth/switchSite" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"-d @switch_site.xml` **Content of switch\_site.xml:** ``` ``` **Example response:** ``` ``` [Skip to main content](#main-content) # Signing In and Signing Out (Authentication) The Tableau REST API requires that you send a credentials token with each request. The credentials token lets Tableau Server or Tableau Cloud verify you as a valid, signed in user. To get a credentials token, you call [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_in) and pass credentials of a valid user, either a Personal Access Token (PAT), a user name and password, along with the content URL (subpath) of the site you are signing in to. A [subset of Tableau REST methods](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm#scopes-available-for-the-tableau-rest-api-tableau-online-only) support authenticated sessions using a JSON Web Token (JWT), typically used in conjunction with a Tableau [connected app](https://help.tableau.com/current/online/en-us/connected_apps.htm) or [unified access token](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html) (Tableau Cloud only). **Notes:** - The REST API does not support single-sign (SSO). To sign in, you must specify the name and password of a user who has been created on Tableau Server or Tableau Cloud. REST API calls will have the permissions of the user they sign in as. We strongly recommend PAT signin because it is more secure. For information about the requirements for using SAML, see [SAML Requirements](https://help.tableau.com/current/server/en-us/saml_requ.htm) in Tableau Server Help and in Tableau Cloud Help. - (Tableau Cloud only) If multi-factor authentication (MFA) is enabled with Tableau authentication, personal access tokens (PATs) are required. You must use a PAT, instead of user name and password, to make a REST API sign in request to Tableau Cloud. Alternatively, you can use unified access tokens (UATs). ## Sign In URI The following example shows the URI for a Sign In using a POST request: ``` POST http://my-server/api/3.29/auth/signin ``` **Server path parameter** The `my-server` value in the sign in URI is the base URL for your Tableau Server. For Tableau Cloud, the server address in the URI must contain the pod name, such as `10az`, `10ay`, or `us-east-1`. For example, the URI to sign in to a site in the 10ay pod would be: ``` https://10ay.online.tableau.com/api/3.29/auth/signin ``` ### Choose How to Sign In To help you choose the right sign-in workflow, the table below compares the four ways to authenticate to the Tableau REST API: personal access tokens (PATs), Tableau connected apps, unified access tokens (UATs), and standard credentials (username and password).
Scenario or use casePersonal access tokens (PATs)Connected apps JWTUnified access tokens (UATs) JWTUsername and password
Access    
Enables Tableau REST API accessTableau Cloud, Tableau ServerTableau Cloud, Tableau ServerTableau CloudTableau Server, limited in Tableau Cloud
Permissions    
Restricts setup to server administrators Tableau Server  
Restricts setup to site administrators Tableau Cloud  
Restricts setup to cloud administrators  Tableau Cloud 
Permits setup to all usersTableau Cloud, Tableau Server  Tableau Server, limited in Tableau Cloud
Supports centralized setup  Tableau Cloud 
Security and session management    
Allows single token revocation  Tableau Cloud 
Allows concurrent user sessions Tableau Cloud, Tableau ServerTableau Cloud 
Supports user impersonationTableau Server  Tableau Server
Supports access scopes Tableau Cloud, Tableau ServerTableau Cloud 
## Make a Sign In Request with a Personal Access Token A personal access token (PAT) validates that a user is allowed to sign in to a site. A sign in using a PAT returns the same information as a username and password sign in (i.e., a credentials token, site LUID, and user LUID), but without the security risk of exposing hard-coded usernames and passwords, or an interactive login experience. PATs are long-lived, and can be revoked without disabling the Tableau user they are attached to. A user can have multiple PATs, which allows for granular monitoring and revocation of access rights. For example, an admin might group their scripts into functional areas (like permissions, subscriptions, and data source refreshes) and use a different PAT for each area. For more information, see one of the following topics:  - For Tableau Cloud, see [Personal Access Token](https://help.tableau.com/current/online/en-us/security_personal_access_tokens.htm) in the Tableau Cloud Help. - For Tableau Server, see [Personal Access Token](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm) in the Tableau Server Help. When you [create a Personal Access Token](https://help.tableau.com/current/pro/desktop/en-us/useracct.htm#create-and-revoke-personal-access-tokens), Tableau Cloud or Tableau Server displays a dialog that shows the PAT name and secret. There is no way to retrieve a secret after that Personal Access Token dialog is closed. Copy the secret value to use in your sign in request body. ### Personal access token expiration PATs expire if they are not used for 15 consecutive days. If they are used more frequently than every 15 days, the following can occur: - On Tableau Cloud, PATs expiration depends on the site setting, which is configurable by a site admin. - On Tableau Server, PATs expire after one year by default. After PATs have expired they can’t be used for authentication and are removed from your My Account Settings page in Tableau Cloud or Tableau Server. ### Request body The XML request body (message payload) using a PAT looks like the following example. The header of the request should contain either the key value pair `Content-Type` : `text/xml`, or `Content-Type` : `application/xml`. ``` ``` The same request body using JSON looks like the following. Its header should contain `Content-Type` : `application/json`. ``` { "credentials": { "personalAccessTokenName": "MY_TOKEN_NAME", "personalAccessTokenSecret": "qlE1g9MMh9vbrjjg==:rZTHhPpP2tUW1kfn4tjg8", "site": { "contentUrl": "MarketingTeam" } } } ``` ## Make a Sign In request with a JWT A JSON Web Token (JWT) is an industry standard authorization method that allows an app to generate credentials for an authorized user. JWTs are commonly used in scenarios where authentication provided by one service enables authorization of another service. For example, a user signs into an external app using their Google credentials, then the external app creates a JWT to authorize a user for Tableau credentials. JWTs are enabled through Tableau connected apps or unified access tokens (Tableau Cloud only). #### Tableau connected apps For more information about connected apps, see one of the following: - Tableau Cloud - [Use Tableau Connected Apps for Application Integration](https://help.tableau.com/current/online/en-us/connected_apps.htm) - Tableau Sever - [Use Tableau Connected Apps for Application Integration](https://help.tableau.com/current/server/en-us/connected_apps.htm) #### Unified access tokens For more information about UATs, see [Unified Access Tokens](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html) in the Tableau Cloud Manager REST API Help. ### Access scopes To ensure minimum access to administrative tasks and content, the JWT should contain access scopes that determine which methods are accessible to the connected app or UAT. Both connected apps and UATs share the same access scopes. You can find the required scope for a JWT-supported method in its properties block or section in the Tableau REST API Help or TCM REST API Help. If a scope is not listed in the method, access to that method can’t be controlled by a JWT. For more information about access scopes for connected apps, see one of the following: - Tableau Cloud - [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) - Tableau Server - [Access scopes for connected apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) For more information about UAT scopes, see [About least privileged and access scopes](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#about-least-privileged-access-and-access-scopes-). ### Sign in with connected apps JWT One method you can use to to authorize access to the REST API using a JWT is using Tableau connected apps. For a connected apps workflow, two things must be true. First, a Tableau [connected app](https://help.tableau.com/current/online/en-us/connected_apps.htm) must be created by a Tableau Server administrator or Tableau Cloud site admin. Depending on the type of connected app, a JWT can be generated by the connected app as part of the external app's call to sign in to Tableau. Second, the JWT also must contain JWT-supported [access scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) that determine which methods the connected app can call. #### Request body The XML request body (message payload) for a sign in request using a JWT looks like the following example. The header of the request should contain either the key value pair `Content-Type` : `text/xml`, or `Content-Type` : `application/xml`. ``` ``` The same request body using JSON looks like the following. Its header should contain `Content-Type` : `application/json`. ``` { "credentials": { "jwt": "eyJpc3MiOiI1NmUwZGZhYi0zNDA3LTRlNWMtYWY5Ni04YzI1ZmY0NWI3ODMiLCJhbGciOiJIUzI1NiIsImtpZCI6ImJlNzFkNDc0LWMxOTctNDljNS04ZWIzLTM5YWU4MWVjNDNhYyJ9.eyJhdWQiOiJ0YWJsZWF1Iiwic3ViIjoidGVzdDEyMyIsInNjcCI6WyJ0YWJsZWF1OmNvbnRlbnQ6cmVhZCJdLCJpc3MiOiI1NmUwZGZhYi0zNDA3LTRlNWMtYWY5Ni04YzI1ZmY0NWI3ODMiLCJleHAiOjE2NDc2MjM1NzUsImp0aSI6ImY0MzdkNDFmLWM1MmMtNGE5Mi1hYTA1LWFjYTYyMGViZTgzMSJ9.pntsSpHmrxTT5XmiJi1Ls2qQdu4qMRQ5vgRuN7gtS_U", "site": { "contentUrl": "MarketingTeam" } } } ``` ### Sign in with unified access tokens JWT **(Tableau Cloud only)** Another method to authorize access to the REST API using a JWT is through unified access tokens (UAT). UATs are configurations that must be generated through [Tableau Cloud Manager REST API](https://help.tableau.com/current/api/cloud-manager/en-us/reference/index.html) and be associated with the JWT token that is used to sign in to the Tableau REST API. To ensure minimum access to administrative tasks and content, the JWT must contain access scopes that determine which methods are accessible to the UAT. #### Request body The XML request body (message payload) for a sign in request using a JWT looks like the following example. The header of the request should contain either the key value pair `Content-Type : text/xml`, or `Content-Type : application/xml`. ``` isUat= "true" ``` The same request body using JSON looks like the following. Its header should contain `Content-Type : application/json`. ``` { "credentials": { "jwt": "eyJpc3MiOiI1NmUwZGZhYi0zNDA3LTRlNWMtYWY5Ni04YzI1ZmY0NWI3ODMiLCJhbGciOiJIUzI1NiIsImtpZCI6ImJlNzFkNDc0LWMxOTctNDljNS04ZWIzLTM5YWU4MWVjNDNhYyJ9.eyJhdWQiOiJ0YWJsZWF1Iiwic3ViIjoidGVzdDEyMyIsInNjcCI6WyJ0YWJsZWF1OmNvbnRlbnQ6cmVhZCJdLCJpc3MiOiI1NmUwZGZhYi0zNDA3LTRlNWMtYWY5Ni04YzI1ZmY0NWI3ODMiLCJleHAiOjE2NDc2MjM1NzUsImp0aSI6ImY0MzdkNDFmLWM1MmMtNGE5Mi1hYTA1LWFjYTYyMGViZTgzMSJ9.pntsSpHmrxTT5XmiJi1Ls2qQdu4qMRQ5vgRuN7gtS_U", "isUat": true "site": { "contentUrl": "MarketingTeam" } } } ``` ## Make a Sign In Request with Username and Password The XML request body (message payload) for a sign in request using a username and password looks like the following example. The header of the request should contain either the key value pair `Content-Type` : `text/xml`, or `Content-Type` : `application/xml`. ``` ``` The same request body using JSON looks like the following. Its header should contain `Content-Type` : `application/json`. ``` { "credentials": { "name": "admin", "password": "p@ssword", "site": { "contentUrl": "MarketingTeam" } } } ``` ## About the pod name **(Tableau Cloud only)** The server address in the URI must contain the pod name, such as "prod-ca-a". For example, the URI to sign in to a site on the "prod-ca-a" pod would be: `https://prod-ca-a.online.tableau.com/api/api-version/auth/signin` To find the pod name, do the following: 1. Sign in to [Tableau Cloud](https://online.tableau.com). 2. Navigate to your browser's address bar. The pod name is in the first portion of the URL after you've successfully signed in. For more information about signing in to Tableau Cloud, see [Sign In to Tableau Cloud](https://help.tableau.com/current/online/en-us/to_signin.htm) in the Tableau Cloud Help. ## About the site attribute The `site` element of a sign in request lets you specify the site to sign in to by setting the value of the `contentUrl` attribute. The content URL is the subpath of a site's full URL. In the server environment, it is referred to as the Site ID. When you sign in to Tableau Server or Tableau Cloud manually, the `contentUrl` is the the value that appears after `/site/` in the Browser address bar. For example, in the following URLs, the content URL is `MarketingTeam`: - Tableau Server - `http://MyServer/#/site/**MarketingTeam**/projects` - Tableau Cloud - `https://10ay.online.tableau.com/#/site/**MarketingTeam**/workbooks` **Notes:** - For Tableau Server, to specify the default site, omit `contentUrl` from the `site` element, or make the `contentUrl` value an empty string (`contentUrl=""`). - For Tableau Cloud, a sign in request must have a `site` element containing a `contentUrl` with the value of an existing site. If these are missing, the Sign In request will fail. ## Response for a successful Sign In operation If the Sign In call is successful, the body of the response contains an credentials token, the site ID of the site you're signed in to, and the user ID of the user you're signed in as. The following example shows the response in XML (when Content-Type header is set to `text/xml` or `application/xml` or when the Accept header is set to `application/xml`). ``` ``` In JSON, the response would look like the following (when Content-Type or the Accept header is set to `application/json`), ``` { "credentials": { "site": { "id": "9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d", "contentUrl": "" }, "user": { "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" }, "token": "HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3" } } ``` The `id` attribute is the LUID, or locally unique identifier, for the site. In the preceding example, the site LUID is `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d`. Many REST API methods require the site LUID to specify the site in their URI. For more information, see [Identifying Resources Using Locally Unique Identifiers (LUIDs)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_luid.htm). ## Using the Credentials Token In Subsequent Calls When you get the response, you parse the credentials token out of the response and store it in your application. By default, the credentials token is good for 240 minutes. (You can specify a different timeout value for the token by calling the [tsm configuration set](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm) command to change the wgserver.session.idle\_limit setting.) If your application needs to be able to make additional calls after the credentials token has expired, you can call Sign In again and get a new credentials token. You include the credentials token as the value of the X-Tableau-Auth header for all other REST API calls. For example: X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3 **Note:** The credentials token is valid for REST API calls, VizQL Data Service calls, and Tableau Metadata API (GraphQL) queries. You cannot use the credentials token as authentication for other operations with Tableau Server or Tableau Cloud. In addition, the credentials token is good only for operations in the site that you're signed in to. You cannot sign in to one site and then use the token you get back to send requests to a different site. If you do, the server returns an HTTP 403 (Forbidden) error. When you are finished with a session, you call Sign Out. This invalidates the credentials token, which makes sure that no one else can use the credentials token to make calls to the REST API. ## Impersonating a User **(Tableau Server only)** If you are a system administrator on Tableau Server, you can sign in using your username and password credentials for that role, and then impersonate any user on the system. This might be useful if sign-in is being managed by a process that runs as a specific user (the administrator) but needs to be able to access Tableau Server using different user identities. While you are signed in impersonating a user, you will have that user’s permissions. If the user is not an administrator, their permissions will limit your ability to make some REST calls. To sign in using impersonation, you include a user element in the request body and specify the Tableau Server user ID (not name) of the user to impersonate, as in the following XML request: ``` ``` Or in JSON: ``` { "credentials": { "name": "admin", "password": "p@ssword", "site": { "contentUrl": "Marketing" }, "user": { "id": "9f9e9d9c8-b8a8-f8e7-d7c7-b7a6f6d6e6d" } } } ``` You can get a user ID by using one of the following methods: - [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_user_to_site) - [Get Users on Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_on_site) - [Get Users in Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_in_group) ## Python Example for Sign In and Sign Out (XML) The following example in Python shows how to use the REST API to sign in to Tableau Server and get back an credentials token. Note the following about this example: - The code illustrates a [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) request and a [Sign Out](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_out) request. - By default, your sign in will use a personal access token for authentication credentials. You must set the `use-pat-flag` to `False` to use username and password as credentials. - You must substitute the name of your own server for the `MY-SERVER` placeholder. - You must substitute the API version number of your own server for the `version` placeholder. To find your server's API version number, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). - You must substitute your own credential values in either the `TOKEN_NAME` and `TOKEN_SECRET`, or `USERNAME` and `PASSWORD` placeholders. - The code makes HTTP requests using the urllib2 library that is built into Python. Use HTTPS requests when working with Tableau Cloud or a Tableau Server that is configured to use SSL. - The code creates and parses the XML block in the response body using the built-in `ElementTree` method. For details, see the [ElementTree XML API](https://docs.python.org/2/library/xml.etree.elementtree.html) documentation on the Python website. For additional examples, see [REST API Samples](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_samples.htm). ``` # This example shows how to use the Tableau Server REST API # to sign in to a server, get back an credentials token and # site ID, and then sign out. # The example runs in Python 2.7 and Python 3.3 try: # Python 3 from urllib.request import urlopen, Request except ImportError: # Python 2 from urllib2 import urlopen, Request import xml.etree.ElementTree as ET # For parsing XML responses # NOTE! Substitute your own values for the following variables: use_pat_flag = True # True = use personal access token for sign in, False = use username and password for sign in. server_name = "YOUR_SERVER" # Name or IP address of your installation of Tableau Server version = "x.x" # API version of your server site_url_id = "SITE_SUBPATH" # Site (subpath) to sign in to. An empty string is used to specify the default site. # For username and password sign in user_name = "USERNAME" # User name to sign in as (e.g. admin) password = "PASSWORD" # For Personal Access Token sign in personal_access_token_name = "TOKEN_NAME" # Name of the personal access token. personal_access_token_secret = "TOKEN_VALUE" # Value of the token. signin_url = "https://{server}/api/{version}/auth/signin".format(server=server_name, version=version) if use_pat_flag: # The following code constructs the body for the request. The resulting element will # look similar to the following example: # # # # # # # # request_xml = ET.Element('tsRequest') credentials = ET.SubElement(request_xml, 'credentials', personalAccessTokenName=personal_access_token_name, personalAccessTokenSecret=personal_access_token_secret) site_element = ET.SubElement(credentials, 'site', contentUrl="") else: # The following code constructs the body for the request. The resulting element will # look similar to the following example: # # # # # # # # request_xml = ET.Element('tsRequest') credentials = ET.SubElement(request_xml, 'credentials', name=user_name, password=password) site_element = ET.SubElement(credentials, 'site', contentUrl="") request_data = ET.tostring(request_xml) # Send the request to the server req = Request(signin_url, data=request_data, method="POST") req = urlopen(req) # Get the response server_response = req.read() # Parse the response XML. The response body will look similar # to the following example: # # # # # # # # response_xml = ET.fromstring(server_response) # Get the credentials token from the element token = response_xml.find('.//t:credentials', namespaces={'t': "http://tableau.com/api"}).attrib['token'] # Get the site ID from the element site_id = response_xml.find('.//t:site', namespaces={'t': "http://tableau.com/api"}).attrib['id'] print('Sign in successful!') print('\tToken: {token}'.format(token=token)) print('\tSite ID: {site_id}'.format(site_id=site_id)) # Set the authentication header using the credentials token returned by the Sign In method. headers = {'X-tableau-auth': token} # ... Make other calls here ... # Sign out signout_url = "https://{server}/api/{version}/auth/signout".format(server=server_name, version=version) req = Request(signout_url, headers=headers, data=b'') req = urlopen(req) print('Sign out successful!') ``` ## Python Example for Sign In and Sign Out (JSON) The following example in Python shows how to use the REST API to sign in to Tableau Server and get back an credentials token. The example supports JSON request and response payloads. Support for JSON was introduced in REST API 2.5. Note the following about this example: - The code illustrates a [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) request and a [Sign Out](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_out) request. - By default, your sign in will use a personal access token for authentication credentials. You must set the `use-pat-flag` to `False` to use username and password as credentials. - You must substitute the name of your own server for the `MY-SERVER` placeholder. - You must substitute the API version number of your own server for the `version` placeholder. To find your server's API version number, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). - You must substitute your own credential values in either the `TOKEN_NAME` and `TOKEN_SECRET`, or `USERNAME` and `PASSWORD` placeholders. - The code makes HTTP requests using the Requests library. Use HTTPS requests when working with Tableau Cloud or a Tableau Server that is configured to use SSL. - The code creates and parses the JSON block in the response body using the Requests and JSON libraries. For details, see the documentation on the Python website. For additional examples, see [REST API Samples](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_samples.htm). ``` # This example shows how to use the Tableau Server REST API # to sign in to a server, get back a credentials token and # site ID, and then sign out. # The example runs in Python 2.7 and Python 3.3 code import requests, json # NOTE! Substitute your own values for the following variables use_pat_flag = True # True = use personal access token for sign in, false = use username and password for sign in. server_name = "YOUR_SERVER" # Name or IP address of your installation of Tableau Server version = "x.x" # API version of your server site_url_id = "SITE_SUBPATH" # Site (subpath) to sign in to. An empty string is used to specify the default site. # For username and password sign in user_name = "USERNAME" # User name to sign in as (e.g. admin) password = "{PASSWORD}" # For Personal Access Token sign in personal_access_token_name = "TOKEN_NAME" # Name of the personal access token. personal_access_token_secret = "TOKEN_VALUE" # Value of the token. signin_url = "https://{server}/api/{version}/auth/signin".format(server=server_name, version=version) if use_pat_flag: # The following code constructs the body for the request. # The resulting element will look similar to the following example: # # { # "credentials": { # "personalAccessTokenName": "TOKEN_NAME", # "personalAccessTokenSecret": "TOKEN_VALUE", # "site": { # "contentUrl": "" # } # } # } # payload = { "credentials": { "personalAccessTokenName": personal_access_token_name, "personalAccessTokenSecret": personal_access_token_secret, "site": {"contentUrl": site_url_id }}} headers = { 'accept': 'application/json', 'content-type': 'application/json' } else: # The following code constructs the body for the request. The resulting element will# look similar to the following example: # # # { # "credentials": { # "name": "USERNAME", # "password": "PASSWORD", # "site": { # "contentUrl": "" # } # } # } # payload = { "credentials": { "name": user_name, "password": password, "site": {"contentUrl": site_url_id }}} headers = { 'accept': 'application/json', 'content-type': 'application/json' } # Send the request to the server req = requests.post(signin_url, json=payload, headers=headers, verify=False) req.raise_for_status() # Get the response response = json.loads(req.content) # Parse the response JSON. The response body will look similar # to the following example: # # { # "credentials": { # "site": { # "id": "xxxxxxxxxx-xxxx-xxxx-xxxxxxxxxx", # "contentUrl": "" # }, # "user": { # "id": "xxxxxxxxxx-xxxx-xxxx-xxxxxxxxxx" # }, # "token": "CREDENTIALS_TOKEN" # } # } # # Get the credentials token from the credentials element token = response["credentials"]["token"] # Get the site ID from the element site_id = response["credentials"]["site"]["id"] print('Sign in successful!') print('\tToken: {token}'.format(token=token)) print('\tSite ID: {site_id}'.format(site_id=site_id)) # Set the authentication header using the token returned by the Sign In method. headers['X-tableau-auth']=token # ... Make other calls here ... # Sign out signout_url = "https://{server}/api/{version}/auth/signout".format(server=server_name, version=version) req = requests.post(signout_url, data=b'', headers=headers, verify=False) req.raise_for_status() print('Sign out successful!') ``` [Skip to main content](#main-content) # Bridge Methods Using the Bridge methods of the Tableau REST API you can: - **Bridge clients:** List Bridge clients for a site or get details for a specific Bridge client; delete a Bridge client; move a Bridge client between pools or to unassigned status. - **Bridge pools:** List, create, update, and delete Bridge pools. [Bridge pools](https://help.tableau.com/current/online/en-us/to_enable_bridge_live_connections.htm) are logical groupings of Bridge clients for load distribution and management. - **Bridge domains:** Add domains to pools, block domains, update domain names or pool assignment, get domain mapping, and delete domain mappings. - **Bridge routing rules:** Create, get, update, and delete Bridge routing rules; add or remove project scoping on an allow rule. Routing rules route a domain's Bridge queries to a specific pool (optionally scoped to projects) or block a domain from being routed. These methods are available for Tableau Cloud. Bridge clients enable secure data connections between Tableau Cloud and on-premises data sources. For more information, see [Use Bridge to Keep Data Fresh](https://help.tableau.com/current/online/en-us/qs_refresh_local_data.htm). ## Add Domain to Pool Associates a domain with a specific Bridge pool, allowing Bridge clients from that domain to use the pool. Each domain can only be assigned to one pool at a time. Root domains and subdomains are supported. Domain assignments are site-specific. Adding a domain already in the pool returns an error. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/bridge-domain-maps #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "example.com", "newPoolLuid": "ebae40a5-d7e4-4214-b3d5-b0715c627b71" } } ``` #### Attribute Values
existingDomainNameThe domain to add to the pool. Root domains and subdomains are supported.
newPoolLuidThe UUID of the Bridge pool to add the domain to. Must be a user-created pool (not a reserved system pool).
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid domain name, invalid pool ID, domain already exists, or pool not foundDomain must conform to valid format; pool ID must be valid UUID and exist; domain must not already be in this pool.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503904Unexpected server errorAn unexpected error occurred while adding the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Projects to Routing Rule Adds one or more project filtering conditions to an existing allow rule, narrowing the rule so it applies only to the listed projects. This method applies to allow rules only; adding projects to a block rule is rejected. Each project ID must be a valid UUID and reference a project that exists on the site, and a project already associated with the rule cannot be added again. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/bridge-routing-rules/routing-rule-id/projects #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the allow rule to add projects to.
#### Request Body ``` ``` ``` { "routingRuleProjects": { "mode": "add", "project": [ { "id": "11111111-2222-3333-4444-555555555555" }, { "id": "66666666-7777-8888-9999-000000000000" } ] } } ``` #### Attribute Values
modeRequired. The operation mode; must be add for this method.
projectRequired. One or more project IDs to add. Each entry requires an id.
#### Response Code 200 #### Response Body Returns the updated `routingRule` with the added projects reflected in `project`. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "poolName": "WindowsPool", "project": [ { "id": "11111111-2222-3333-4444-555555555555", "name": "Finance", "isDeleted": false }, { "id": "66666666-7777-8888-9999-000000000000", "name": "Sales", "isDeleted": false } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedMissing or empty project list, invalid project or rule UUID, or projects not found on the site.
400503910Invariant violationAttempted to add projects to a block rule.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
409503912Project already presentOne or more of the projects is already associated with this routing rule.
429429000Rate limit exceededToo many requests sent in a given time period.
500503921Unexpected server errorAn unexpected error occurred while adding projects.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Block Domain Blocks a domain from being used with any Bridge pool, preventing Bridge clients from that domain from connecting. Blocking is site-specific and takes precedence over pool assignments; blocked domains cannot be added to any pool. Existing connections from the domain may be terminated. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-domain-maps/block-domain #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "example.com", "isBlocked": true } } ``` #### Attribute Values
existingDomainNameRequired. The domain to block or unblock.
isBlockedSet to true to block the domain; set to false to unblock (remove from blocked list).
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid domain name or missing isBlockedDomain must conform to valid format; isBlocked parameter is required.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503905Unexpected server errorAn unexpected error occurred while blocking the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Bridge Pool Creates a new Bridge pool with the specified name. The pool is created empty (no domain assignments or Bridge clients). The system assigns a UUID; use List Bridge Pools to get the pool ID after creation, then add domains and assign clients. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/bridge-pools #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "edgePool": { "pool": { "name": "Production Pool" } } } ``` #### Attribute Values
nameRequired. Display name for the pool, 1–80 characters. Must be unique within the site.
#### Response Code 201 Created #### Response Body None. The pool is created with a system-generated UUID; use List Bridge Pools to get the pool ID. #### Errors
HTTP statuserror CodeConditionDetails
400409004 / 400929Missing, empty, invalid, or duplicate pool namePool name required, 1–80 characters; must be unique on the site.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503900Unexpected server errorAn unexpected error occurred while creating the pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Routing Rule Creates a Bridge routing rule for a site. A routing rule controls how Bridge queries for a domain are routed. An allow rule (`isBlocked=false`) routes the domain to a designated pool, optionally scoped to specific projects; a block rule (`isBlocked=true`) prevents the domain from being routed through Bridge. All routing-rule methods require Tableau Cloud site admin privileges and Bridge feature enablement for the site. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/bridge-routing-rules #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "routingRule": { "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "project": [ { "id": "11111111-2222-3333-4444-555555555555" }, { "id": "66666666-7777-8888-9999-000000000000" } ] } } ``` #### Attribute Values
domainRequired. The domain the rule matches, for example example.com. Both root domains and subdomains are supported.
isBlockedRequired. true creates a block rule; false creates an allow rule. The request is rejected if this attribute is omitted.
poolIdRequired for allow rules (isBlocked=false). The UUID of the target Bridge pool. Must be omitted for block rules.
projectOptional. One or more project IDs that scope an allow rule to specific projects. Each entry requires an id. Must be omitted for block rules.
#### Response Code 201 Created #### Response Body Returns the created routing rule. The request accepts only the project `id`; the response returns `id`, `name`, and `isDeleted` for each project, populated by the server. Unset fields are omitted from the response. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "poolName": "WindowsPool", "project": [ { "id": "11111111-2222-3333-4444-555555555555", "name": "Finance", "isDeleted": false } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedMissing routingRule, missing isBlocked, blank or invalid domain, blank or invalid poolId, poolId missing for an allow rule, invalid UUID, or invalid, empty, or not-found projects.
400503910Invariant violationpoolId or project supplied for a block rule.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
409503911Duplicate routing ruleA routing rule already exists for this domain and project scope.
409503931Domain already blockedThe domain is already blocked by an existing block rule.
409503932Domain-only rule existsA domain-only (unscoped) allow rule already exists for this domain; at most one is allowed.
409503933Blocked domain has allow rulesThe domain being blocked still has allow rules; remove them before blocking the domain.
429429000Rate limit exceededToo many requests sent in a given time period.
500503916Unexpected server errorAn unexpected error occurred while creating the rule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Bridge Client Permanently removes a Bridge client from the site. This operation is irreversible; the Bridge client cannot be recovered through the API. Pool assignments are revoked and the client must be re-registered to reconnect. Data sources and scheduled refreshes using this client will be affected; consider moving to unassigned status for temporary deactivation instead of deleting. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/sites/site-luid/bridge-clients/bridge-client-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
bridge-client-idThe unique identifier for the Bridge client to delete.
#### Request Body None #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
404503001Bridge client not foundBridge client with the specified ID does not exist on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503003Unexpected server errorAn unexpected error occurred while deleting the Bridge client.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Bridge Pool Permanently deletes a Bridge pool and all its associated domain mappings. The pool must have no Bridge clients assigned (move clients first). Cannot delete reserved system pools. The operation is irreversible; domain mappings are removed and the pool ID becomes invalid. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/sites/site-luid/bridge-pools/pool-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
pool-idThe unique identifier (UUID) of the pool to delete.
#### Request Body None #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid pool ID or pool not foundPool ID must be valid UUID and exist on the site.
400503902System poolCannot delete reserved system pools.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503902Unexpected server errorAn unexpected error occurred while deleting the pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Domain Removes a domain mapping from the system. The domain is no longer associated with any pool and can be re-added later if needed. For blocked domains, deletion unblocks the domain. Deletion is immediate; existing connections may be terminated and Bridge clients from that domain lose access until the domain is re-added to a pool. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-domain-maps/remove-domain #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "example.com" } } ``` #### Attribute Values
existingDomainNameRequired. The domain name to remove from the system.
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid domain name or domain not foundDomain must conform to valid format and must exist in the system.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503907Unexpected server errorAn unexpected error occurred while deleting the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Routing Rule Permanently deletes a Bridge routing rule identified by its ID. This method applies to both allow rules and block rules. Deletion is immediate; the domain is no longer routed (or blocked) by the removed rule. If no rule matches the ID, a 404 error is returned. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/sites/site-luid/bridge-routing-rules/routing-rule-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the routing rule to delete.
#### Request Body None #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedThe routing-rule-id is not a valid UUID.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503920Unexpected server errorAn unexpected error occurred while deleting the rule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Bridge Client Retrieves detailed information about a single Bridge client. Lookup is site-scoped. The response includes connection status, pool assignment (poolId, assignedToDefaultPool, unassigned), version, and ownership; lastStatusConnectedTime indicates when the client last connected (empty if never connected). This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-luid/bridge-clients/bridge-client-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
bridge-client-idThe unique identifier for the Bridge client to retrieve.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "bridgeClient": { "id": "12345", "name": "Bridge-Client-1", "status": "ONLINE", "version": "2024.1.0", "poolId": "abc-123-def-456", "assignedToDefaultPool": false, "unassigned": false, "lastStatusConnectedTime": "2024-10-30T10:30:00Z", "ownerName": "John Doe", "ownerEmail": "john.doe@example.com" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
404503001Bridge client not foundBridge client with the specified ID does not exist on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503002Unexpected server errorAn unexpected error occurred while retrieving the Bridge client.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Domain Mapping Retrieves information about all domain mappings for the site, including pool assignment and status (ALLOWED or BLOCKED). When status is ALLOWED, poolId is the pool UUID; when BLOCKED, poolId is the string "BLOCKED". URL-encode special characters in domain names in the request. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-luid/bridge-domain-maps #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "bridgeDomain": { "domain": [ { "name": "abc.test.com", "status": "BLOCKED", "poolId": "BLOCKED" }, { "name": "*.myco.lan", "status": "ALLOWED", "poolId": "185da21c-1598-4b2f-9137-fa632e935bf1" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503908Unexpected server errorAn unexpected error occurred while retrieving the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Routing Rule Returns a single Bridge routing rule identified by its ID. The routing-rule-id must be a valid UUID and reference a rule that exists on the specified site; a rule from another site is not returned. If no rule matches, a 404 error is returned. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-luid/bridge-routing-rules/routing-rule-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the routing rule to retrieve.
#### Request Body None #### Response Code 200 #### Response Body Returns a single `routingRule`, identical in shape to the Create Routing Rule response. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "poolName": "WindowsPool", "project": [ { "id": "11111111-2222-3333-4444-555555555555", "name": "Finance", "isDeleted": false } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedThe routing-rule-id is not a valid UUID.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503919Unexpected server errorAn unexpected error occurred while retrieving the rule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Routing Rules Returns all Bridge routing rules for the site. Both allow rules and block rules are returned in a single `routingRules` list; the `isBlocked` flag distinguishes them. A site with no routing rules returns an empty `routingRules` container. Use this method to look up a rule's `id` before updating or deleting it. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-luid/bridge-routing-rules #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### Response Code 200 #### Response Body Returns a `routingRules` list wrapping zero or more `routingRule` elements. Each `routingRule` has the same shape as the Create Routing Rule response. ``` ``` ``` { "routingRules": { "routingRule": [ { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "poolName": "WindowsPool", "project": [ { "id": "11111111-2222-3333-4444-555555555555", "name": "Finance", "isDeleted": false } ] }, { "id": "aa11bb22-cc33-dd44-ee55-ff6677889900", "domain": "blocked.example.com", "isBlocked": true } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503918Unexpected server errorAn unexpected error occurred while listing the rules.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Bridge Clients Retrieves a list of all Bridge clients for a specific site, with optional filtering by pool. Only one filter (poolId, onlyDefaultPool, or onlyUnassigned) can be specified at a time. Each client is in one of three states: assigned to a named pool, assigned to the default pool, or unassigned. The response includes status, pool assignment, and ownership; filtering is mutually exclusive (multiple filters return 400). This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 All clients: GET /api/api-version/sites/site-luid/bridge-clients Filter by pool: GET /api/api-version/sites/site-luid/bridge-clients?poolId=poolId Filter by default pool: GET /api/api-version/sites/site-luid/bridge-clients?onlyDefaultPool=boolean Filter by unassigned: GET /api/api-version/sites/site-luid/bridge-clients?onlyUnassigned=boolean Only one filter can be specified at a time. Specifying multiple filters returns 400 Bad Request. #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
poolIdOptional. Filter by specific pool; returns only Bridge clients assigned to this pool. Mutually exclusive with onlyDefaultPool and onlyUnassigned.
onlyDefaultPoolOptional. If true, returns only Bridge clients in the default pool. Mutually exclusive with poolId and onlyUnassigned.
onlyUnassignedOptional. If true, returns only Bridge clients not assigned to any pool. Mutually exclusive with poolId and onlyDefaultPool.
#### Request Body None #### cURL Request Example `curl "https://myco/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/bridge-clients" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body ``` ``` ``` { "bridgeClients": { "bridgeClient": [ { "id": "12345", "name": "Bridge-Client-1", "status": "ONLINE", "version": "2024.1.0", "poolId": "abc-123-def-456", "assignedToDefaultPool": false, "unassigned": false, "lastStatusConnectedTime": "2024-10-30T10:30:00Z", "ownerName": "John Doe", "ownerEmail": "john.doe@example.com" }, { "id": "67890", "name": "Bridge-Client-2", "status": "OFFLINE", "version": "2024.1.0", "poolId": null, "assignedToDefaultPool": true, "unassigned": false, "lastStatusConnectedTime": "2024-10-29T15:45:00Z", "ownerName": "Jane Smith", "ownerEmail": "jane.smith@example.com" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400BAD_REQUESTMultiple filters specifiedOnly one filter parameter can be specified at a time (poolId, onlyDefaultPool, or onlyUnassigned).
400BAD_REQUESTInvalid poolIdThe poolId specified is reserved and cannot be used as a filter.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503002Unexpected server errorAn unexpected error occurred while retrieving Bridge clients.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Bridge Pools Retrieves a list of all Bridge pools for the specified site, including pool details and associated domain mappings. Each pool includes its ID, display name, and domains with status ALLOWED or BLOCKED. There is no pagination; consider caching results for 5–15 minutes for large deployments. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-luid/bridge-pools #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "edgePool": { "poolList": [ { "pool": { "id": "abc-123-def-456", "name": "Production Pool" }, "domains": { "domain": [ { "name": "example.com", "status": "ALLOWED" }, { "name": "subdomain.example.com", "status": "ALLOWED" } ] } }, { "pool": { "id": "ghi-789-jkl-012", "name": "Development Pool" }, "domains": { "domain": [ { "name": "dev.example.com", "status": "ALLOWED" } ] } } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503903Unexpected server errorAn unexpected error occurred while retrieving pools.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Move Bridge Client Moves a Bridge client between pools or to unassigned status. The operation is atomic (all-or-nothing). For moveToNamedPool the pool must exist and be a valid UUID; moveToUnassigned is useful for temporarily deactivating a client without deleting it. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-clients/bridge-client-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
bridge-client-idThe unique identifier for the Bridge client to move.
#### Request Body ``` ``` ``` { "bridgeClientMoveRequest": { "moveToNamedPool": { "poolId": "abc-123-def-456" } } } ``` #### Attribute Values
poolIdRequired when using moveToNamedPool. The UUID of the Bridge pool to move the client to.
moveToDefaultPoolSet to true to move the Bridge client to the default pool. Use in place of moveToNamedPool.
moveToUnassignedSet to true to move the Bridge client to unassigned status. Use in place of moveToNamedPool.
#### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400BAD_REQUESTMultiple operations specifiedCannot specify more than one move operation in a single request.
400BAD_REQUESTNo operation / Missing poolId / Invalid poolIdRequest must contain exactly one valid move operation; poolId required for moveToNamedPool and must be a valid UUID.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
404503001Bridge client not foundBridge client with the specified ID does not exist on this site.
404503005Pool not foundThe specified poolId does not exist on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503004Unexpected server errorAn unexpected error occurred while moving the Bridge client.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove Projects from Routing Rule Removes one or more project filtering conditions from an existing allow rule, broadening the rule so it no longer applies only to those projects. This method applies to allow rules only; removing projects from a block rule is rejected. Each project ID must be a valid UUID. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/sites/site-luid/bridge-routing-rules/routing-rule-id/projects #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the allow rule to remove projects from.
#### Request Body ``` ``` ``` { "routingRuleProjects": { "mode": "remove", "project": [ { "id": "11111111-2222-3333-4444-555555555555" } ] } } ``` #### Attribute Values
modeRequired. The operation mode; must be remove for this method.
projectRequired. One or more project IDs to remove. Each entry requires an id.
#### Response Code 200 #### Response Body Returns the updated `routingRule` with the removed projects no longer present in `project`. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "poolName": "WindowsPool", "project": [] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedMissing or empty project list, or invalid project or rule UUID.
400503910Invariant violationAttempted to remove projects from a block rule.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503922Unexpected server errorAn unexpected error occurred while removing projects.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Bridge Pool Updates the display name of an existing Bridge pool. The pool ID and domain/Bridge client assignments are unchanged. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-pools/pool-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
pool-idThe unique identifier (UUID) of the pool to update.
#### Request Body ``` ``` ``` { "edgePool": { "pool": { "name": "Updated Production Pool" } } } ``` #### Attribute Values
nameRequired. New display name for the pool, 1–80 characters, unique on the site (excluding the current pool).
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004 / 400929Invalid pool ID, missing name, or duplicate namePool ID must be valid UUID; name required, 1–80 characters, unique (excluding current pool).
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503901Unexpected server errorAn unexpected error occurred while updating the pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Domain Among Pools Moves a domain from its current pool to a different pool. The operation is atomic (all-or-nothing); on failure the domain mapping is unchanged. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-domain-maps/change-pool-assignment #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "example.com", "newPoolLuid": "ebae40a5-d7e4-4214-b3d5-b0715c627b71" } } ``` #### Attribute Values
existingDomainNameRequired. The domain to move.
newPoolLuidRequired. The UUID of the target Bridge pool.
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid domain name, invalid pool ID, domain not found, or pool not foundDomain and pool ID must be valid; domain and pool must exist on the site.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503906Unexpected server errorAn unexpected error occurred while updating the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Domain Name Updates an existing domain mapping by renaming the domain. The operation is atomic (all-or-nothing). This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-domain-maps/update-domain-name #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "existing-domain.com", "newDomainName": "new-domain.com" } } ``` #### Attribute Values
existingDomainNameRequired. The current domain name.
newDomainNameRequired. The new domain name. Must not already exist in the system.
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid existing/new domain name, domain not found, or new name existsDomain names must conform to valid format; existing domain must exist; new name must not already be in use.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503906Unexpected server errorAn unexpected error occurred while updating the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Routing Rule Partially updates an existing Bridge routing rule. You can change the rule's `domain`, `poolId`, and `isBlocked` flag. At least one attribute must be supplied; only the supplied attributes are changed. Project scoping is not changed here—use the Add Projects to Routing Rule and Remove Projects from Routing Rule methods. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-routing-rules/routing-rule-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the routing rule to update.
#### Request Body ``` ``` ``` { "routingRule": { "domain": "new.example.com", "poolId": "b2c3d4e5-6f70-8192-a3b4-c5d6e7f80910" } } ``` #### Attribute Values
domainOptional. A new domain for the rule.
isBlockedOptional. Changes the rule between a block rule (true) and an allow rule (false).
poolIdRequired when transitioning to an allow rule. The UUID of the target Bridge pool. Must be omitted when the rule is, or becomes, a block rule.
#### Response Code 200 #### Response Body Returns the updated `routingRule`, identical in shape to the Create Routing Rule response. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "new.example.com", "isBlocked": false, "poolId": "b2c3d4e5-6f70-8192-a3b4-c5d6e7f80910", "poolName": "WindowsPool", "project": [ { "id": "11111111-2222-3333-4444-555555555555", "name": "Finance", "isDeleted": false } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedEmpty update (no attributes supplied), invalid routing-rule-id or poolId UUID, blank or invalid domain, or poolId missing when transitioning to an allow rule.
400503910Invariant violationpoolId supplied while the rule is, or becomes, a block rule.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
409503911Duplicate routing ruleThe update would collide with an existing rule for the same domain and project scope.
429429000Rate limit exceededToo many requests sent in a given time period.
500503917Unexpected server errorAn unexpected error occurred while updating the rule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Collections Methods Collections REST API endpoints enable you to retrieve and manipulate [Tableau collections](https://help.tableau.com/current/pro/desktop/en-us/collections.htm) programmatically. You can use a Tableau collection to make and share a list of resources. The list items don't need to be in the same project. Users that access a shared collection will only be able to see the items that they have permissions to. With collections REST methods, you can: - List all collections that the signed in user has access to. - Create a collection or delete a specified collection the signed in user has access to. - Get the details of a specified collection the signed in user has access to. - Create or delete specified items in a collection the signed in user has access to. - Update the properties of a batch of collections the signed in user has access to. - List all items of a collection that the signed in user has permissions to. - Transfer ownership of specified collections from one user to another. **Using Filters & Sort Options** When using GET methods for collections endpoints, you can use `filter` and `sort` parameters to: - Filter which collections or items are returned - Control the order in which items appear in the results Valid filter options are: `type` - The resource type of items in a collection, called `contentType` in responses. The value can be one or more comma separated types. - `ownerLuid` - The LUID of the owner. - `visibility` - The value can be `public` or `private`. If no value is provided, then both private and public collections visible to the user will be returned. A private collection is one that has not been shared and can only be seen by its owner, or a user with server or site administrator permissions. A public collection is one that has been shared and is visible to whoever it is shared with. - `createdTime` - The creation time in ISO 8601 format. - `updatedTime` - The last updated time in ISO 8601 format. - `modifiedTime` - The last updated time in ISO 8601 format. - `siteId` - The integer ID value of the site that the collection belongs to. - `favorite` - The boolean value of whether the item is marked as a favorite for the currently signed in user. - `luid` The LUID of the collection. - `title` - The title of the collection item. Use quotes for entry (i.e. `filter=name:eq:Superstore Workbook`). Valid sort options are: - `type` - The resource type of items in a collection, called `contentType` in responses. - `visibility` - The value can be `public` or `private`. If no value is provided, then both private and public collections visible to the user will be returned. A private collection is one that has not been shared and can only be seen by its owner, or a user with server or site administrator permissions. A public collection is one that has been shared and is visible to whoever it is shared with. - `createdTime` - The creation time. - `updatedTime` - The last updated time. - `modifiedTime` - The last updated time. - `title` - The title of the collection item. - `name` - The title of the collection. - `ownerName` - The name of the owner. - `position` - The custom order of the content in the collection. ## Add Collection Permissions Adds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call. If a specified permission has already been granted or denied for a given user or group, the system ignores it. #### URI PUT /api/api-version/sites/site-id/collections/collection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the collection.
collection-idThe ID of the collection to set permissions for.
#### Request Body ``` ``` #### Attribute Values
user-id The ID of the user to add permissions for.
group-id The ID of the group to add permissions for.
capability-name

The capability to assign. The only valid capability for a collection is Read.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it.
#### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
403 403004 No permissions to set permissions. A user attempted to add permissions to a collection, but the caller doesn't have permission to set permissions on the collection.
404 404000 Resource not found The site ID in the URI wasn't found.
404 404002 User not found The user in the request body wasn't found.
404 404012 Group not found The group in the request body wasn't found.
404 404013 Resource not found

The capability to remove the permission for. The only valid capability name for a collection is Read. The only valid capability mode is Allow or Deny.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Collection Permission Removes the specified collection permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/collections/collection-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/collections/collection-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the collection.
collection-id The ID of the collection to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for. The only valid capability for a collection is Read. The only valid capability mode is Allow or Deny.

For more information, see Permissions.

capability-mode Allow to delete an allow permission, or Deny to delete a deny permission. This value is case sensitive.
#### Request Body None #### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a collection. The only valid capability for a collection is Read.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the collection.
404404000Resource not foundThe site ID in the URI wasn't found.
404404002Resource not foundThe user ID in the URI wasn't found.
404404012Resource not foundThe group ID in the URI wasn't found.
404404013Resource not foundThe capability in the URI isn't recognized.
404404014Resource not foundThe user or group permission wasn't found on the collection. Check the permissions on the collection that you're trying to remove and try again.
404404038Resource not foundThe collection ID in the URI wasn't found.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Collection Permissions Returns a list of permissions for a specific collection. #### URI GET /api/api-version/sites/site-id/collections/collection-luid/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the collection.
collection-idThe ID of the collection to get permissions for.
#### Request Body None #### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404038Resource not foundThe collection ID in the URI wasn't found.
404404000Resource not foundThe site ID in the URI wasn't found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add items to a collection Adds items to a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:update. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/collections/{luid}/items/batchCreate [view details](#) ## Batch update collections Batch updates collections. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:update. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/collections/batchUpdate [view details](#) ## Create a collection Creates a new collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:create. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/collections [view details](#) ## Delete collections Deletes collections. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:delete. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/collections [view details](#) ## Delete collections Deletes collections. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:delete. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/collections/{luid} [view details](#) ## Get details of a collection Gets the details of a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:read. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/collections/{luid} [view details](#) ## List collections Lists collections. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:read. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/collections [view details](#) ## List items in a collection Lists items in a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:read. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/collections/{luid}/items [view details](#) ## Remove items from a collection Removes items from a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections: update. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/collections/{luid}/items/batchDelete [view details](#) ## Reorder items in a collection Reorders items in a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:update. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/-/collections/{luid}/orderItems [view details](#) [Skip to main content](#main-content) # Concepts This section provides background information about how to use the Tableau Server REST API and how it works. ## Other articles in this section [Skip to main content](#main-content) # Connected App Methods Connected app-specific methods were introduced in Tableau 2021.4. Site-level external authorization server-specific methods were introduced in September 2022 for Tableau Cloud and in Tableau Server version 2024.2. A connected app enables you to establish a trusted relationship between Tableau and any custom application. A connected app can be used to securely authenticate (SSO) your users to Tableau content embedded in a custom application or to authorize access to the REST API. **Connected app methods using direct trust** Using the connected app methods of the Tableau REST API, you can: - Create, query, update, and delete a Tableau connected app - Create, query, and delete the secret generated for a Tableau connected app This functionality relates to UI elements and concepts described at: - For Tableau Server: [Configure Tableau Connected Apps to with Direct Trust](https://help.tableau.com/current/server-linux/en-us/connected_apps_direct.htm) - For Tableau Cloud: [Configure Tableau Connected Apps with Direct Trust](https://help.tableau.com/current/online/en-us/connected_apps_direct.htm) **Connected app methods using OAuth 2.0 trust** As an alternative, you can register an external authorization server (EAS) to a site to establish a trust relationship. Using the EAS-specific methods of the Tableau REST API, you can: - Register, query, update, and delete an EAS on a site This functionality relates to UI elements and concepts described at: - For Tableau Server: [Configure Tableau Connected Apps with OAuth 2.0 Trust](https://help.tableau.com/current/server-linux/en-us/connected_apps_eas.htm) - For Tableau Cloud: [Confgiure Tableau Connected Apps with OAuth 2.0 Trust](https://help.tableau.com/current/online/en-us/connected_apps_eas.htm) **Note:** Tableau Server admins can set up server-wide EAS through TSM. For more information, see [Register EAS to Enable SSO for Embedded Content](https://help.tableau.com/current/server-linux/en-us/connected_apps_eas.htm). ## 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: Connected Apps](https://www.postman.com/salesforce-developers/salesforce-developers/folder/43j3adj/connected-apps) ## Create Connected App Create a connected app. A connected app can be used to securely authenticate your users to Tableau content embedded in a custom application or for REST API authorization (introduced to Tableau Cloud in June 2022 and Tableau Server 2023). By creating a connected app, you can establish a trusted relationship between Tableau and any custom application. For more information about connected apps, see one of the following: - For Tableau Server: [Configure Tableau Connected Apps to Enable SSO for Embedded Content](https://help.tableau.com/current/server-linux/en-us/connected_apps.htm) - For Tableau Cloud: [Configure Tableau Connected Apps with Direct Trust](https://help.tableau.com/current/online/en-us/connected_apps_direct.htm) #### URI POST api/_api-version_/sites/_site-id_/connected-apps/direct-trust **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body Tableau Cloud and Tableau Server using API 3.23 or later ``` project_id project_id project_id ``` Tableau Server (or Tableau Cloud) using API 3.21 or earlier ``` ``` #### Attribute Values Any combination of attributes inside the element is valid, however name is required.
name Name of the connected app.
enabled (Optional) Controls whether the connected app is enabled or not. Value can be "true" or "false". If the state is not specified, the connected app is set to "false" and not enabled by default.
project_id

(Optional, embedding workflows only) The IDs of the projects that the connected app's access level is scoped to. To get a project's project ID, see Query Projects. You can specify one project, multiple projects, all projects on a site.

  • Single project:

    • For Tableau Cloud (using API 3.22 or later) and Tableau Server (using API 3.23 or later), to scope the connected app's access to one project, the recommended workflow is to specify the projectIds and projectId attributes and projectId value.

    • For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, specify the projectId parameter and its value.

  • Multiple projects: Beginning with API 3.22 (February 2024) for Tableau Cloud and API 3.23 for Tableau Server, you can specify the projectIds attribute and projectId values to scope the connected app's access to multiple projects.

  • All projects:

    • For Tableau Cloud (using API 3.22 or later) and Tableau Server (using API 3.23 or later), to scope the connected app's access to all projects on a site, omit the projectIds attribute from the request.

    • For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, to scope the connected app's access to all projects on a site, omit the projectId attribute from the request.

    Note: Specifying "all projects" in an update request for a connected app is handled differently. For more information, see update project.

Note: The stand-alone projectId attribute will be retired in a future release so we recommend using projectIds attribute instead.

domainSafelist

(Optional, embedding workflows only) A list of domains the connected app is allowed to be hosted. Specify one or more URLs, separated by spaces, using a format described in Domain allowlist rules in the Tableau Server Help or Domain allowlist rules in the Tableau Cloud Help.

Important: We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow.

For example: https://tableau.com https://myco.com:552 marketing.example.com

unrestrictedEmbedding (Optional, embedding workflows only) Controls whether the connected app can be hosted on all domains. If "true" value is specified, the connected app can be hosted on all domains. If "false" value is specified, the connected app can only be hosted on the domains specified in the <domainSafelist> attribute.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 **Example response:** ``` ConnectedApp_MyCo true ac95d175-c844-4779-9d58-415e01fe7dab 1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-10T18:46:30Z true ``` **Note:** When the scope of the connected app's access is set to all projects, the request does not return the `projectId` attribute. #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, POST /api/_api-version_/sites/_site-id_/connected-apps/direct-trust, was added in version 3.17. The original resource, POST /api/_api-version_/sites/_site-id_/connected-applications, was deprecated in API 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400109Bad requestThe request body can't be empty.
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## Register EAS Create a connected app with OAuth 2.0 trust by registering an external authorization server (EAS) to a site. You can register an external authorization server (EAS) to establish a trust relationship between your Tableau Server site or Tableau Cloud site and EAS using the OAuth 2.0 standard protocol. By establishing a trust relationship, you’re able to provide your users with a single sign-on (SSO) experience to Tableau content embedded in your custom applications or REST API authorization through an identity provider (IdP) you've already configured. **Notes:** - Beginning in API version 3.22, you can register multiple EASs per site for Tableau Cloud. - Beginning in API version 3.23, Tableau Server supports site-level EAS (and multiple registrations of EASs per site). For more information, see one of the following: - For Tableau Server: [Register EAS to Enable SSO for Embedded Content](https://help.tableau.com/current/server-linux/en-us/connected_apps_eas.htm) - For Tableau Cloud: [Register EAS to Enable SSO for Embedded Content](https://help.tableau.com/current/online/en-us/connected_apps_eas.htm) #### URI POST api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values A combination of attributes inside the element is valid, however issuerUrl is required.
URL The entity id of your identity provider (IdP) or URL that uniquely identifies your IdP.
URI

(Optional) The JSON Web Key (JKWS) of the EAS.

name

(Optional) The name of the connected app. If the name attribute is not specified, the connected app name defaults to "External Authorization Server."

This attribute is available starting from API version 3.22 (February 2024).

#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 The request returns details about the EAS, including the following: - ``: The name of the connected app. - ``: The ID of the EAS. - `:` The issuer URL of the EAS. - `:` The JSON web key set (JWKS) of the EAS. You can use the returned EAS ID (``) in [Update EAS](#update_connectedapp_eas) and [Delete EAS](#delete_connectedapp_eas) requests. **Example response:** ``` EAS_1 50bdc8cd-1aa4-48fe-a0e7-68982d85daa8 https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 https://dev-57741098.okta.com/jwks.json 2022-04-07T03:50:34Z ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.1 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
400400008Issuer URL missingThe required issuer URL is missing from the request body.
400400157Unexpected EAS errorThere was a unexpected error when creating the connected app.
400400161EAS limit exceededThe site has reached its limit of EAS that can be registered or the external authorization server (EAS) ID is not in the correct format.
400400194Issuer URL already configuredAnother connected app on the site is using the same issuer URL.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
## Create Connected App Secret Generate a secret for a connected app. Secrets are tokens shared by Tableau and a custom application, and used to establish a trusted relationship. A maximum of two secrets can be associated with a connected app. These secrets do not expire and remain valid until deleted. If a connected app has already reached its two secret maximum when another one is generated, an error is thrown. #### URI POST api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Response Code 201 #### Response Body The request returns details about the generated secret, including the secret value ``. **Example response:** ``` TO7/wkW+45U001IBtyNbtyIMYQ/GBM0XlRXqsgYqPlY= 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b 2021-08-10T18:48:40Z ``` #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, POST /api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets, was added in version 3.17. The original resource, POST /api/_api-version_/sites/_site-id_/connected-applications/_client-id_/secrets, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP status error Code Condition Details
400 400143 Generic connected app error The connected app could not be deleted for some other reason than those specified in this table.
400 400144 Secret limit exceeded

The connected app has already reached its two secret maximum.

403 403000 Admin permissions required A non-admin user called this method and doesn't have adequate permissions to perform the action.
404 404000 Resource not found The site ID in the URI doesn't correspond to an existing site.
404 404041 Connected app not found The requested connected app could not be found.
404 404042 Secret not found The requested secret for the connected app could not be found.
## Delete Connected App Permanently remove a connected app. Deleting the connected app also deletes the secrets associated with the connected app. For more information about deleting a connected app, see one of the following:  - For Tableau Server: [Effects of deleting a connected app](https://help.tableau.com/current/server-linux/en-us/connected_apps.htm#effects) - For Tableau Cloud: [Effects of deleting a connected app](https://help.tableau.com/current/online/en-us/connected_apps_direct.htm#effects) #### URI DELETE api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, DELETE api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_, was added in version 3.17. The original resource, DELETE api/_api-version_/sites/_site-id_/connected-applications/_client-id_, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## Delete EAS Delete a registered external authorization server (EAS). #### URI DELETE api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers/_eas-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
eas-idThe unique ID of the registered EAS.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404047EAS not foundThe requested EAS could not be found.
## Delete Connected App Secret Permanently remove a secret associated with a connected app. For more information about deleting a connected app, see one of the following: - For Tableau Server: [Effects of deleting a secret](https://help.tableau.com/current/server-linux/en-us/connected_apps.htm#effects) - For Tableau Cloud: [Effects of deleting a secret](https://help.tableau.com/current/online/en-us/connected_apps_direct.htm#effects) #### URI DELETE api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets/_secret-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
secret-idThe unique ID of the connected app secret.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_app_direct_trust_secrets: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 #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, DELETE api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets/_secret-id_, was added in version 3.17. The original resource, DELETE api/_api-version_/sites/_site-id_/connected-applications/_client-id_/secrets/_secret-id_, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
404404042Secret not foundThe requested secret for the connected app could not be found.
## Get Connected App Query a connected app by its ID. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 The request returns details about the connected app, including the following: - ``: Information related to the secret only if it has been previously generated. To create a secret for a connected app, see [Create Connected App Secret](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_connectedapp_secret). To get the secret value, see [Query Connected App Secret](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_connectedapp_secret). - ``: Name of the connected app. - ``: Whether the connected app is enabled or not. - ``: The ID of the connected app. - `:` The project that the connected app's access level is scoped to. - `:` If specified, one or more domains that the connected app is allowed to be hosted on. - ``: Whether the connected app can be hosted on all domains. If `false` is returned, the `` attribute determines the domain access. **Example response:** ``` 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b 2021-08-10T18:48:40Z ConnectedApp_MyCo true ac95d175-c844-4779-9d58-415e01fe7dab 1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-10T18:46:30Z false ``` #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_, was added in version 3.17. The original resource, GET api/_api-version_/sites/_site-id_/connected-applications/_client-id_, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## List Connected Apps Query all connected apps configured on a site. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 The request returns details about the connected app, including the following: - ``: Information related to the secret only if it has been previously generated. To create a secret for a connected app, see [Create Connected App Secret](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_connectedapp_secret). To get the secret value, see [Query Connected App Secret](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_connectedapp_secret). - ``: Name of the connected app. - ``: Whether the connected app is enabled or not. - ``: The ID of the connected app. - `:` The project that the connected app's access level is scoped to. - `:` If specified, one or more domains that the connected app is allowed to be hosted on. - ``: Whether the connected app can be hosted on all domains. If `false` is returned, the `` attribute determines the domain access. **Example response:** ``` 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b 2021-08-10T18:48:40Z ConnectedApp_MyCo true ac95d175-c844-4779-9d58-415e01fe7dab 1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-10T18:46:30Z https://myco.com false ConnectedApp_MyCo_stage1 false 7370df14-2741-43f9-bbdd-450f707530a0 11213e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 21234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-18T00:49:05Z true ConnectedApp_MyCo_stage2 false f1e57298-ecd4-46a9-b8d9-e5ab0bf76a82 2021-08-18T00:54:30Z ``` #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust, was added in version 3.17. The original resource, GET api/_api-version_/sites/_site-id_/connected-applications, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## List All Registered EAS Get all external authorization servers (EASs) registered to a site. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 The request returns details about the EAS, including the following: - ``: The name of the connected app. - ``: The ID of the EAS. - `:` The issuer URL of the EAS. **Example response:** ``` External Authorization Server 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 2022-04-07T03:50:34Z EAS_1 be5f8262-6ae4-407c-9765-dfe5b37cb4b5 https://dev-57741099.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 2022-05-15T13:00:34Z ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
## List Registered EAS Get an external authorization server (EAS) registered to a site. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers/_eas-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
eas-idThe unique ID of the registered EAS.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 The request returns details about the EAS, including the following: - ``: The name of the connected app. - ``: The ID of the EAS. - `:` The issuer URL of the EAS. **Example response:** ``` EAS_1 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 2022-04-07T03:50:34Z ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404047EAS not foundThe requested EAS could not be found.
## Get Connected App Secret Query a connected app secret and the token value using the connected app's ID. Secrets are tokens shared by Tableau and a custom application, and used to establish a trusted relationship. A maximum of two secrets can be associated with a connected app. These secrets do not expire and remain valid until deleted. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets/_secret-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
secret-idThe unique ID of the connected app secret.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Response Code 200 #### Response Body The request returns details about the secret associated with the connected app, including the following: - ``: The token value of the secret. - `:` The ID of the secret. **Example response:** ``` TO7/wkW+45U001IBtyNbtyIMYQ/GBM0XlRXqsgYqPlY= 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b 2021-08-10T18:48:40Z ``` #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets/_secret-id_, was added in version 3.17. The original resource, GET api/_api-version_/sites/_site-id_/connected-applications/_client-id_/secrets/_secret-id_, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
404404042Secret not foundThe requested secret for the connected app could not be found.
## Update Connected App Update a connected app. #### URI PUT api/api-version/sites/_site-id_/connected-apps/direct-trust/_client-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
#### Request Body For Tableau Cloud and Tableau Server using API 3.23 or later ``` project_id project_id project_id ``` For Tableau Server (or Tableau Cloud) using API 3.21 or earlier ``` ``` #### Attribute Values Any combination of attributes inside the element is valid.
name (Optional) The new name of the connected app.
enabled (Optional) Controls whether the connected app is enabled or not. Value can be "true" or "false". If the state is not specified, the connected app is set to "false" and not enabled by default.
project_id

(Optional, embedding workflows only) The ID of the project that the connected app's access level is scoped to. To get the project ID, see Query Projects. You can specify one project, multiple projects, and all projects on a site.

  • Single project:

    • For Tableau Cloud (using API 3.22 or later) and Tableau Server (using API 3.23 or later), to scope the connected app's access to one project, the recommended workflow is to specify the projectIds and projectId attributes and projectId value.

    • For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, specify the projectId attribute and its value.

  • Multiple projects: Beginning with API 3.22 (February 2024) for Tableau Cloud and API 3.23 for Tableau Server, you can specify the projectIds and projectId attributes and projectId values to scope the connected app's access to multiple projects.

  • All projects:

    • For Tableau Cloud (using API 3.22 or later) and Tableau Server (using API 3.23 or later), specify the projectIds attribute and do not specify values. For example, <projectIds></projectIds>.

    • For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, specify the projectId attribute and leave its value empty. For example projectId="".

    Note: If the projectIds or projectId is not included in the request, the connected apps' access level is not updated.

Note: The stand-alone projectId attribute will be retired in a future release so we recommend using projectIds attribute instead.

domainsafelist

(Optional, embedding workflows only ) A list of domains the connected app is allowed to be hosted. Specify one or more URLs, separated by spaces, using a format described in Domain allowlist rules in the Tableau Server Help or Domain allowlist rules in the Tableau Cloud Help.

Important: We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow.

For example: https://tableau.com https://myco.com:552 marketing.example.com

unrestrictedEmbedding (Optional, embedding workflows only) Controls whether the connected app can be hosted on all domains. If "true" value is specified, the connected app can trust and connect to all domains. If "false" value is specified, the connected app can only be hosted on the domains specified in the <domainSafelist> attribute.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 **Example response:** ``` d8a51b6c-bf70-4aaf-959b-93d2ba4897e6 2021-08-18T17:59:11Z ConnectedApp_MyCo true 9486dee1-ca98-4144-b6e0-f5c555e64796 1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-18T17:48:03Z true ``` **Notes:** - The request will return the secret associated with the connected app only if it has been previously generated. To get the secret value, see [Query Connected App Secret](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_connectedapp_secret). - When the scope of the connected app's access is set to all projects, the request does not return the `projectId` attribute. #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, PUT api/api-version/sites/_site-id_/connected-apps/direct-trust/_client-id_, was added in version 3.17. The original resource, PUT api/api-version/sites/_site-id_/connected-applications/_client-id_, was deprecated in API 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400109Bad requestThe request body can't be empty.
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## Update EAS Update a connected app with OAuth 2.0 trust. **Notes:** - Beginning in API version 3.22, you can register multiple EASs per site for Tableau Cloud. - Beginning in API version 3.23, Tableau Server supports site-level EAS (and multiple registrations of EASs per site). #### URI PUT api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers/_eas-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
eas-idThe unique ID of the registered EAS.
#### Request Body ``` ``` #### Attribute Values A combination of attributes inside the element is valid.
URL (Optional) The entity id of your identity provider (IdP) or URL that uniquely identifies your IdP.
URI

(Optional) The JSON Web Key (JKWS) of the EAS.

name

(Optional) The name of the connected app. If the name attribute is not specified, the connected app name defaults to "External Authorization Server."

This attribute is available starting from API version 3.22 (February 2024).

#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 The request returns details about the EAS, including the following: - ``: The name of the connected app. - ``: The ID of the EAS. - `:` The issuer URL of the EAS. - `:` The JSON web key set (JWKS) of the EAS. **Example response:** ``` EAS_2 50bdc8cd-1aa4-48fe-a0e7-68982d85daa8 https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 https://dev-57741098.okta.com/jwks.json 2022-04-07T03:50:34Z ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
400400008Issuer URL missingThe request body contains an empty issuer URL attribute.
400400157Unexpected EAS errorThere was an unexpected error when updating the connected app.
400400194Issuer URL already configuredAnother connected app on the site is using the same issuer URL.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404047EAS not foundThe requested EAS could not be found.
[Skip to main content](#main-content) # Content Exploration Methods Content exploration methods enable you to view: **Search Results:** Explore your Tableau content based on relevance to an provided term and filter expression. **Usage Statistics:** Get the count of the number of times a user has directly or indirectly accessed a specified content item, or a batch of content items. Statistics are available for workbooks, views, data sources, flows and other Tableau resources. The response contains counts for a variety of time periods, ranging from two weeks up to the resource's lifetime. **Suggestions:** Get suggestions for autocompletion as a user types, based on matches of their input. Searches across all supported content types for objects relevant to the specified term. ## 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: [Content Exploration Methods](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-cb6815ea-2c84-4561-bde2-8ff6cd0d7692) ## Get Content Suggestions Returns a specified number of suggestions for auto-completion of user input as they type. You can specify content types of suggestions and prioritize recently viewed content. **Version:** Available in API 3.19 ( Tableau Cloud March 2023 / Server 2023.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Suggestions will be limited to those objects that the user has permissions to access. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:content:read\`. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/suggestions [view details](#) ## Get content search results Searches across all supported content types for objects relevant to the search expression specified in the querystring of the request URI. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Search results will be limited to those objects that the user has permissions to access. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:content:read\`. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/search [view details](#) ## Get batch content usage statistics Gets usage statistics for multiple content items. The batch of can include multiple content types. **Version:** Available in API 3.17 ( Tableau Cloud December 2022) 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) **Permissions:** Tableau administrators can get statistics for all content they administer. Other users can get statistics for any content they own or have at least Read permissions for. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:content:read\`. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/content/usage-stats [view details](#) ## Get usage statistics for content item Gets the usage statistics for a Tableau content item, specified by LUID and content type, such as workbook, datasource, or flow. **Version:** Available in API 3.17 ( Tableau Cloud December 2022) 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) **Permissions:** Tableau administrators can get statistics for all content they administer. Other users can get statistics for any content they own or have at least Read permissions for. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:content:read\`. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/content/usage-stats/{type}/{luid} [view details](#) [Skip to main content](#main-content) # Custom Domain Methods Custom domains allow your Tableau Cloud site to use a subdomain of your top level domain. For example, if you control `example.com`, you can use the subdomain `analytics.example.com` for your Tableau Cloud site. By using your domain, you maintain brand identity because the user won't see Tableau URLs in the address bar of their browser. Furthermore, because it's your domain, security constraints around third-party cookies don't apply. For information on custom domains, see [Use a Custom Domain with Tableau Cloud](https://help.tableau.com/current/online/en-us/custom_domain.htm). The custom domain REST API methods allow you to create, update, delete, or get information on custom domains using the REST API. > Note: If you use custom OAuth authentication for any connectors, you must configure a new OAuth client to use the custom domain with those connectors. The new client should use the custom domain as the Redirect URL. For more information on setting up custom OAuth, see [Configure Custom OAuth](https://help.tableau.com/current/online/en-us/protected_auth.htm#configure-custom-oauth). ## Create custom domain settings Starts the process of custom domain setup for a Tableau site. **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Only users with administrator permissions can create a custom domain for a site. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:create\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/customdomains/settings/site/{site\_luid} [view details](#) ## Delete custom domain settings Deletes the custom domain setup for a Tableau site. **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Only users with administrator permissions can view a site's custom domain settings. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:delete\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/customdomains/settings/site/{site\_luid} [view details](#) ## Get Custom Domain Name Gets the custom domain for a Tableau site, if one is provisioned. For more information about how, see **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can be called by any user that is a member of the site associated with the custom domain. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/customdomains/site/{site\_luid} [view details](#) ## Get custom domain settings Gets the custom domain settings for a Tableau site. **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Only users with administrator permissions can view a site's custom domain settings. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/customdomains/settings/site/{site\_luid} [view details](#) ## Update custom domain settings Updates the custom domain setup for a Tableau site. **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Only users with administrator permissions can update a site's custom domain settings. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/customdomains/settings/site/{site\_luid} [view details](#) [Skip to main content](#main-content) # Dashboard Extensions Settings Methods - Retired * * * ## Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * * * * Enable and configure security for [dashboard extensions](https://help.tableau.com/current/server/en-us/config_r_tabpy.htm) on sites and, for on premise installations, on servers. With these extensions you can add custom features to a dashboard using JavaScript. Using the extension methods of the Tableau Server REST API you can: - List the settings for extensions of a server or site - Enable or disable extensions or sandboxed extensions for a server or site - List, get, create, and delete entries in server blocked extensions list - List, get, create, update, and delete entries in server allowed (safe) extensions list This functionality relates to the UI elements and concepts described at [Manage Dashboard Settings](https://help.tableau.com/current/server/en-us/dashboard_extensions_server.htm). ## 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: [Dashboard Extensions Settings Methods - Retired](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-c2c99bc2-1b14-49d1-83d1-76856843e4ea) ## Block dashboard extension on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Adds a dashboard extension to the block list of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/settings/server/extensions/dashboard/blockListItems [view details](#) ## Allow dashboard extension on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Adds a dashboard extension to the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/settings/site/extensions/dashboard/safeListItems [view details](#) ## Unblock dashboard extension on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Deletes a specific extension from the block list of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/settings/server/extensions/dashboard/blockListItems/{block\_list\_item\_luid} [view details](#) ## Get blocked dashboard extension on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Gets the details of a specific dashboard extension on the blocked list of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/server/extensions/dashboard/blockListItems/{block\_list\_item\_luid} [view details](#) ## List blocked dashboard extensions on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extensions on the blocked list of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/server/extensions/dashboard/blockListItems [view details](#) ## List allowed dashboard extensions on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extensions on the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/dashboard/safeListItems [view details](#) ## List settings for dashboard extensions on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extension settings of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/server/extensions/dashboard [view details](#) ## Update dashboard extensions settings of server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings for dashboard extensions of a server **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/server/extensions/dashboard [view details](#) ## Disallow dashboard extension on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Deletes a specific dashboard extension from the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} [view details](#) ## Get allowed dashboard extension on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Gets the details of a specific dashboard extension on the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} [view details](#) ## List dashboard extension settings of site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extension settings of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/dashboard [view details](#) ## Update settings for allowed dashboard extension on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings of a specific dashboard extension in the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} [view details](#) ## Update dashboard extension settings of site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings for dashboard extensions for the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/dashboard [view details](#) [Skip to main content](#main-content) # Data Acceleration (Retired) **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. Sever administrators can enable data acceleration for specific workbooks. An accelerated workbook loads faster because Tableau Server precomputes the workbook's data in a background process. **Notes:** - This topic explains how to configure data acceleration using the Tableau Server REST API. However, the easiest way to configure data acceleration is to use the `accelerate_workbooks.py` Python script that you can download from the [Tableau Data Acceleration Client](https://tableau.github.io/tableau-data-acceleration-client/) GitHub repository. - Data acceleration is not available for Tableau Cloud. For more information about this capability, see [Data Acceleration](https://help.tableau.com/v2020.2/server/en-us/data_acceleration.htm) in the Tableau Server Help. ## Configure data acceleration To configure data acceleration using the REST API, do the following: - [Update a workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook) to turn on or off data acceleration by setting the attribute `accelerationEnabled` to `true` or `false`. By default, it is disabled. You can also set the `accelerateNow` attribute to `true` or `false` to specify whether to start the precomputation for acceleration immediately when the next backgrounder process becomes available. - [Create a schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_schedule) of type `DataAcceleration` - [Add a workbook with data acceleration to the schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_workbook_to_schedule) - [Get data acceleration tasks](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_data_acceleration_tasks) - [Delete a data acceleration task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_data_acceleration_task) - [Get a data acceleration report for a site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_data_acceleration_report) ### Additional notes about data acceleration - To remove a workbook from a schedule, update the workbook to turn off data acceleration by setting the attribute `accelerationEnabled` to false. - Data acceleration is turned on by default for sites. You can [update a site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_site) to enable or disable data acceleration by setting the attribute `dataAccelerationMode` to `enable_selective` or `disable`. When you disable it, no workbooks are accelerated and all data acceleration tasks are removed from schedules. - When you create a schedule, consider setting the schedule interval to be less than 12 hours. When you attach an acceleration schedule to a workbook, if that acceleration schedule interval exceeds the Tableau Server cache expiration time, the workbook will not be accelerated during the period between the cache expiration time and the next run of the acceleration schedule.  The workbook will revert to using the databases. By default, the Tableau Server cache expiration time is 12 hours (720 minutes). [Skip to main content](#main-content) # Data Labels in the REST API Data Labels, described in the "Data Labels" topic of the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels.htm) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels.htm) help, can be extensively controlled through the REST API. - Using the labels methods, non-administrators with permissions can list, add, remove, or update data labels on assets. - Using the labelValues methods, administrators can list, create, delete, or update data label values that are available to the users. In other words, administrators can define the labels that are available to non-administrators for associating with assets. - Using the labelCategories methods, administrators can list, create, delete, or update data label categories that are available to the users. In other words, administrators can define the data label categories that are used to group data labels into distinct types. Note: The REST API continues to support older methods to add and remove certifications and data quality warnings (the dataQualityCertifications and dataQualityWarnings endpoints). These methods were developed before the broader data labels concept existed, and are not included in this topic. All label operations except those related to the certification of data sources require Tableau Catalog to be enabled. Tableau Catalog requires a Data Management license. ## Data label terms in the REST API The data label object model is more complex than it's presented in the "Manage Data Labels" topic of the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm). A label on an asset has a number of properties, one of which – value – has its own properties. The most notable label value properties are name, category, and description, because they appear to users in dialogs and other parts of the Tableau interface. ![Data label object and properties diagram](/tableau/next/en-us/api/rest_api/en-us/Img/dm_label_properties-246.png) Manipulating and managing data labels through the REST API requires knowledge of the relevant objects and properties. In general, capabilities and limitations imposed on the objects or their properties are covered in the [REST API Reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm), in the methods themselves. Some common editing limitations are in the "Limitations for editing labels" section of the Manage Data Labels topic in the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm#limitations-for-editing-labels) and [Tablau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm#limitations-for-editing-labels) product help. ## Label A label is attached to an asset. Using the labels methods, non-administrators with permissions can list, add, remove, or update data labels on assets. The labels methods (introduced with Tableau Cloud June 2022 / Server 2022.3) are: - [Get Label](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_label) - [Get Labels](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_labels_on_assets) - [Update Label](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_label) - [Update Labels](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_labels_on_assets) - [Delete Label](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_label) - [Delete Labels](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_labels_on_assets) ### Important label properties value The value of a label is, for most purposes, its name. Valid values are the list of labelValue names. For information about its appearance in Tableau, see the "Name" section of the Manage Data Labels page in the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm#name) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm#name) product help. category Valid categories are the list of labelCategory names. For information about its appearance in Tableau, see the "Category" section of the Manage Data Labels page in the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm#category) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm#category) product help. active Boolean. The active property corresponds to the on/off toggle switch available in the various label dialogs. It turns the data label on or off without disturbing its other properties. elevated Boolean. The elevated property corresponds to the visibility level of a data label, and may result in the label and asset being more visible or appearing more urgent. A label with elevated set to true is a high visibility label. For more information, see the "Visibility" section of the Manage Data Labels page in the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm#visibility) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm#visibility) product help. Note: When users are working in the regular web interface, only labels with a WARNING or SENSITIVITY category have an adjustable visibility level. The REST API allows users to change the elevated property (the visibility level) of labels in other categories, but doing so doesn't affect the appearance of those labels in the regular web interface. message The label message. Each instance of a label has its own message. contentType The type of asset the label is on. Valid types are: - database - table - column _(Can be labeled starting in Tableau API 3.16 / Cloud October 2022 / Server 2022.3)_ - datasource - flow - virtualconnection - virtualconnectiontable owner The user who created or last updated the data label. ## Label value (labelValue) A label has a number of properties, one of which is value, which is itself a collection of other properties. The most notable of these properties are name, category, and description, because they appear to the user in dialogs and other parts of the Tableau interface. Using the labelValues methods, administrators can list, create, delete, or update data labels that are available to the users. What the Manage Data Labels topic of the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm) and [Tableau Server](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm) help calls a label name is referred to in the REST API as a labelValue name. Similarly, a label category is a labelValue category and a description is a labelValue description. Note: In the context of the common name for a label, the terms label, label name, label value, and label value name are often used interchangeably. The labelValues methods (introduced with Tableau Cloud June 2023 / Server 2023.3.) are: - [Get labelValue](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_labelvalue) - [List labelValues on Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#list_labelvalues_on_site) - [Create or Update labelValue](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#create_or_update_labelvalue) - [Update labelValue](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_labelvalue) - [Delete labelValue](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_labelvalue) ### Important labelValue properties name The name of a labelValue is, for most purposes, synonymous with the terms label, label value, and label name. The built-in label values have the following names: - certified - warning - deprecated - stale - maintenance - extract\_refresh\_failure - flow\_run\_failure - sensitive\_data For information about its appearance in Tableau, see the "Name" section of the Manage Data Labels page in the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm#name) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm#name) product help. Two of the label values – extract\_refresh\_failure and flow\_run\_failure – correspond to monitoring quality warnings. Tableau adds and removes these labels automatically based on trigger events, so they have the internal property set to true. Using the REST API, you can see these labels on assets, but can't modify them. category Valid categories are the list of labelCategory names. For information about its appearance in Tableau, see the "Category" section of the Manage Data Labels page in the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm#category) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm#category) product help. description A description that tells users what the label value is used for. For information about its appearance in Tableau, see the "Description" section of the Manage Data Labels page in the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm#description) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm#description) product help. internal Boolean. An internal label is one that's automatically added or removed by the system in response to a trigger. Extract refresh and flow run monitoring warnings are examples of internal label values. elevatedDefault Boolean. If elevatedDefault is true, then when a label with this label value is added to an asset, elevated is automatically set to true (meaning the visibility level is set to high visibility). builtIn Boolean. Built-in label values are the ones that ship with Tableau. (See labelValue name for the built-in label value names.) Note: An administrator can change the label value names for some built-in label values. If they have, the label value names will be different, but the builtIn property will be true. ## Label Category (labelCategory) One of the properties of a label value is category (or labelValue category). Using the labelCategories methods, administrators can list, create, delete, or update data label categories that are available to the users. The labelCategories methods (introduced with Tableau Cloud October 2023 / Server 2023.3) are: - [List Label Categories on Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#list_label_categories_on_site) - [Create Label Category](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#create_label_category) - [Update Label Category](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_label_category) - [Delete Label Category](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_label_category) ### Important labelCategory properties name The name of the category. The built-in label categories are: - certification - warning - sensitivity For information about its appearance in Tableau, see the "Category" section of the Manage Data Labels page in the [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_labels_manage.htm#category) and [Tableau Server](https://help.tableau.com/current/server/en-us/dm_labels_manage.htm#category) product help. description A description that tells users what the category is used for. Users may see this when interacting with elements related to label categories. ## Built-in names and categories The label value names and categories built-into Tableau are:
Label value nameCategory
CertifiedCertification
DeprecatedData Quality Warning
Stale dataData Quality Warning
Under maintenanceData Quality Warning
WarningData Quality Warning
Extract refresh failedData Quality Warning
Flow run failedData Quality Warning
Sensitive data1Sensitivity
1_In Tableau Cloud March 2023 / Server 2023.1 and earlier, the Sensitive data label uses the Data Quality Warning category._ ## Webhooks You can create webhooks that trigger when a data label is attached to an asset, updated, or deleted. For information, see the LabelCreated, LabelUpdated, and LabelDeleted events in [Webhook Events and Payloads](https://help.tableau.com/current/developer/webhooks/en-us/docs/webhooks-events-payload.html). ## The Tableau REST API Postman Collection The [Tableau REST API Postman Collection](https://github.com/tableau/tableau-postman) contains an open source collection of methods for easy learning, development, and testing. [Skip to main content](#main-content) # Data Sources Methods Using the data sources methods of the Tableau Server REST API you can: - Publish, update metadata, delete, or refresh the extract of a data source of a site - Add and delete tags of a data source - Get a list of data sources and the details of each - Get and update the connection information for a data source - Get the revision history of a data source or remove specific revisions - Download the current data source or one of its past revisions - Incrementally update specified portions of data from a live-to-Hyper connection. - Download an encrypted keychain for a data source that is migrating to another site. - Upload an encrypted keychain for a data source migrated to another site. - Create a work copy of a published data source, read and edit its elements, and publish the changes This functionality relates to the UI elements and concepts described at: [Connect to Your Data](https://help.tableau.com/current/pro/desktop/en-us/basicconnectoverview.htm). The [Tableau Server Client library](https://tableau.github.io/server-client-python/), a Python wrapper for the REST API, offers the following related items: [Data Sources](https://tableau.github.io/server-client-python/docs/api-ref#data-sources); and [Populate connections for Data Sources](https://tableau.github.io/server-client-python/docs/populate-connections-views#populate-connections-for-data-sources). ## 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: Data Sources](https://www.postman.com/salesforce-developers/salesforce-developers/folder/gl07jsz/data-sources) ## Add Tags to Data Source Adds one or more tags to the specified data source. #### URI PUT /api/api-version/sites/site-id/datasources/datasource-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to add tags to.
#### Request Body ``` ... additional tags ... ``` #### Attribute Values
datasource-idThe data source to add the tag to. If the data source is already tagged with a tag that's included in the request body, those tags are ignored and the data source retains them. If the <tags> element is empty, no new tags are added to the data source.
tagThe text of the tag.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read permissions for the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasource_tags: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 ``` ... additional new tags ... ... existing tags ... ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400075 Error adding tags There was a problem adding tags to the specified data source.
403 403004 Adding tags forbidden

A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if the <tags> element is empty.

404 404000 Site not found

The site ID in the URI is not for an existing site.

404 404004 Data source not found The data source ID in URI doesn't correspond to an existing data source.
404 404009 Data source ID mismatch The request body contains a data source ID (which is optional) and it doesn't match the ID in the URI.
404 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/tags" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-tags-to-datasource.xml` **Content of add-tags-to-datasource.xml:** ``` ``` **Example response:** ``` ``` ## Add Work Copy Elements Adds field descriptions or table descriptions to a work copy. Returns HTTP 201 when every element is added. The success body omits the elements that succeeded. If any element fails, the HTTP status is the status of the first failure and the body lists only the failed elements. A `Column` entry is not added by this method. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:datasources:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/tds/sites/site-luid/workcopy/workcopy-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Request Body ``` FieldDescription Sales Total sales amount. TableDescription Orders Order line items. ``` ``` { "tdsElementList": [ { "elementType": "FieldDescription", "name": "Sales", "description": "Total sales amount." }, { "elementType": "TableDescription", "name": "Orders", "description": "Order line items." } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements to add. Must contain at least one element. An empty or missing list is HTTP 400 with error code 400008.
tdsElementList[].elementTypeOptional. Element type sent to the TDS service. For this operation, use FieldDescription or TableDescription. Any other value is forwarded and reported as a per-element failure.
tdsElementList[].nameRequired. Element name.
tdsElementList[].columnNot applicable to this method. The add converter has no Column branch, so a column payload on an add element is not copied and the element is reported as a per-element failure.
tdsElementList[].descriptionRequired for this method. Description text for a FieldDescription or TableDescription element. When description is null, the field is left unset so the TDS service can report a per-element failure instead of HTTP 500.
#### Response Code 201 Created #### Response Body On full success the response is an empty `tsResponse` — `tdsElementResult` is omitted entirely rather than returned as an empty list. When one or more elements fail, the HTTP status is the status of the first failure and the body carries `tdsElementResult` for the failed elements only; see the Attribute Values table below and the Errors table for the failure shape. ``` ``` ``` {} ``` #### Attribute Values
tdsElementResult[]Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.
tdsElementResult[].elementTypeRequired. Element type of the failed element, copied from the request.
tdsElementResult[].nameRequired. Name of the failed element, copied from the request.
tdsElementResult[].statusRequired. Failure status for this element.
tdsElementResult[].status.codeRequired (within status). The translated HTTP status for this element (200, 400, 401, 403, 404, 409, 500, or 503). Not a Tableau 6-digit error sub-code.
tdsElementResult[].status.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400400008Missing tdsElementListtdsElementList is missing or empty. The list is required and must contain at least one element.
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Per-element invalid argumentOne or more elements were rejected as invalid. The body lists only the failed elements, and each status.code is the HTTP status 400.
400Unmapped per-element gRPC statusThe TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
401Per-element unauthenticatedThe TDS service rejected an element as unauthenticated. The body lists only the failed elements.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
403Per-element permission deniedThe TDS service rejected an element because permission was denied. The body lists only the failed elements.
404Per-element not foundOne or more elements were not found. The body lists only the failed elements. This is not error code 404065, which the read methods return for a missing named element.
405405000Method not allowedThe HTTP method is not supported for this resource.
409Per-element already existsOne or more elements already exist. The body lists only the failed elements.
429429000Rate limit exceededToo many requests sent in a given time period.
500Per-element internal errorThe TDS service failed while editing an element. The body lists only the failed elements.
503Per-element unavailableThe TDS service was unavailable while editing an element. The body lists only the failed elements.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Work Copy Creates a work copy of a published data source and returns the work copy LUID. Composable data sources and Semantic Data Model (SDM) data sources are not supported. The call is rejected when the caller already has the maximum number of open work copies. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source (either explicitly or implicitly). **Access Scope**: `tableau:datasources:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/tds/sites/site-luid/datasource/datasource-luid/workcopy #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
datasource-luidThe LUID of the data source. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Response Code 201 Created #### Response Body Returns the created work copy's identifiers in `tdsWorkCopy`. The response includes `workCopyLuid` but not `datasourceLuid`, which only Publish Work Copy returns. ``` d9e8f7a6-b5c4-3210-fedc-ba9876543210 ``` ``` { "tdsWorkCopy": { "workCopyLuid": "d9e8f7a6-b5c4-3210-fedc-ba9876543210" } } ``` #### Attribute Values
tdsWorkCopyRequired. Work copy identifiers.
tdsWorkCopy.workCopyLuidLUID of the new work copy.
tdsWorkCopy.datasourceLuidOptional. LUID of the published data source. Not returned by this method; returned by Publish Work Copy.
#### Errors
HTTP statuserror CodeConditionDetails
400Invalid data source LUIDThe data source LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
404Data source not found or not visible to the callerThe data source LUID in the URI doesn't correspond to an existing data source in the site, or the caller doesn't have permission to access it.
405405000Method not allowedThe HTTP method is not supported for this resource.
405405003Composable data sourceCreating a work copy is not supported for composable data sources (data sources that have one or more immediate parent published data sources).
405405004Semantic Data Model (SDM) data sourceCreating a work copy is not supported for Semantic Data Model (SDM) data sources.
429429000Rate limit exceededToo many requests sent in a given time period.
429Work copy limit exceededThe maximum number of open work copies is reached. Publish an existing work copy before creating a new one.
500Unknown errorThere was an internal server error.
503Service unavailableService unavailable.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Data Source Deletes the specified data source from a site. When a data source is deleted, its associated data connection is also deleted. Workbooks that use the data source are not deleted, but they will no longer work properly. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to delete.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a data source for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasources: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user called this method but doesn't have Read (view) and Delete permission for the data source.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source in the site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Tag from Data Source Deletes a tag from the specified data source. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to remove the tag from.
tag-nameThe name of the tag to remove from the data source.
#### Request Body None #### Permissions Tableau Server users who are not server administrators, site administrators, or data source owners can delete a tag from a data source only if they are project leaders or if they originally added the tag. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasource_tags: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400077Error deleting tagThere was a problem deleting the tag from the specified data source.
403403004Deleting tags forbiddenA non-administrator user called this method but doesn't have permission to delete a tag from the specified data source.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404007Tag not foundThe tag in the URI doesn't exist for the specified data source.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Work Copy Elements Deletes elements from a work copy. Send `elementType` and `name` for each element. Other content is ignored. Returns HTTP 200 when every element is deleted. The success body omits the elements that succeeded. If any element fails, the HTTP status is the status of the first failure and the body lists only the failed elements. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:datasources:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/tds/sites/site-luid/workcopy/workcopy-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Request Body ``` FieldDescription Sales TableDescription Orders ``` ``` { "tdsElementList": [ { "elementType": "FieldDescription", "name": "Sales" }, { "elementType": "TableDescription", "name": "Orders" } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements to delete. Must contain at least one element. An empty or missing list is HTTP 400 with error code 400008.
tdsElementList[].elementTypeRequired for this method. Element type of the element to delete (Column, FieldDescription, or TableDescription). Any other value is forwarded and reported as a per-element failure.
tdsElementList[].nameRequired. Name of the element to delete.
tdsElementList[].columnNot applicable to this method. Delete uses elementType and name only; other content is ignored.
tdsElementList[].descriptionNot applicable to this method. Delete uses elementType and name only; other content is ignored.
#### Response Code 200 OK #### Response Body On full success the response is an empty `tsResponse` — `tdsElementResult` is omitted entirely rather than returned as an empty list. When one or more elements fail, the HTTP status is the status of the first failure and the body carries `tdsElementResult` for the failed elements only; see the Attribute Values table below and the Errors table for the failure shape. ``` ``` ``` {} ``` #### Attribute Values
tdsElementResult[]Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.
tdsElementResult[].elementTypeRequired. Element type of the failed element, copied from the request.
tdsElementResult[].nameRequired. Name of the failed element, copied from the request.
tdsElementResult[].statusRequired. Failure status for this element.
tdsElementResult[].status.codeRequired (within status). The translated HTTP status for this element (200, 400, 401, 403, 404, 500, or 503). Not a Tableau 6-digit error sub-code.
tdsElementResult[].status.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400400008Missing tdsElementListtdsElementList is missing or empty. The list is required and must contain at least one element.
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Per-element invalid argumentOne or more elements were rejected as invalid. The body lists only the failed elements, and each status.code is the HTTP status 400.
400Unmapped per-element gRPC statusThe TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
401Per-element unauthenticatedThe TDS service rejected an element as unauthenticated. The body lists only the failed elements.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
403Per-element permission deniedThe TDS service rejected an element because permission was denied. The body lists only the failed elements.
404Per-element not foundOne or more elements were not found. The body lists only the failed elements. This is not error code 404065, which the read methods return for a missing named element.
405405000Method not allowedThe HTTP method is not supported for this resource.
429429000Rate limit exceededToo many requests sent in a given time period.
500Per-element internal errorThe TDS service failed while editing an element. The body lists only the failed elements.
503Per-element unavailableThe TDS service was unavailable while editing an element. The body lists only the failed elements.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Data Source Downloads a data source in `.tdsx` format. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/content GET /api/api-version/sites/site-id/datasources/datasource-id/content?includeExtract=extract-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to download.
extract-value(Optional) The extract-value is a Boolean value (False or True). When the data source specified for download has an extract, if you add the parameter ?includeExtract=False, the extract is not included when you download the data source. You can use this parameter to improve performance if you are downloading workbooks or data sources that have large extracts.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can download a data source only if they have ExportXml permission for the data source (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:datasources:download ``` 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 The data source content in `.tdsx` format (`Content-Type: application/octet-stream`). The response will have the following content disposition header: `Content-Disposition: name="tableau_datasource"; filename="datasource-filename"` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403028Read forbiddenA non-administrator user attempted to download a data source, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/content" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" > my-datasource.tdsx` The response is a file that contains the data source. ## Download Data Source Encrypted Keychain Gets an encrypted version of the embedded credentials from the data source. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:embedded\_credentials:download - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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/datasources/datasource-luid/retrieveKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
datasource-luidThe LUID of the data source to download the encrypted keychain from.
#### Request Body ``` site1 d56023b5-8f8b-4241-aa74-8974ced85827 http://example.com ``` ``` { "destinationSiteUrlNamespace": "site1", "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827", "destinationServerUrl": "http://localhost" } ``` #### Request Attributes
destinationSiteUrlNamespace

(Required) The site name on Tableau Cloud.

destinationSiteLuid (Required)  The site ID on Tableau Cloud.
destinationServerUrl

(Required) The destination Tableau Cloud URL.

#### cURL Request Example ``` curl --location "https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/retrieveKeychain" -X POST --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data " site19a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4dhttp://example.com" ``` #### Response Code 200 #### Response Body ``` BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidList": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404004 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Data Source Revision Downloads a specific version of a data source prior to the current one in `.tdsx` format. To down load the current version of a data source use the [Download Data Source](#download_data_source) method. **Note:** This method is available only if version history is enabled for the specified site. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/revisions/revision-number/content #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to download.
revision-numberThe revision number of the data source to download. To determine what versions are available, call Get Data Source Revisions.
#### Request Body None #### Permissions Tableau Server users who are site administrators can download data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 The data source content in `.tdsx` format (`Content-Type: application/octet-stream`). The response will have the following content disposition header: `Content-Disposition: name="tableau_datasource"; filename="datasource-filename"` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403028Read forbiddenA non-administrator user attempted to download a data source, but the caller doesn't have required permissions.
403403053Version history not enabledversion history is not enabled for the specified site.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404024Data source revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Data Source Revisions Returns a list of revision information (history) for the specified data source. **Note:** This method is available only if version history is enabled for the specified site. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. To get a specific version of the data source from revision history, use the [Download Data Source Revision](#download_data_source_revision) method. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/revisions GET /api/api-version/sites/site-id/datasources/datasource-id/revisions?pageSize\=page-size&pageNumber\=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source to get revisions for.
datasource-idThe ID of the data source to get revisions for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions Tableau Server users who are site administrators can get data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ``` If the revision element includes the attribute `deleted="true"`, the data source has been deleted and cannot be downloaded using the [Download Data Source Revision](#download_data_source_revision) method. If a user has been deleted from the site, no `` element is included in the `` element. #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400006 Invalid page number The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400 400007 Invalid page size The page size parameter is not an integer, or is less than one.
403 403014 Page size limit exceeded The specified page size is larger than the maximum page size.
403 403053 Version history not enabled version history is not enabled for the specified site.
403 403054 A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Data Source Publishes a data source on the specified site, or appends data to an existing data source. To make other changes to a published data source, call [Update Data Source](#update_data_source) or [Update Data Source Connection](#update_data_source_connection). **Version**: Available in API 2.0 and later. **License**: Available for Tableau Server and Tableau Cloud. **Permissions**: You can publish a data source if you have implicit or explicit Publish permissions for the data source, or are a Tableau administrator. Note: The `queryTaggingEnabled` attribute is returned only for administrator users. **Access Scope**: `tableau:datasources:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This method is used in two ways. You can call it to publish a data source in a single request. To do that, you include the content of the data source file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. If you want to avoid having the publishing process time out, you can use the _asJob_ parameter to make data source publication asynchronous. Alternatively, you can publish a data source in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload), and then commit the upload by calling Publish Data Source. In this case, Publish Data Source doesn't contain the file to publish. **Extracts with multiple table options** Starting in v2021.4, you can publish multi table Hyper extract files created using the [Hyper API](https://help.tableau.com/current/api/hyper_api/en-us/docs/hyper_api_create_update.html). The data must include a single [fact table](https://en.wikipedia.org/wiki/Fact_table) containing the foreign keys that relate the tables to each other. The Hyper API infers the data object model, but does not perform any validation, such as referential integrity checking. If the Hyper API can’t infer the data object model of a Hyper extract, for instance, because there is more than one fact table, then attempting to publish the extract will fail. Prior to v2021.4, there was no way to append data to an extract with multiple tables using the REST API. **Data Sources stored locally** When you publish a data source from your local computer to the server, you must make sure that the server has all the components that are required in order for other users to see and interact with the data source. For example, if the data source is based on an Excel spreadsheet, you typically publish a packaged data source (`.tdsx` file) that contains all the components for that data source. **Replace data source** Starting in version 2025.1, you can use the replace parameter. You can include `overwrite`, `append`, and `replace` in a single request, but only one of these parameters can be set to true. If more than one is set to true, the request returns an HTTP 400 error. **Working with Parquet files** \- When publishing a Parquet file to a data source through a live-to-Hyper connection, the files are converted to Hyper files. You may want to publish a copy of your original Parquet file to retain that data in its native format. \- A data source with a live-to-Hyper connection to data in a Hyper file converted from Parquet can only have a single connection. \- When incrementally updating that data from that connection, using the Update Hyper in Data Source method, the Parquet file is not converted to Hyper. **Composed data sources and extended data sources** Starting in REST API version 3.29 (Cloud 262 and Server 2026.2), you can publish composed and extended data sources. When you publish a composed data source, you must include a `parentDataSourceUrls` element in addition to the `.tds` file so the composed data source is correctly linked to its parents. Include one entry for every published data source that is a direct parent of the composed data source. These correspond to the `datasource-url` tags serialized in the `.tds` file's data source tree. Include only the immediate parent data sources that the data source you are publishing depends on. When you publish an extended data source, include the `.tds` file as usual; no `parentDataSourceUrls` element is required. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-luid/datasources POST /api/api-version/sites/site-luid/datasources?overwrite=overwrite-flag&asJob=asJob-value POST /api/api-version/sites/site-luid/datasources?append=append-flag POST /api/api-version/sites/site-luid/datasources?uploadSessionId=upload-session-id&datasourceType=datasource-file-type&overwrite=overwrite-flag&append=append-flag&replace=replace-flag #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The LUID of the site to publish to.
overwrite-flag true to overwrite a data source that has the same name, or false to fail if the specified data source already exists. The default is false. If overwrite-flag is set to true but the data source doesn't already exist, the operation succeeds.

You can include both the overwrite and append parameters in a request, but they cannot both be true.

replace-flag (New in 2025.1) A boolean value (true or false). Set to true to replace the data in an existing data source. The default is false.
asJob-value A Boolean value that is used to publish data sources asynchronously. If you set this value to false (the default), the publishing process runs as a synchronous process. If a data source is very large, the process might time out before it finishes. If you set this value to true, the process runs asynchronously, and a job will start to perform the publishing process and return the job ID. You can check the status of the import job by calling Query Job.
append-flag true to append the data being published to an existing data source that has the same name. The default is false. If append-flag is set to true but the data source doesn't already exist, the operation fails.

In order to append data to a published data source on Tableau Server, both the source file and the published file must be an extract with the file extension .hyper or .tde. The schema of the source and the published extract must match.

If an extract was stored using the multiple tables option, you can't append data to it.

You can include both the overwrite and append parameters in a request, but they cannot both be true.

upload-session-luid If you are calling this method to commit a file that was uploaded in parts, this value contains the upload session LUID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
datasource-file-type hyper, tds, tdsx, or tde the kind of file that you are uploading. This value is required if you are calling Publish Data Source in order to commit a file that was previously uploaded using Append to File Upload. The value is not used if you upload a file in the body of the request.
#### Request Body The content type in the header of requests to publish a data source must use the mixed multipart content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml parent-datasource-url --boundary-string Content-Disposition: name="tableau_datasource"; filename="SALES.TDSX" Content-Type: application/octet-stream content-of-datasource-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml parent-datasource-url --boundary-string-- ``` **Publishing a file in the request body** ``` Content-Length: 16301 Content-Type: multipart/form-data; boundary=----------------------my_boundary_string ----------------------my_boundary_string Content-Disposition: form-data; name="part1.json" Content-Type: application/json { "datasource": { "name": "datasource-name", "useRemoteQueryAgent": "remote-query-agent-flag", "description": "datasource-description", "connectionCredentials": { "name": "connection-username", "password": "connection-password", "embed": "embed-flag", "oAuth": "oauth-flag" }, "project": { "id": "project-id" }, "parentDataSourceUrls": [ "parent-datasource-url" ] } } ----------------------my_boundary_string Content-Disposition: form-data; name="datasource.tdsx" Content-Type: application/octet-stream content-of-datasource-file ----------------------my_boundary_string-- ``` **Committing a file previously uploaded** ``` Content-Length: 16301 Content-Type: multipart/form-data; boundary=----------------------my_boundary_string ----------------------my_boundary_string Content-Disposition: form-data; name="part1.json" Content-Type: application/json { "datasource": { "name": "datasource-name", "connectionCredentials": { "name": "connection-username", "password": "connection-password", "embed": "embed-flag", "oAuth": "oauth-flag" }, "project": { "id": "project-id" }, "parentDataSourceUrls": [ "parent-datasource-url" ] } } ----------------------my_boundary_string-- ``` #### Request Attributes
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

datasource-name (Required) The name to assign to the data source when it is saved on the server.
remote-query-agent-flag (Optional) When true, this flag will allow your Tableau Cloud site to use Tableau Bridge clients. Bridge allows you to maintain data sources with live connections to supported on-premises data sources.
datasource-description (Optional) A description of the data source.
connection-username (Optional) If the data source connection requires credentials, the <connectionCredentials> elements is included and this attribute specifies the connection username. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

connection-password (Optional) If the data source connection requires credentials, the <connectionCredentials> elements is included and this attribute specifies the connection password. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

embed-flag (Optional) If the data source connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials.
oauth-flag (Optional) If the data source connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the connectionCredentials element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the data source.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

project-id The LUID of the project to assign the data source to. If the project is not specified, the data source will be published to the default project.
datasource-file-name The file name (including extension) of the data source file to upload. This attribute is used in the request body only if the request also includes the content of the data source file; it is not used if you are committing a file uploaded using previous requests.
content-of-datasource-file The content of the data source file, if the request includes the file. The maximum size of a file that can be uploaded in one call is 64 MB.
askDataEnablement This attribute is not available in API 3.12 and later (Tableau Cloud September 2021 / Server 2021.3).
parentDataSourceUrls The name (URL) of the immediately referenced published data source that the data source being published depends on. For a composed data source, you must include one entry for each top-level parent data source in the data model.
#### cURL Example `curl "http://MY_SERVER/api/3.4/sites/ff2a8360-3c2b-4b05-a793-7607c602e1fb/datasources" -X POST -H "X-Tableau-Auth:6fSulU7ET8yjpHteQj56MQ|LrkEdTHcmPkWFcD8wOEy29hlVXm8iPo4" -H "Content-Type: multipart/mixed;" -F "request_payload=@publish-datasource.xml" -F "tableau_datasource=@data-source.tds"` **Content of publish-datasource.xml**: ``` ``` #### Response Code 201 #### Response Body ``` ``` ``` { "datasource": { "id": "75b71d2f-e8d3-42af-b654-d953659326ee", "name": "Sales", "contentUrl": "mySite", "description": "Sales Data Source", "useRemoteQueryAgent": "True", "webpageUrl": "https://my_server/#/datasources/222", "type": "excel-direct", "createdAt": "2016-02-12T23:36:09Z", "updatedAt": "2020-12-16T15:33:03Z", "isCertified": "False", "certificationNote": "This is a certification note.", "encryptExtracts": "True", "project": { "id": "56c86f04-b834-4a08-a561-86497bb4b2df", "name": "Visualization" }, "owner": { "id": "20148c74-7818-4eb8-b2a1-9f3f5f582613" }, "tags": [] } } ``` The `createdAt` and `updatedAt` attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Response Headers `Location: /api/3.29/sites/site-id/datasources/id-from-server` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe request message is missing or incomplete, or contains malformed XML. Make sure that the Content-Length value is set.
400400000Missing data sourceThere is no attachment in the request for the data source.
400400008Invalid overwrite valueThe overwrite parameter must be set to true or false.
400400008Invalid append valueThe append parameter must be set to true or false.
400400008Invalid embed valueThe request body contains a <connectionCredentials> element and it has an embed attribute whose value is not true or false.
400400010Invalid data source filenameThe name of the data source file did not end with the suffix .hyper, .tds, .tdsx, or .tde.
400400010Missing or invalid file typeThe request included an uploadSessionId parameter but no file type, or the file type was something other than hyper, tds, tdsx, or tde.
400400010Unexpected attachmentsThe message had both a uploadSessionId parameter and an attachment, or the message contained more than one attachment.
400400011Publishing errorThe data source could not be published for some other reason than those specified earlier.
400400011Bad RequestThe request is invalid. This can occur if more than one of the conflict resolution parameters (overwrite, append, or replace) is set to true. Only one of these parameters can be true in a single request.
400400019Malformed request bodyThe request message is missing or incomplete, or contains malformed XML. Make sure that the Content-Length value is set.
400400055Incompatible overwrite and append valuesThe overwrite and append parameter cannot both be set to true.
400400129Invalid Ask Data enablementThe enablement setting in the request body is not valid for the current server configuration.
403403007Insufficient publishing permissionA non-administrator user attempted to publish a data source, but the caller doesn't have sufficient project permissions.
403403007Unlicensed publishing forbiddenA non-administrator user who is unlicensed attempted to publish a data source. This is disallowed for all projects (including the default project).
403403007Overwrite forbiddenA data source with the specified name already exists and the overwrite parameter was not set to true.
403403007Problem connecting to data sourceThere was a problem connecting to a data source. This can be due to missing or invalid connection credentials or because the referenced data source is not available on the server.
403403008Insufficient storage quotaThe data source could not be published because there is not enough storage remaining on the server to accommodate its size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe append parameter is true but the data source name specified in the request body does not correspond to an existing data source.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404015File upload not foundThe file upload session ID in the request body doesn't correspond to an existing file upload on the site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Work Copy Publishes a work copy as a data source. Send the published data source `name` and an optional `description`. The response returns the new data source LUID. A blank name is rejected. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:datasources:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/tds/sites/site-luid/workcopy/workcopy-luid/publish #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Request Body ``` ``` ``` { "datasource": { "name": "Quarterly Sales", "description": "Quarterly sales rollup." } } ``` #### Attribute Values
datasourceRequired. Published data source name and optional description. Other data source fields are not read by this method.
datasource.nameRequired. Name of the data source to publish. A null, empty, or whitespace-only value is HTTP 400 with error code 400008.
datasource.descriptionOptional. Description of the published data source. May be null, empty, or whitespace.
#### Response Code 201 Created #### Response Body Returns the published data source's identifiers in `tdsWorkCopy`. The response includes `datasourceLuid` but not `workCopyLuid`. ``` a1b2c3d4-e5f6-4321-8765-1234567890ab ``` ``` { "tdsWorkCopy": { "datasourceLuid": "a1b2c3d4-e5f6-4321-8765-1234567890ab" } } ``` #### Attribute Values
tdsWorkCopyRequired. Work copy and published data source identifiers.
tdsWorkCopy.workCopyLuidOptional. LUID of the work copy. Not returned by this method; returned by Create Work Copy.
tdsWorkCopy.datasourceLuidLUID of the newly published data source.
#### Errors
HTTP statuserror CodeConditionDetails
400400008Datasource name missingThe published data source name is missing or blank.
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
404Work copy not found or not visible to the callerThe work copy LUID in the URI doesn't correspond to an existing work copy, or the caller doesn't have permission to access it.
405405000Method not allowedThe HTTP method is not supported for this resource.
429429000Rate limit exceededToo many requests sent in a given time period.
500Unknown errorThere was an internal server error.
503Service unavailableService unavailable.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Data Source Returns information about the specified data source. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe site that contains the data source.
datasource-idThe ID of the data source to get.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can view a data source only if they have Connect permission for the data source (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` ... additional tags ... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA non-administrator user attempted to query a data source, but the caller doesn't have Connect permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` useRemoteQueryAgent="false" webpageUrl="https://MYSERVER/#/datasources/4414" ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. ## Query Data Sources Returns a list of published data sources on the specified site, with optional parameters for specifying the paging of large results. To get a list of data sources embedded in a workbook, use the [Query Workbook Connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook_connections) method. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version**: Available in API 1.0 and later. **License**: No additional license required. **Permissions**: Tableau Server users who are not server administrators or site administrators can view a data source only if they have Connect permissions for the data source (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/datasources GET /api/api-version/sites/site-id/datasources?pageSize\=page-size&pageNumber\=page-number GET /api/api-version/sites/site-id/datasources?filter=filter-expression GET /api/api-version/sites/site-id/datasources?sort=sort-expression GET /api/api-version/sites/site-id/datasources?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data sources.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) An expression that lets you specify a subset of data sources to return. You can filter on predefined fields such as name and updatedAt. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the data sources or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the Rest API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand (**`&`**). #### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "pageNumber", "pageSize": "page-size", "totalAvailable": "total-available" }, "datasources": { "datasource": [ { "id": "datasource1-id", "description": "data-source-description", "name": "datasource-name", "size": "datasource-size", "type": "datasource-type", "contentUrl": "datasource-content-url", "createdAt": "datetime-created", "updatedAt": "datetime-updated", "encryptExtracts": "encrypt-extracts-flag", "hasExtracts": "has-extracts-flag", "isCertified": "is-certified-flag", "useRemoteQueryAgent": "use-remote-query-agent-flag", "webpageUrl": "datasource-webpage-url", "project": { "id": "project-id", "name": "project-name" }, "owner": { "id": "datasource-owner-id" }, "tags": [ { "label": "tag" } ] } ] } } ``` #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/datasources" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` **Example response:** ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Data Source Connections Returns a list of data connections for the specified data source. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/connections #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to return connection information about.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can query a data source only if they have Read (view) permission for the data source (either explicitly or implicitly). `queryTaggingEnabled` is returned only for administrator users. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` HTTP statuserror CodeConditionDetails403403021Read forbiddenA user who is not a server administrator user attempted to query the data source connections, but the caller doesn't have Read permission.404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.404404011Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.405405000Invalid request methodRequest type was not GET. For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. ## Read Data Source Elements Reads columns, field descriptions, or table descriptions from a published data source. Set `elementType` to the kind of element, and optionally set `name` to read one element. A missing named element returns HTTP 404. When a read record fails inside a successful response, the failure is on that element's `error` field and the HTTP status stays 200. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source (either explicitly or implicitly). **Access Scope**: `tableau:content:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/tds/sites/site-luid/datasource/datasource-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
datasource-luidThe LUID of the data source. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
elementTypeRequired. The kind of element to return. Allowed values are Column, FieldDescription, and TableDescription.
nameOptional. The name of a single element to read. When omitted, the call lists elements of the requested elementType. When this value is non-empty and the TDS service returns gRPC NOT_FOUND, the API responds 404 with error code 404065.
#### Response Code 200 OK #### Response Body Returns the elements read from the data source or work copy in `tdsElementList`. Each entry carries either a `column` payload (when `elementType` is `Column`) or a `description` string (when `elementType` is `FieldDescription` or `TableDescription`). If an individual read record fails, that entry carries an `error` object instead and the overall HTTP status stays 200. ``` Column Sales Sales MEASURE REAL FieldDescription Sales Total sales amount. Orders 5 NOT_FOUND ``` ``` { "tdsElementList": [ { "elementType": "Column", "name": "Sales", "column": { "caption": "Sales", "role": "MEASURE", "type": "REAL" } }, { "elementType": "FieldDescription", "name": "Sales", "description": "Total sales amount." }, { "name": "Orders", "error": { "code": 5, "message": "NOT_FOUND" } } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements read from the data source or work copy. Empty when the TDS service returns no records.
tdsElementList[].elementTypeOptional. Element type. Not set by the read converter for this operation.
tdsElementList[].nameRequired. Name of the element, set from the gRPC read result or from the failure record when the record failed.
tdsElementList[].columnOptional. Present when the read result is a column. Mutually exclusive with description.
tdsElementList[].column.captionOptional. Column display caption from the TDS service.
tdsElementList[].column.roleOptional. Column role, FieldRole.name() from the TDS service.
tdsElementList[].column.typeOptional. Column field type, FieldType.name() from the TDS service.
tdsElementList[].descriptionOptional. Description text. Present when the read result is a field description or a table description. Mutually exclusive with column.
tdsElementList[].errorOptional. Present only when this read record failed. The HTTP status of the read stays 200.
tdsElementList[].error.codeRequired (within error). The raw gRPC status code for the failed record — not a translated HTTP code and not a Tableau 6-digit error code.
tdsElementList[].error.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400Invalid data source LUIDThe data source LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Invalid elementTypeelementType must be Column, FieldDescription, or TableDescription.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
404404065TDS element not foundNo element with the requested name exists. Returned only when the name query parameter is non-empty. A missing data source or work copy is not given this code.
405405000Method not allowedThe HTTP method is not supported for this resource.
429429000Rate limit exceededToo many requests sent in a given time period.
500Unknown errorThere was an internal server error.
503Service unavailableService unavailable.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Read Work Copy Elements Reads columns, field descriptions, or table descriptions from a work copy. Set `elementType` to the kind of element, and optionally set `name` to read one element. A missing named element returns HTTP 404. When a read record fails inside a successful response, the failure is on that element's `error` field and the HTTP status stays 200. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:content:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/tds/sites/site-luid/workcopy/workcopy-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
elementTypeRequired. The kind of element to return. Allowed values are Column, FieldDescription, and TableDescription.
nameOptional. The name of a single element to read. When omitted, the call lists elements of the requested elementType. When this value is non-empty and the TDS service returns gRPC NOT_FOUND, the API responds 404 with error code 404065.
#### Response Code 200 OK #### Response Body Returns the elements read from the work copy in `tdsElementList`. Each entry carries either a `column` payload (when `elementType` is `Column`) or a `description` string (when `elementType` is `FieldDescription` or `TableDescription`). If an individual read record fails, that entry carries an `error` object instead and the overall HTTP status stays 200. ``` FieldDescription Sales Total sales amount, updated on the work copy. TableDescription Orders Order line items. Region 5 NOT_FOUND ``` ``` { "tdsElementList": [ { "elementType": "FieldDescription", "name": "Sales", "description": "Total sales amount, updated on the work copy." }, { "elementType": "TableDescription", "name": "Orders", "description": "Order line items." }, { "name": "Region", "error": { "code": 5, "message": "NOT_FOUND" } } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements read from the data source or work copy. Empty when the TDS service returns no records.
tdsElementList[].elementTypeOptional. Element type. Not set by the read converter for this operation.
tdsElementList[].nameRequired. Name of the element, set from the gRPC read result or from the failure record when the record failed.
tdsElementList[].columnOptional. Present when the read result is a column. Mutually exclusive with description.
tdsElementList[].column.captionOptional. Column display caption from the TDS service.
tdsElementList[].column.roleOptional. Column role, FieldRole.name() from the TDS service.
tdsElementList[].column.typeOptional. Column field type, FieldType.name() from the TDS service.
tdsElementList[].descriptionOptional. Description text. Present when the read result is a field description or a table description. Mutually exclusive with column.
tdsElementList[].errorOptional. Present only when this read record failed. The HTTP status of the read stays 200.
tdsElementList[].error.codeRequired (within error). The raw gRPC status code for the failed record — not a translated HTTP code and not a Tableau 6-digit error code.
tdsElementList[].error.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Invalid elementTypeelementType must be Column, FieldDescription, or TableDescription.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
404404065TDS element not foundNo element with the requested name exists. Returned only when the name query parameter is non-empty. A missing data source or work copy is not given this code.
405405000Method not allowedThe HTTP method is not supported for this resource.
429429000Rate limit exceededToo many requests sent in a given time period.
500Unknown errorThere was an internal server error.
503Service unavailableService unavailable.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove Data Source Revision Removes a specific version of a data source from the specified site. The content is removed, and the specified revision can no longer be downloaded using [Download Data Source Revision](#download_data_source_revision). If you call [Get Data Source Revisions](#get_data_source_revisions), the revision that's been removed is listed with the attribute `IsDeleted="true"`. **Note:** Calling this method permanently removes the specified data source revision. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id/revisions/revision-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
datasource-idThe ID of the data source to remove the revision for.
revision-numberThe revision number of the data source to remove. To determine what versions are available, call Get Data Source Revisions.
#### Request Body None #### Permissions Tableau Server users who are site administrators can remove data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can remove data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasources: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 #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user attempted to remove a data source revision, but the caller doesn't have required permissions.
403403053Version history not enabledversion history is not enabled for the specified site.
403403055Cannot delete head revisionThe head (first) version cannot be deleted. To remove the data source, call Delete Data Source.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404024Data source revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data in Hyper Connection Incrementally updates data (insert, update, upsert, replace and delete) in a published data source from a live-to-Hyper connection, where the data source has multiple connections. A live-to-Hyper connection has a Hyper or Parquet formatted file/database as the origin of its data. For all connections to Parquet files, and for any data sources with a single connection generally, you can use the [Update Data in Hyper Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#ref_update_data_in_hyper_data_source) method without specifying the `connection-id`. A request for this method must include an `upload-session-id` for a Hyper file payload containing an upload of the most current data from the data source for your published live-to-Hyper data. Use [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload) and [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload) methods to form the payload and acquire upload-session-id. For details and examples, see [Update Data in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). **Note:** While Hyper Update REST API methods make incremental changes much more efficient, multiple simultaneous update requests and large changes in large datasets can overwhelm Tableau server background processes. To mitigate this issue, Hyper Update requests are limited by the server configuration setting `api.server.update_uploaded_file.max_size_in_mb`. Starting in Tableau Server 2022.1 / Tableau Cloud March 2022, the default for this setting is 100MB. In previous versions, the limit was set to 10MB. Where heavy incremental update traffic is expected, we recommend you use a chunking strategy to limit the size of each update, and fine tune `max_size_in_mb` value to optimize performance for your exact conditions. #### URI PATCH /api/api-version/sites/site-id/datasources/datasource-id/connections/connection-id/data?uploadSessionId=upload-session-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to update.
connection-idThe ID of the connection. To determine what connections are available for a data source, call Query Data Source Connections.
upload-session-idThe upload session ID. A user-generated identifier that is unique to a request. If the server receives more than one request with the same ID within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests.
#### Request Body This method supports only JSON content-type for the request body. ``` {"actions": [ {"action": action-type", "source-schema": "source-schema-name", "source-table": "source-table-name", "target-schema": "target-schema-name", "target-table": "target-table-name", "condition": {conditional-declaration"} . . . more action definition . . .} } {. . . more actions . . .} ]} ``` #### Attribute Values
actions-type(Required) The definition of the operation(s) to perform on the data in the target hyper file.
source-schema-name(Optional) The name of the source database schema for the data to be updated. A value is not required unless there are multiple schemas in the database.
source-table-name(Required) The name of the source database table containing the data to be updated.
target-schema-name(Optional) The name of the target hyper file schema of the data to be updated from the source database. A value is not required unless there are multiple schemas in the database.
target-table-name(Required) The name of the table containing the data to be updated in the target hyper file.
condition(Required for insert, upsert, and delete)A declaration that defines a comparison operation between source and target data or between source or target data and a user provided constant. For details and examples, see Update Data in Published Live-to-Hyper Data Sources.
An `action` is an operation to be performed on specified target data. Multiple different actions can be defined as a batch in a request. The supported actions are: - `insert` - Inserts rows from a named source-table in your data source into a named target-table in your published Hyper. A simplified example is: ``` {"action": "insert", "source-table": "added_users", "target-table": "current_users"} ``` - `update` – Updates existing tuples from a named `source-table` in your data source into a named `target-table` in your published Hyper. The tuples to be updated are defined in a condition declaration. A simplified example is: ``` {"action": "update", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "eq", "target-col": "row_id", "source-col": "update_row_id"} } ``` - `upsert` - Updates a tuple inside the `target-table`, if such a tuple exists. If no such tuple exists, a new tuple will be inserted. The tuples to be updated are defined in a condition declaration. A simplified example is: ``` {"action": "upsert", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "gt", "target-col": "row_id", "source-col": "update_row_id"} } ``` - `replace` – Deletes all tuples from a `target-table` and inserts all data from a `source-table` with a matching schema. A simplified example is: ``` {"action": "replace", "source-table": "added_users", "target-table": "current_users"} ``` - `delete` – Deletes tuples from a target-table. The tuples to be deleted are defined in a condition declaration. A simplified example is: ``` {"action": "delete", "target-table": "my_extract_table", "source-table": "deleted_row_id_table", "condition": {"op": "gt", "target-col": "id", "source-col": "deleted_id"} } ``` For more information, see [Update Data in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). #### Permissions The user calling this method must be the data source owner and must have the overwrite permission on it. #### Request Header In addition to the typical authentication token, the following fields must be specified as part of the request header: - `content-type: application/json` - This endpoint accepts JSON only. - `RequestID` - A user-generated identifier that uniquely identifies a request. If the server receives more than one request with the same id within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests, which prevents executing the same job more than once could be caused by network anomalies or client crashes. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:hyper_data: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 The response body returns the job-id, which specifies the ID of the async job that will carry out the data operations described in the action batch. This returned "job-id" can be used to [query the status of the update job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) or to [cancel a scheduled job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#cancel_job). ``` (job-id: "scheduled-job-luid"} ``` #### Version Version 2o21.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed JSON.
400400008Invalid parameter valueA parameter in the request body is missing or invalid.
403403062Update data source multiple connections forbiddenA connection ID is required because the data source has multiple connections. Consider using Update Data in Hyper Connection to specify the connection. (This error does not apply to that Connection method)
403403032Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source LUID in the request body doesn't correspond to an existing data source.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404008Operation not supportedThe operation requested is not supported, the source data for the connection must be a Hyper file/database.
404404020Connection not foundNo resource was found for the specified connection and data source. (This error does not apply to Update Data in Hyper Data Source)
405405000Invalid request methodRequest type was not PATCH.
409409015Data source name conflictThe data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.
409409094Data update job already existsA data update job for the datasource is already queued or in progress.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data in Hyper Data Source Incrementally updates data (insert, update, upsert, replace and delete) in a published data source from a live-to-Hyper connection, where the data source has a single connection. A live-to-Hyper connection has a Hyper or Parquet formatted file/database as the origin of its data. For data sources with multiple connections, you can specify which to update using the [Update Data in Hyper Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#ref_update_data_in_hyper_data_connection) method. A request for this method must include an `upload-session-id` for a Hyper file payload containing an upload of the most current data from the data source for your published live-to-Hyper data. Use [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload) and [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload) methods to form the payload and acquire upload-session-id. For details and examples, see [Update Data in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). **Note:** While Hyper Update REST API methods make incremental changes much more efficient, multiple simultaneous update requests and large changes in large datasets can overwhelm Tableau server background processes. To mitigate this issue, Hyper Update requests are limited by the server configuration setting `api.server.update_uploaded_file.max_size_in_mb`. Starting in Tableau Server 2022.1 / Tableau Cloud March 2022, the default for this setting is 100MB. In previous versions, the limit was set to 10MB. Where heavy incremental update traffic is expected, we recommend you use a chunking strategy to limit the size of each update, and fine tune `max_size_in_mb` value to optimize performance for your exact conditions. **Working with Parquet files** \- When publishing a Parquet file to a data source through a live-to-Hyper connection, the files are converted to Hyper files. You may want to publish a copy of your original Parquet file to retain that data in its native format. \- A data source with a live-to-Hyper connection to data in a Hyper file converted from Parquet can only have a single connection. \- When incrementally updating that data from that connection, using the Update Hyper in Data Source method, the Parquet file is not converted to Hyper. #### URI PATCH /api/api-version/sites/site-id/datasources/datasource-id/data?uploadSessionId=upload-session-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to update.
upload-session-idThe upload session ID. A user-generated identifier that is unique to a request. If the server receives more than one request with the same ID within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests.
#### Request Body This method supports only JSON content-type for the request body. ``` {"actions": [ {"action": action-type", "source-schema": "source-schema-name", "source-table": "source-table-name", "target-schema": "target-schema-name", "target-table": "target-table-name", "condition": {conditional-declaration"} . . . more action definition . . .} } {. . . more actions . . .} ]} ``` #### Attribute Values
actions-type(Required) The definition of the operation(s) to perform on the data in the target hyper file.
source-schema-name(Optional) The name of the source database schema for the data to be updated. A value is not required unless there are multiple schemas in the database.
source-table-name(Required) The name of the source database table containing the data to be updated.
target-schema-name(Optional) The name of the target hyper file schema of the data to be updated from the source database. A value is not required unless there are multiple schemas in the database.
target-table-name(Required) The name of the table containing the data to be updated in the target hyper file.
condition(Required for insert, upsert, and delete)A declaration that defines a comparison operation between source and target data or between source or target data and a user provided constant. For details and examples, see Update Data in Published Live-to-Hyper Data Sources.
An `action` is an operation to be performed on specified target data. Multiple different actions can be defined as a batch in a request. The supported actions are: - `insert` - Inserts rows from a named source-table in your data source into a named target-table in your published Hyper. A simplified example is: ``` {"action": "insert", "source-table": "added_users", "target-table": "current_users"} ``` - `update` – Updates existing tuples from a named `source-table` in your data source into a named `target-table` in your published Hyper. The tuples to be updated are defined in a condition declaration. A simplified example is: ``` {"action": "update", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "eq", "target-col": "row_id", "source-col": "update_row_id"} } ``` - `upsert` - Updates a tuple inside the `target-table`, if such a tuple exists. If no such tuple exists, a new tuple will be inserted. The tuples to be updated are defined in a condition declaration. A simplified example is: ``` {"action": "upsert", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "gt", "target-col": "row_id", "source-col": "update_row_id"} } ``` - `replace` – Deletes all tuples from a `target-table` and inserts all data from a `source-table` with a matching schema. A simplified example is: ``` {"action": "replace", "source-table": "added_users", "target-table": "current_users"} ``` - `delete` – Deletes tuples from a target-table. The tuples to be deleted are defined in a condition declaration. A simplified example is: ``` {"action": "delete", "target-table": "my_extract_table", "source-table": "deleted_row_id_table", "condition": {"op": "gt", "target-col": "id", "source-col": "deleted_id"} } ``` For more information, see [Update Data in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). #### Permissions The user calling this method must be the data source owner and must have the overwrite permission on it. #### Request Header In addition to the typical authentication token, the following fields must be specified as part of the request header: - `content-type: application/json` - This endpoint accepts JSON only. - `RequestID` - A user-generated identifier that uniquely identifies a request. If the server receives more than one request with the same id within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests, which prevents executing the same job more than once could be caused by network anomalies or client crashes. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:hyper_data: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 The response body returns the job-id, which specifies the ID of the async job that will carry out the data operations described in the action batch. This returned "job-id" can be used to [query the status of the update job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) or to [cancel a scheduled job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#cancel_job). ``` (job-id: "scheduled-job-luid"} ``` #### Version Version 2o21.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed JSON.
400400008Invalid parameter valueA parameter in the request body is missing or invalid.
403403062Update data source multiple connections forbiddenA connection ID is required because the data source has multiple connections. Consider using Update Data in Hyper Connection to specify the connection. (This error does not apply to that Connection method)
403403032Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source LUID in the request body doesn't correspond to an existing data source.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404008Operation not supportedThe operation requested is not supported, the source data for the connection must be a Hyper file/database.
404404020Connection not foundNo resource was found for the specified connection and data source. (This error does not apply to Update Data in Hyper Data Source)
405405000Invalid request methodRequest type was not PATCH.
409409015Data source name conflictThe data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.
409409094Data update job already existsA data update job for the datasource is already queued or in progress.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data Source Updates the owner, project or certification status of the specified data source. **Version**: Available in API 2.0 and later. **License**: No additional license required. **Permissions**: You can update data source details if you are a Tableau administrator (Creator). Specific properties can be updated by other users depending on the type of update action and the permissions granted to the user. - Users who are not server administrators can move a data source from one project to another if they own the data source or the current (source) project, or are a project leader for the current project, and they have Write permission for the destination project. - Users can change certification status and the certification note if they are server administrators, site administrators, or project leaders for the current project. - Users can modify the name of the data source if: they have server administrator, site administrator (Creator) or Creator permissions and access to the data source with the overwrite capability. **Access Scope**: `tableau:datasources:update` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/datasources/datasource-id **Note:** Starting in 2021.2, you can also modify (insert, update, upsert, replace, and delete) data in a published data source that is a live-to-Hyper connection. To do this, use the [Update Data in Hyper Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_in_hyper_data_source) method, or for data sources with multiple connections, use the [Update Data in Hyper Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_in_hyper_connection) method. For more information, see [UpdateData in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
datasource-luidThe LUID of the data source to update.
#### Request Body ``` ``` ``` { "datasource": { "name": "Sales", "isCertified": "true", "certificationNote": "This is a certification note.", "encryptExtracts": "false", "project": { "id": "56c86f04-b834-4a08-a561-86497bb4b2df" }, "owner": { "id": "20148c74-7818-4eb8-b2a1-9f3f5f582613" }, "askData": { "enablement": "true [REMOVED IN API 3.12]" } } } ``` #### Request Attributes
datasource name (Optional) The new name of a the data source.
project (Optional) The LUID of a project to add the data source to.
owner (Optional) The LUID of a user to assign the data source to as owner.
datasource certification-status (Optional) A Boolean value that indicates whether the data source is certified. To learn more about data source certification, see Use Certified and Recommended Data Sources and Tables.
datasource certification-note (Optional) A note that provides more information on the certification of the data source, if applicable.
datasource encryptExtracts (Optional) true to encrypt the extracts or false to not encrypt extracts. For more information, see Extract and Encryption Methods.
askDataEnablement

This attribute is removed in API 3.12 and later (Tableau Cloud September 2021 / Server 2021.3).

(Optional) Determines if a data source allows use of Ask Data. The value can be Enabled, Disabled, or SiteDefault.

If enablement is not specified, Ask Data availability for the data source is unchanged during this update. If the askData element is included, it must contain an enablement attribute. Setting the value of enablement to SiteDefault for a data source will cause its enablement to follow the site's settings for Availability of Ask Data. A value of Enabled or Disabled will override a site's settings for the data source unless the setting Always disable Ask Data is selected. In that case, Ask Data will not be available for the data source regardless of the value of enablement.

Any combination of the attributes inside the element is valid. Only the attributes and child elements that are included result in updates to the data source. If no attributes or nested elements are included, no update is made. If the element is included, the id attribute must be included, and any other attributes of the element are ignored. If the element is included, the id attribute must be included, and any other attributes of the owner are ignored. #### cURL Example ``` curl --location --request GET "https://MY_SERVER/api/3.16/sites/a946d998-2ead-4894-bb50-1054a91dcab3/datasources" \ --header "X-Tableau-Auth: b09KVmT7QxuLVLv1En7iMg"oxKwSGTYT0WKRes5xk3dgI4gIkG3TM8W"a946d998-2ead-4894-bb50-1054a91dcvv8" \ --header "Content-Type: application/xml" \ --data-raw " " ``` #### Response Code 200 #### Response Body ``` ``` ``` { "datasource": { "name": "Sales", "id": "75b71d2f-e8d3-42af-b654-d953659326ee", "contentUrl": "mySite", "type": "excel-direct", "createdAt": "2016-02-12T23:36:09Z", "updatedAt": "2020-12-16T15:33:03Z", "isCertified": "false", "certificationNote": "This is a certification note.", "encryptExtracts": "false", "project": { "id": "56c86f04-b834-4a08-a561-86497bb4b2df" }, "owner": { "id": "20148c74-7818-4eb8-b2a1-9f3f5f582613" }, "job": { "id": "65348c74-7818-4eb8-b2a1-9f3f5f588870" }, "askData": { "enablement": "true [REMOVED IN API 3.12]" } } } ``` The `createdAt` and `updatedAt` attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400008Invalid parameter valueA user attempted to rename a datasource to a name containing only spaces, or to a name with more 255 characters.
400400129Invalid Ask Data enablementThe requested enablement setting in the request body does not correspond to the site configuration.
403403027Owner update forbiddenA non-administrator user tried to change the owner for the data source.
403403030Project update forbiddenA non-administrator user tried to change the project for the data source, but the caller doesn't have Write permission for the project.
403403032Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
403403141Update forbiddenA user attempted to update a data source that they do not have permissions to update.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002Owner not foundThe owner ID in the request body doesn't correspond to an existing owner.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not PUT or PATCH.
409409015Data source name conflictThe data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data Source Connection Updates the server address, port, authentication type, username, or password for the specified data source connection. If the data source contains multiple connections, all the connections are updated. To update specific connections in a data source containing multiple connections, see [Update Data Source Connections](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connections). **Version**: Available in API 2.3 and later. **License**: No additional license required. **Permissions**: Users who are server administrators or site administrators can change the connection for a data source or enable [query tagging](https://help.tableau.com/current/pro/desktop/en-us/performance_tips.htm). Users who are not server administrators can only update a data source. If they have Write (save) permission for the data source and if they have write permission for the project. **Access Scope**: `tableau:datasources:update` - Access scope introduced in API 3.16 (Tableau Cloud June 2022 / Server 2022.3) For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/datasources/datasource-id/connections/connection-id #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
datasource-luidThe LUID of the data source to update.
connection-luidThe LUID of the connection to update. To determine what connections are available for a data source, call Query Data Source Connections.
#### Request Body ``` ``` ``` { "connection": { "serverAddress": "newAddress", "serverPort": "newPort", "userName": "Jane Doe", "authenticationType": "new Auth Type", "password": "xxxxxx", "embedPassword": "false", "queryTaggingEnabled": "false" } } ``` #### Request Attributes
connection serverAddress The new server for the connection.
connection serverPort The new port for the connection
connection authenticationType Added in version 3.27.

*The new authentication type for the connection.

Standard values:

  • auth-user-pass: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a data source or workbook that is currently using the target authentication type, you can query for it using the REST API methods Query Datasource Connections or Query Workbook Connections, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a workbook or data source which is available locally. Look for the value of the authentication attribute of the connection.

connection userName The new username for the connection.
connection password The new password for the connection.
embedPassword True to embed the password; otherwise, False.
queryTaggingEnabled

[!WARNING]

Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the queryTaggingEnabled attribute is deprecated, will no longer be supported, and may be retired in future releases.

Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by setting native_api.UserInfoInGeneratedSQLEnabled to true.

For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If true, query tagging is enabled. If false, query tagging is disabled. The default is false.

For more information on query tagging, see Understand Workbook Impact on Your Database Using Query Tagging.

Any combination of the attributes inside the element is valid. If no attributes are included, no update is made. #### cURL Request Example ``` curl --location --request PUT "/api/api-version/sites/site-id/datasources/datasource-id/connections/connection-id" \ --header "Content-Type: application/json" \ --header "X-Tableau-Auth: ZOjZ-2-xRfmShEJLk3LCKQ|KVZTJA7K1YeNuuJwXSKUKSatWRn9Vbpe|11e4e373-9777-44d1-ac04-5363d6e8092e" \ --data "{ 'connection': { 'serverAddress': 'newAddress', 'serverPort': 'newPort', 'userName': 'Jane Doe', 'authenticationType': 'new Auth Type', 'password': 'xxxxxx', 'embedPassword': 'false', 'queryTaggingEnabled': 'false' }" ``` #### Response Code 200 #### Response Body ``` ``` ``` { "connection": { "id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "serverAddress": "database.example.com", "serverPort": "12345", "authenticationType": "new Auth Type", "userName": "jajohnson", "queryTaggingEnabled": "false" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403023Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
403403027Owner update forbiddenA non-administrator user tried to change connection information, but the caller doesn't have Write permission.
403403062Unsupported operationThe data source contains multiple connections, but the URI did not include /connections/connection-id to indicate which connection should be updated.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data Source Connections Updates the server address, port, authentication type, username, or password for one or more connections in a data source. To update all connections in a given data source with the same connection information, see [Update Data Source Connection](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection). **Version**: Available in API 3.27 and later. **License**: No additional license required. **Permissions**: Users who are server administrators or site administrators can change the connection for a data source or enable [query tagging](https://help.tableau.com/current/pro/desktop/en-us/performance_tips.htm). Users who are not server administrators can only update a data source. If they have Write (save) permission for the data source and if they have write permission for the project. **Access Scope**: `tableau:datasources:update` - Access scope introduced in API 3.16 (Tableau Cloud June 2022 / Server 2022.3) For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/datasources/datasource-id/connections/ #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
datasource-luidThe LUID of the data source to update.
#### Request Body ``` Luid1 Luid2 ``` ``` { "connectionLuids": [ "Luid1", "Luid2" ], "connection": { "serverAddress": "newAddress", "serverPort": "newPort", "authenticationType": "new Auth Type", "userName": "Jane Doe", "password": "xxxxxx", "embedPassword": "false", "queryTaggingEnabled": "false" } } ``` #### Request Attributes
connectionLuids An array of connection LUIDs in the data source that you are updating.
connection serverAddress The new server for the connection.
connection serverPort The new port for the connection
connection authenticationType

*The new authentication type for the connection.

Standard values:

  • auth-user-pass: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a data source or workbook that is currently using the target authentication type, you can query for it using the REST API methods Query Datasource Connections or Query Workbook Connections, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a workbook or data source which is available locally. Look for the value of the authentication attribute of the connection.

connection userName The new username for the connection.
connection password The new password for the connection.
embedPassword True to embed the password; otherwise, False.
queryTaggingEnabled

[!WARNING]

Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the queryTaggingEnabled attribute is deprecated, will no longer be supported, and may be retired in future releases.

Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by setting native_api.UserInfoInGeneratedSQLEnabled to true.

For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If true, query tagging is enabled. If false, query tagging is disabled. The default is false.

For more information on query tagging, see Understand Workbook Impact on Your Database Using Query Tagging.

Any combination of the attributes inside the element is valid. If no attributes are included, no update is made. #### cURL Request Example ``` curl --location --request PUT "/api/api-version/sites/site-id/datasources/datasource-id/connections/" \ --header "Content-Type: application/xml" \ --header "X-Tableau-Auth;" \ --data "{ 'connectionLuids': [ 'Luid1', 'Luid2' ], 'connection': { 'serverAddress': 'newAddress', 'serverPort': 'newPort', 'authenticationType': 'new Auth Type', 'userName': 'Jane Doe', 'password': 'xxxxxx', 'embedPassword': 'false', 'queryTaggingEnabled': 'false' } }" ``` #### Response Code 200 #### Response Body ``` ``` ``` { "connection": { "id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "serverAddress": "database.example.com", "serverPort": "12345", "authenticationType": "new Auth Type", "userName": "jajohnson", "queryTaggingEnabled": "false" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403023Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
403403027Owner update forbiddenA non-administrator user tried to change connection information, but the caller doesn't have Write permission.
403403062Unsupported operationThe data source contains multiple connections, but the URI did not include /connections/connection-id to indicate which connection should be updated.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data Source Now Runs an extract refresh on the specified data source. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). **Version**: Available in API 2.8 and later. **License**: No additional license required. **Permissions**: Users who are not server administrators or site administrators can only refresh extracts for data sources if they own the data source, or if they are the project leader for the project. **Access Scope**: `tableau:tasks:run` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This method runs an extract refresh for the specified data source, with no need to associate that extract refresh with a scheduled task. This method is the equivalent of selecting a data source using the Tableau Server UI, and then selecting **Refresh Extracts** from the menu (also known as a "manual refresh"), however, the REST method always runs a full refresh even if the refresh type is set to incremental. Similar to a manual refresh, if the extract is a `.tde` file, it will be converted to a `.hyper` file as a result of the refresh. To learn more about extract upgrades to the `.hyper` file format, see [Extract Upgrade to .hyper Format](https://help.tableau.com/current/server/en-us/extracting_upgrade.htm). #### URI POST /api/api-version/sites/site-id/datasources/datasource-id/refresh #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to refresh.
#### Request Body As of version 3.28, you can specify an incremental refresh on extracts by updating the request body as follows: ``` ``` { "extractRefresh": { "@incremental": "true" } } #### Response Code 202 #### Response Body ``` ``` ``` { "job": { "id": "job-id", "mode": "Asynchronous", "type": "RefreshExtract", "createdAt": "date-time", "extractRefreshJob": { "datasource": { "id": "datasource-id", "name": "datasource-name", "incremental"="true" } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user attempted to update a data source, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404004Data source not foundThe data source ID in the URI is unknown.
405405000Invalid request methodRequest type was not POST.
409409093Operation already in QueueThe extract refresh job is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/datasources/89a82d78-664f-45a1-8256-d4d2961a070b/refresh" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @empty-tsrequest.xml" ``` **Content of empty-tsrequest.xml:** ``` ``` **Example response:** ``` ``` ## Update Work Copy Elements Updates columns, field descriptions, or table descriptions on a work copy. Returns HTTP 200 when every element is updated. The success body omits the elements that succeeded. A column update may set at most one of `caption`, `type`, or `role`. An unknown `type` or `role` is HTTP 400 with error code `400008`. Setting more than one of those fields is HTTP 400 with no numeric sub-code. If any element fails, the HTTP status is the status of the first failure and the body lists only the failed elements. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:datasources:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/tds/sites/site-luid/workcopy/workcopy-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Request Body ``` Column Sales Total Sales FieldDescription Sales Total sales amount, revised. ``` ``` { "tdsElementList": [ { "elementType": "Column", "name": "Sales", "column": { "caption": "Total Sales" } }, { "elementType": "FieldDescription", "name": "Sales", "description": "Total sales amount, revised." } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements to update. Must contain at least one element. An empty or missing list is HTTP 400 with error code 400008.
tdsElementList[].elementTypeOptional. Element type sent to the TDS service. For this operation, use Column, FieldDescription, or TableDescription. Any other value is forwarded and reported as a per-element failure.
tdsElementList[].nameRequired. Element name.
tdsElementList[].columnUsed when elementType is Column. At most one of caption, type, and role may be set — setting more than one is HTTP 400 with no numeric sub-code. A column with none of them set is a no-op update.
tdsElementList[].column.captionOptional. The caption to set.
tdsElementList[].column.roleOptional. An accepted FieldRole constant other than FIELD_ROLE_UNKNOWN or UNRECOGNIZED — either of those is rejected as HTTP 400 with error code 400008.
tdsElementList[].column.typeOptional. An accepted FieldType constant other than FIELD_TYPE_UNKNOWN or UNRECOGNIZED — either of those is rejected as HTTP 400 with error code 400008.
tdsElementList[].descriptionUsed when elementType is FieldDescription or TableDescription. Description text to set. When description is null, the field is left unset so the TDS service can report a per-element failure instead of HTTP 500.
#### Response Code 200 OK #### Response Body On full success the response is an empty `tsResponse` — `tdsElementResult` is omitted entirely rather than returned as an empty list. When one or more elements fail, the HTTP status is the status of the first failure and the body carries `tdsElementResult` for the failed elements only; see the Attribute Values table below and the Errors table for the failure shape. ``` ``` ``` {} ``` #### Attribute Values
tdsElementResult[]Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.
tdsElementResult[].elementTypeRequired. Element type of the failed element, copied from the request.
tdsElementResult[].nameRequired. Name of the failed element, copied from the request.
tdsElementResult[].statusRequired. Failure status for this element.
tdsElementResult[].status.codeRequired (within status). The translated HTTP status for this element (200, 400, 401, 403, 404, 409, 500, or 503). Not a Tableau 6-digit error sub-code.
tdsElementResult[].status.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400400008Missing tdsElementListtdsElementList is missing or empty. The list is required and must contain at least one element.
400400008Invalid column type or roletype or role is not an accepted field type or role. FIELD_TYPE_UNKNOWN, FIELD_ROLE_UNKNOWN, and UNRECOGNIZED are rejected. The accepted names are not in the staged sources.
400Column update sets more than one fieldA column update may set at most one of caption, type, or role.
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Per-element invalid argumentOne or more elements were rejected as invalid. The body lists only the failed elements, and each status.code is the HTTP status 400.
400Unmapped per-element gRPC statusThe TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
401Per-element unauthenticatedThe TDS service rejected an element as unauthenticated. The body lists only the failed elements.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
403Per-element permission deniedThe TDS service rejected an element because permission was denied. The body lists only the failed elements.
404Per-element not foundOne or more elements were not found. The body lists only the failed elements. This is not error code 404065, which the read methods return for a missing named element.
405405000Method not allowedThe HTTP method is not supported for this resource.
409Per-element already existsOne or more elements already exist. The body lists only the failed elements.
429429000Rate limit exceededToo many requests sent in a given time period.
500Per-element internal errorThe TDS service failed while editing an element. The body lists only the failed elements.
503Per-element unavailableThe TDS service was unavailable while editing an element. The body lists only the failed elements.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Upload Data Source Encrypted Keychain Uploads the encrypted version of the embedded credentials. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:embedded\_credentials:upload - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/datasources/datasource-luid/applykeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
datasource-luidThe LUID of the data source to download the encrypted keychain from.
#### Request Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidMapping": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Request Attributes
associatedUserLuidMapping

(Required) The user IDs from the source site mapped to destination site user IDs.

encryptedKeychainList (Required) List of encrypted keychains from the source Tableau Server.
encryptedKeychain

(Required) Encrypted keychain from the source Tableau Server.

#### cURL Request Example ``` curl --location "https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/applykeychain" -X PUT --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data "<tsRequest> <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace> <destinationSiteLuid>9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d</destinationSiteLuid> <destinationServerUrl>http://example.com</destinationServerUrl> </tsRequest>" ``` #### Response Code 200 #### Response Body None #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404004 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Extract and Encryption Methods **[Extracts](https://help.tableau.com/current/pro/desktop/en-us/extracting_data.htm)** are saved subsets of data that you can use to improve performance, or to take advantage of Tableau functionality not available or supported in your original data). Using the extract methods of the Tableau Server REST API you can: - Set the schedule for extract refresh task for a data source - Set the schedule for extract refresh task for all data sources in a workbook to a schedule - Get a list of extract refresh tasks for a specific site or schedule - Run a specific extract refresh task - Create an extract from a published data source (used by all workbooks in a site that consume the data source) - Create extracts from the data sources of a published workbook (includes embedded data sources and embedding of published data sources for workbook-specific extract configuration) - Delete the extract of a data source - Delete the extracts of a workbook - Delete the refresh task for an extract - Enable encryption and decryption of extracts on a site when you use [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site) or [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_site) methods - Set the scope of encryption to be all extracts on a site, or allow the users to use: [Publish Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site), [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site), [Update Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site), or [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site) methods to enable or disable encryption for each workbook or data source on a site - Encrypt and decrypt extracts on a site - Reencrypt extracts on a site with new security keys This functionality relates to the UI elements and concepts described at: [Extract Your Data](https://help.tableau.com/current/pro/desktop/en-us/extracting_data.htm). ## About Extract Encryption Extract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see [Extract Encryption at Rest](https://help.tableau.com/current/server/en-us/security_ear.htm). The extract encryption mode is set at the site level. To set the mode, use the Create Site or Update Site methods with the `extractEncryptionMode` attribute. The extract encryption modes are: - **enforced**: enforce encryption of all extracts on the site. - **enabled**: allow users to specify to encrypt all extracts associated with specific published workbooks or data sources. - **disabled**: disable extract encryption on the site. To get the site extract encryption mode, use the Query Site method, which shows the `extractEncryptionMode` attribute in its response body. When the site extract encryption mode is set to **enforced**, all content is encrypted. You can use the reencrypt-extracts method to reencrypt all extracts on a site. When the site extract encryption mode is set to **enabled**, users can decide to encrypt or decrypt the extracts associated with specific published workbooks or data sources. To do this, use the Publish Data Source, Publish Workbook, Update Data Source, or Update Workbook methods with the `encryptExtracts` attribute. Set the `encryptExtracts` attribute to **true** to encrypt the extracts. The user must be the owner or administrator. To get the extract encryption status, use the Query Data Source or Get Workbook methods, which show the `encryptExtracts` attribute in the response body. When the site extract encryption mode is set to **enabled**, the owner or administrator can encrypt, decrypt, and reencrypt all extracts associated with workbooks or data sources on a site. When the site extract encryption mode is set to **disabled**, all encrypted extracts will be decrypted. Depending on the number and size of extracts, this operation may consume significant server resources. ## 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: Extracts and Encryption](https://www.postman.com/salesforce-developers/salesforce-developers/folder/2y5yr97/extracts-and-encryption) ## Create Cloud Extract Refresh Task Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection. _For Tableau Server, see [Add data source to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_data_source_to_schedule), [Add workbook to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_workbook_to_schedule), and [Add virtual connection to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_virtual_connection_to_schedule)._ **Version:** Available in API 3.20 (Tableau Cloud June 2023) and later. Virtual connection support added in API 3.30. 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 for a data source or workbook target. A virtual connection target requires Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions:** Administrators and any user with the creator role can create a custom schedule for an extract refresh.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks: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-id/tasks/extractRefreshes #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
#### Request Body ``` ``` ``` { "extractRefresh": { "type": "FullRefresh", "workbook": { "id": "54321fd-6365-44d5-925b-644e5281b605" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } ``` #### Request Attributes All request attributes are **required** to create a custom schedule for an extract refresh, except where noted below.
extractRefresh type The type of extract refresh being scheduled. Valid values include:
  • FullRefresh
  • IncrementalExtract
extractRefresh transactionLevel

(Optional) : Only used with a virtual connection.

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
workbook id
or datasource id
or virtualConnection id
The LUID of the workbook, data source, or virtual connection that is the target of the custom schedule.
startingItemId

Only used with a virtual connection, when extractRefresh type is FullRefresh

The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element. See Virtual Connection Example.

tableLuid

Only used with a virtual connection, when extractRefresh type is IncrementalExtract

The LUID of an extract table in the virtual connection. You may have more than one <tableLiud> element inside of a <tableLiuds> element. See Virtual Connection Example.

schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### Virtual Connection Example When the target is a virtual connection, use `virtualConnection id` instead of `workbook id` or `datasource id`. The following example includes only the `` and child elements for brevity; see the primary example above for the a full request without the elements that apply only to virtual connections. _Incremental refresh of specific tables, with a table-level transaction:_ ``` b4e39d59-19c3-4380-8ea4-9bfa4ed8fb84 ``` #### cURL Request Example `curl --location --request POST "https://10ax.online.tableau.com/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/tasks/extractRefreshes" --header "Content-Type: application/xml" --data " "` 200 #### Response Body When the target is a virtual connection, the response's `extractRefresh` element includes a `transactionLevel` attribute and a `virtualConnection` element (with a sibling `startingItemIds`, if starting items were specified) in place of `datasource` or `workbook`. ``` ``` ``` { "extractRefresh": { "id": "13237fd-6365-44d5-925b-644e5281b605", "consecutiveFailedCount": "0", "type": "IncrementalRefresh", "datasource": { "id": "0057ccac-872a-11e5-bb51-f763326b1350" } }, "schedule": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400400225Duplicate starting itemstartingItemIds contains a duplicate table LUID.
409409090Extract operation not allowedThe virtual connection has no extract-configured tables; all tables are live.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
404404026Task not foundThe task for the extract refresh could not be found.
409409004invalid parameter valueThe request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between start and end times are not increments of one hour, this error will result.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Extracts for Embedded Data Sources in a Workbook Create extracts for all embedded data sources of a workbook. Optionally, encrypt the extracts if the site and workbook using them are configured to allow it. When you create an extract for a data source in a workbook, the extract is available only to the workbook and may have configuration specific to the workbook, such as hiding of unused fields. You can create workbook extracts for both embedded and published data sources used by the workbook. When you create a workbook data source for a published data source, then refreshing the workbook extract will retrieve any changes to data from the published datasource, or from the published data source's extract if it is using one. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). #### URI POST /api/api-version/sites/site-id/workbooks/workbook-id/createExtract POST /api/api-version/sites/site-id/workbooks/workbook-id/createExtract?encrypt=encryption-flag #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site.
workbook-idThe LUID of the workbook.
encryption-flagIf true, then Tableau will attempt to encrypt the created extracts. If false, or no encrypt parameter is appended to the URI, then the extract won't be encrypted, unless encryption is enforced by site or workbook configuration. An error will be returned when encrypt equals true and encryption is disabled in the site or workbook.
#### Request Body ``` ``` #### Request Parameter Values
datasource-idLUID of the embedded data source to be extracted.
extract-all-datasources-flagBoolean. If true, then all data sources in the workbook will have an extract created for them. If false, then a data source must be supplied in the request.
#### Permissions Extracts for data sources embedded in a workbook can be created by Tableau server or site administrators, and users who own the workbook, or are an owner or leader of the project where the workbook resides. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extracts: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 `200` #### Response Body ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
409409070Invalid request methodThe data source cannot be extracted because it is file based or in another unsupported form.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/createExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE" -d "@create-extracts-for-workbook.xml"` **Content of** `create-extracts-for-workbook.xml` ``` ``` **Response body:** ``` df410925-feae-481d-bf84-2f37bdf7ce69 ``` ## Create an Extract for a Data Source Create an extract for a data source in a site. Optionally, encrypt the extract if the site and workbooks using it are configured to allow it. #### URI POST /api/api-version/sites/site-id/datasources/datasource-id/createExtract POST /api/api-version/sites/site-id/datasources/datasource-id/createExtract?encrypt=encryption-flag #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site.
datasource-idThe LUID of the datasource.
encryption-flagIf true, then Tableau will attempt to encrypt the created extracts. If false, or no encrypt parameter is appended to the URI, then the extract won't be encrypted, unless encryption is enforced by site or workbook configuration. An error will be returned when encrypt equals true and encryption is disabled in the site or workbook.
#### Request Body None #### Permissions Extracts for data sources can be created by Tableau server or site administrators, and by users who own the data source or are an owner or leader of the project where the data source resides. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extracts: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 200 #### Response Body ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
409409070Invalid request methodThe data source cannot be extracted because it is file based or in another unsupported form.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/createExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE"` **Response body:** ``` df410925-feae-481d-bf84-2f37bdf7ce69 ``` ## Decrypt Extracts in a Site Extract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see [Extract Encryption at Rest](https://help.tableau.com/current/server/en-us/security_ear.htm). Decrypts all extracts on a site. **Note:** Depending on the number and size of extracts, this operation may consume significant server resources. Consider running this command outside of normal business hours. #### URI POST /api/api-version/sites/site-id/decrypt-extracts #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body None #### Permissions Tableau Server administrators can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extract_encryption: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 200 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Extracts from Virtual Connection Deletes the extracts from a virtual connection, which changes it from extract to live mode. This operation applies to the entire virtual connection. You can't target individual tables. **Version**: Available in API 3.30. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Extracts for virtual connections can be deleted by Tableau server or site administrators, and by users who own the virtual connection or are an owner or leader of the project where the virtual connection resides. **Access Scope**: `tableau:extracts:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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-id/virtualconnections/virtualconnection-id/deleteExtract #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection whose extract is to be deleted.
#### Request Body The request body is an empty tsRequest element. `` ``` {} ``` #### cURL Request Example ``` curl --request POST 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/deleteExtract' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409128No extract to delete.The virtual connection has no extract. Neither the active revision nor any of its tables has extracts enabled.
400409099Unable to delete the extract.A generic error occurred while converting the virtual connection to live and deleting its extract.
403409098User not authorized to delete the extract.The user must be able to see the virtual connection and must have permission to convert its extract to live.
404404049Virtual connection not found.Check the virtual connection LUID. This error also occurs if the virtual connection has no active revision.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Extracts of Embedded Data Sources from a Workbook Delete all extracts of embedded data sources in a workbook. **Note:** Depending on the number and size of extracts, this operation may consume significant server resources. Consider running this command outside of normal business hours. #### URI POST /api/api-version/sites/site-id/workbooks/workbook-id/deleteExtract #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site.
datasource-idThe LUID of the workbook containing the extract to be deleted.
#### Permissions Extracts for data sources can be deleted by Tableau server or site administrators, and by users who own the data source or are an owner or leader of the project where the data source resides. #### Request Body ``` ``` #### Request Parameter Values None. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extracts: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 `200` #### Response Body None. #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
409409070Invalid request methodThe data source cannot be extracted because it is file based or in another unsupported form.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/deleteExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE" -d "@delete-extracts-for-workbook.xml"` **Content of** `create-extracts-for-workbook.xml` ```
``` **Response body:** None. Response code is `200`. ## Delete Extract from Data Source Delete the extract from a data source. #### URI POST /api/api-version/sites/site-id/datasources/datasource-id/deleteExtract #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site.
datasource-idThe LUID of the datasource whose extract is to be deleted.
#### Permissions Extracts for data sources can be deleted by Tableau server or site administrators, and by users who own the data source or are an owner or leader of the project where the data source resides. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extracts: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 No Content` #### Response Body None. #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
409409070Invalid request methodThe data source cannot be extracted because it is file based or in another unsupported form.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/deleteExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE"` ## Delete Extract Refresh Task Deletes the specified extract refresh task on Tableau Server or Tableau Cloud. On Tableau Cloud, deleting a task also deletes its custom schedule. On Tableau Server, it removes the item from the shared schedule but doesn't delete the schedule. #### URI DELETE /api/api-version/sites/site-id/tasks/extractRefreshes/task-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site that contains the extract refresh task.
task-idThe LUID of the extract refresh task to remove.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). Not available for Tableau Server. `tableau:tasks:delete` (this scope is included in the scope: `tableau:tasks`) 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 #### Permissions Tableau Server or Cloud users who are not server administrators or site administrators can delete an extract refresh task for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Response Code 204 #### Response Body None #### Version Version 3.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404026Task not foundThe task id in the URI doesn't correspond to an existing extract refresh task.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Encrypt Extracts in a Site Extract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see [Extract Encryption at Rest](https://help.tableau.com/current/server/en-us/security_ear.htm). Encrypts all extracts on a site. **Note:** Depending on the number and size of extracts, this operation may consume significant server resources. Consider running this command outside of normal business hours. #### URI POST /api/api-version/sites/site-id/encrypt-extracts #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body None #### Permissions Tableau Server administrators can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extract_encryption: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 200 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Extract Refresh Task Returns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection. #### URI GET /api/api-version/sites/site-id/tasks/extractRefreshes/task-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the extract refresh that you want information about.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). `tableau:tasks:read` (this scope is included in the scope: `tableau:tasks`) 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 #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of extract refresh tasks that they own. #### Response Code 200 #### Response Body Tableau Server and Tableau Cloud return different payloads in response to this request. Output for virtual connections includes `transactionLevel` and table ids in addition to the output that's standard for data sources and workbooks. ### Tableau Server Response For Tableau Server an extract refresh task with a server schedule is returned. ``` ``` ``` [ { "extractRefresh": { "id": "refresh_task_id", "priority": "nn", "consecutiveFailedCount": "n", "type": "REFRESH_EXTRACT", "schedule": { "id": "schedule_id", "name": "schedule_name", "state": "state", "priority": "nn", "createdAt": "DATE_TIME", "updatedAt": "DATE_TIME", "type": "Extract", "frequency": "frequency", "nextRunAt": "DATE_TIME" }, "datasource": { "id": "datasource_id" } } }, [] ] ``` ### Tableau Cloud Response For Tableau Cloud an extract refresh task with its frequency is returned. ``` ``` ``` { "task": { "extractRefresh": { "id": "0ece2369-c4eb-4382-be0f-961039d708a0", "priority": "50", "consecutiveFailedCount": "5", "type": "RefreshExtractTask", "schedule": { "frequency": "Weekly", "nextRunAt": "2023-06-08T04:50:00Z", "frequencyDetails": { "start": "21:50:00", "intervals": { "interval": [ { "weekDay": "Thursday" } ] } } }, "workbook": { "id": "7e766949-7166-4b3d-90ba-784f7575743b" } } } } ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403403004Operation unauthorizedThe user is not authorized to get the task.
404404026Task not foundThe task ID in the URI doesn't correspond to an existing task.
405405000Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Extract Refresh Tasks in Site Returns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections. #### URI GET /api/api-version/sites/site-id/tasks/extractRefreshes #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). `tableau:tasks:read` (this scope is included in the scope: `tableau:tasks`) 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). #### cURL Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/tasks/extractRefreshes" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of extract refresh tasks that they own. #### Response Code 200 #### Response Body Tableau Server and Tableau Cloud return different payloads in response to this request. Output for virtual connections includes `transactionLevel` and table ids in addition to the output that's standard for data sources and workbooks. ### Tableau Server Response On Tableau Server, a list of extract refresh tasks with their server schedules is returned. ``` ``` ``` { "tasks": [ { "extractRefresh": { "id": "refresh_task_id", "priority": "nn", "consecutiveFailedCount": "n", "type": "REFRESH_EXTRACT", "schedule": { "id": "schedule_id", "name": "schedule_name", "state": "state", "priority": "nn", "createdAt": "DATE_TIME", "updatedAt": "DATE_TIME", "type": "Extract", "frequency": "frequency", "nextRunAt": "DATE_TIME" }, "datasource": { "id": "datasource_id" } } }, [] ] } ``` ### Tableau Cloud Response On Tableau Cloud, a list of extract tasks with their frequency is returned. ``` ``` ``` { "tasks": { "task": { "extractRefresh": { "id": "0ece2369-c4eb-4382-be0f-961039d708a0", "priority": "50", "consecutiveFailedCount": "5", "type": "RefreshExtractTask", "schedule": { "frequency": "Weekly", "nextRunAt": "2023-06-08T04:50:00Z", "frequencyDetails": { "start": "21:50:00", "intervals": { "interval": [ { "weekDay": "Thursday" } ] } } }, "workbook": { "id": "7e766949-7166-4b3d-90ba-784f7575743b" } } } } } ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
405405000Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Extract Refresh Tasks in Server Schedule Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server. To get the ID of a schedule, call the [List Server Schedules](#query_schedules) method. Note that the List Server Schedules method is global to the server; schedules are not specific to a site. Therefore, the URI for the List Server Schedules method does not include `/sites/` or a site ID. However, individual scheduled tasks are specific to a site, and the URI for Query Extract Refresh Tasks must include the site information. For more information about refresh tasks, see [Manage Refresh Tasks](https://help.tableau.com/current/server/en-us/help.htm#task.htm). _Not available for Tableau Cloud._ #### URI GET /api/api-version/sites/site-id/schedules/schedule-id/extracts GET /api/api-version/sites/site-id/schedules/schedule-id/extracts?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 2.2. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the refresh tasks.
schedule-idThe ID of the schedule to get extract information for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### JWT Access Scope Not available. 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 #### Permissions This method can only be called by server administrators and site administrators. When a site administrator calls this method, the payload contains only the tasks that are associated with the site that the user is signed in to. #### Response Code 200 #### Response Body ``` ... additional extract refresh tasks ... ``` #### Version Version 2.2 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
400400047Invalid schedule typeThe schedule type does not represent an extract refresh task. (For example, it might be a subscription task.)
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404Schedule not foundThe schedule ID in the URI doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/schedules/59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba/extracts" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Reencrypt Extracts in a Site Extract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see [Extract Encryption at Rest](https://help.tableau.com/current/server/en-us/security_ear.htm). Reencrypt all extracts on a site with new encryption keys. If no site is specified, extracts on the default site will be reencrypted. **Note:** Depending on the number and size of extracts, this operation may consume significant server resources. Consider running this command outside of normal business hours. #### URI POST /api/api-version/sites/site-id/reencrypt-extracts #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body None #### Permissions Tableau Server administrators can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extract_encryption: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 None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Run Extract Refresh Task Runs the specified extract refresh task. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). This method runs the scheduled task for the data source extract, the published workbook that connects to the data extract, or the virtual connection extract. You must first schedule the task for the extract refresh. You can do this using the [Create Schedule](#create_schedule) method to create the task. To get information about the extract refresh task, use the [Get Extract Refresh Tasks](#get_extract_refresh_tasks) method, which returns the extractRefresh ID that you use as the task-id. The method adds the refresh task to the backgrounder queue. Depending upon the backgrounder load, the task might not run immediately. The method returns information about the backgrounder job responsible for running the extract refresh task, including a **job id** that can be used with the [Query Job](#query_job) method to query the status of the extract refresh. An extract refresh task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a refresh task will fail if the task has been put in the task queue in any of these ways, or is already in progress. #### URI POST /api/api-version/sites/site-id/tasks/extractRefreshes/task-id/runNow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the extract refresh task that you want to run.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). Not available for Tableau Server. `tableau:tasks:run` (this scope is included in the scope: `tableau:tasks`) 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 The request body is an empty tsRequest element. ``` ``` #### Permissions Tableau Server users who are not server administrators or site administrators can only run the extract refresh tasks that they own. #### Response Code 200 #### Response Body The content type (workbook, data source, or virtual connection) is indicated in the response. ``` ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400047Extract refresh errorThe task specified is not an extract refresh task.
400409090Extract operation not allowedThe extract operation is not allowed for the asset that the task refreshes.
403403004Operation on resource unauthorizedThe user is not authorized to run the task.
403409082Run now disabledThe Run Now setting is disabled for the site.
404404003Unknown resourceThe task ID in the URI doesn't correspond to an existing task.
404404049Virtual connection not foundThe virtual connection that the task refreshes no longer exists.
405405000Method not allowedThe request type was not POST.
409409093Operation already in queueThe extract refresh job is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/extractRefreshes/9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c/runNow" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @empty_request.xml` ## Update Cloud Extract Refresh Task Updates an extract refresh task on Tableau Cloud. _For Tableau Server, see [Update server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#update_schedule)._ **Version:** Available in API 3.20 (Tableau Cloud June 2023) and later. Virtual connection support added in API 3.30. 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:** Administrators and the owner of a custom schedule for an extract refresh task can update the schedule.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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-id/tasks/extractRefreshes/task-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
task-idThe LUID of the extract refresh task. Use Get extract refresh tasks on site to find tasks by name.
#### Request Body ``` ``` ``` { "extractRefresh": { "type": "FullRefresh", "workbook": { "id": "13237fd-6365-44d5-925b-644e5281b605" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Request Attributes All request attributes are **optional** to update a custom schedule for a subscription.
extractRefresh type enumeration: The type of extract refresh being scheduled. Valid values include:
  • FullRefresh
  • IncrementalRefresh
workbook id
or datasource id
or virtualConnection id
LUID: The LUID of the workbook, data source, or virtual connection that is the target of the custom schedule.
extractRefresh transactionLevel

(Optional) : Only used with a virtual connection.

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
startingItemId

Only used with a virtual connection, when extractRefresh type is FullRefresh

The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element. See Virtual Connection Example.

tableLuid

Only used with a virtual connection, when extractRefresh type is IncrementalExtract

The LUID of an extract table in the virtual connection. You may have more than one <tableLiud> element inside of a <tableLiuds> element. See Virtual Connection Example.

schedule frequency enumeration: The scheduled frequency for triggering the extract refresh. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
    . . . 
</frequencyDetail>
interval {interval type} string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours=“1" The number of hours between jobs. 1 is the only valid value.
  • minutes=“60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay=“weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    Copy
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
     <intervals>
Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours=“interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay=“weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    Copy
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay=“weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay=“day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month. For example, to make a schedule that that would run a job on the first and fifteenth of each month, you would use:
    Copy
    <intervals/>
      <interval monthDay="1"/>
      <interval monthDay="15"/>
    </intervals/>

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay=“occurrence_of_weekday" Weekday=“weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    Copy
    <interval monthDay="Third" weekDay="Thursday"/>

#### Virtual Connection Example When the target is a virtual connection, use `virtualConnection id` instead of `workbook id` or `datasource id`. The following example includes only the `` and child elements for brevity; see the primary example above for the a full request without the elements that apply only to virtual connections. _Incremental refresh of specific tables, with a table-level transaction:_ ``` b4e39d59-19c3-4380-8ea4-9bfa4ed8fb84 ``` #### cURL Request Example `` curl --location --request POST "https://10ax.online.tableau.com/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/tasks/extractRefreshes/r2345998-2ead-4894-bb50-1054a9109876" --header "Content-Type: application/xml" `--data " "` `` #### Response Code 200 #### Response Body For a virtual connection task, the response includes a `virtualConnection` element in place of `workbook` or `datasource`, a `transactionLevel` attribute, and a `startingItemIds` element if starting tables were set. ``` ``` ``` { "extractRefresh": { "id": "13237fd-6365-44d5-925b-644e5281b605", "consecutiveFailedCount": "0", "type": "IncrementalRefresh", "datasource": { "id": "0057ccac-872a-11e5-bb51-f763326b1350" } }, "schedule": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe request did not include a valid schedule payload.
400409004Invalid parameterA value in the request is invalid or missing. This includes an invalid or missing schedule or interval value, or start and end times that are not valid for the schedule. For hourly and daily schedules that use hour intervals, the difference between start and end must be a multiple of one hour. This error also includes transactionLevel sent for a task that is not a virtual connection task, a startingItemIds entry that is not a valid ID, or more startingItemIds entries than the maximum allowed per request.
400400225Duplicate table IDstartingItemIds contains the same table ID more than once.
400400223Table not foundA table ID in startingItemIds is not in the virtual connection's active revision.
400400224Table not in extract modeA table ID in startingItemIds refers to a table that is in live mode.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user is not authorized to make this request.
403403200Virtual connection task forbiddenThe user cannot see, or cannot manage or refresh the extract of, the virtual connection that the task refreshes.
404404026Task not foundThe task does not exist, is not an extract refresh task, or targets content that no longer exists.
404404023Schedule not foundThe task's existing schedule could not be found while merging the new schedule values.
405405000Method not allowedThe site is not on Tableau Cloud, or the task refreshes a virtual connection and virtual connection custom-schedule tasks are disabled for the site.
409409130Task state invalidThe stored virtual connection task is in an unexpected state and must be repaired or recreated.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Favorites Methods Using the favorites methods of the Tableau Server REST API you can: - List a user's favorites - Add or delete data sources, projects, views, workbooks, and flows to and from a user's favorites - Move an item to organize a user's favorites This functionality relates to the UI elements and concepts described at: [Mark Favorites](https://help.tableau.com/current/pro/desktop/en-us/favorites.htm). ## 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: Favorites](https://www.postman.com/salesforce-developers/salesforce-developers/folder/5gbuu7d/favorites) ## Add Data Source to Favorites Adds the specified data source to the user's favorites. If the user already has the data source listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
datasource-idThe ID of the data source to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ... additional favorites ... ``` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Forbidden favorites accessA non-administrator user called this method but doesn't have permission to add a data source to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404011Data source not foundThe data source ID in the request body doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Flow to Favorites Adds the specified flow to the user's favorites. If the user already has the flow listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
flow-idThe ID of the flow to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ... additional favorites ... ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Forbidden favorites accessA non-administrator user called this method but doesn't have permission to add a data source to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Metric to Favorites - Retired in API 3.22 **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Adds the specified metric to the user's favorites. If the user already has the metric listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the metric.
user-idThe ID of the user to add the favorite for.
#### Request Body ` ` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
metric-idThe ID of the metric to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the metric (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ` ... additional favorites ... ` #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Forbidden favorites accessA non-administrator user called this method but doesn't have permission to add a metric to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404028Metric not foundThe metric ID in the URI doesn't correspond to an existing metric.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Project to Favorites Adds the specified project to a user's favorites. If the user already has the project listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/_api-version_/sites/_site-id_/favorites/_user-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
project-idThe ID (not name) of the project to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have permission to add a project to a favorite list (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ``` #### Version Version 3.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Access to favorites deniedA non-administrator user called this method but doesn't have permission to add a project to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/favorites/2474164d-8d37-4a4c-abc7-c2070fd25fd5" -X PUT -d @add-project-to-favorites.xml -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Content of add-project-to-favorites.xml:** ``` ``` **Example response:** ``` ``` ## Add View to Favorites Adds the specified view to a user's favorites. If the user already has the view listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
view-idThe ID (not name) of the view to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have permission to add a view to a favorite list (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ... additional favorites ... ``` The value of view-url-name is the name of the view in its URL. For example, if a view named `View 1` shows the URL `https://MY_SERVER/#/site/MY_SITE/views/VIEW_1` in your browser address bar, then the view-url-name would be `VIEW_1`. Modifying the name (display name) of a view will not impact the view-url-name (path element of the view's URL). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Forbidden Favorites accessA non-administrator user called this method but doesn't have permission to add a view to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404011View not foundThe view ID in the request body doesn't correspond to an existing view.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/favorites/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X PUT -d @add-view-to-favorites.xml -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Content of add-view-to-favorite.xml:** ``` ``` **Example response:** ``` ``` ## Add Workbook to Favorites Adds the specified workbook to a user's favorites. If the user already has the workbook listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server. If the label is already in use for another workbook, an error is returned.
workbook-idThe ID (not name) of the workbook to add as a favorite.
#### Permissions Tableau Server users who are not administrators or site administrators can call this method only if they have permission to add a workbook to a favorites list. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ... additional favorites ... ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400005 Invalid label

The favorite label is empty or consists of only white space characters.

403 403004 Access to Favorites forbidden

A non-administrator user called this method but doesn't have permission to add a workbook to the specified user's favorites. This will always be the case when the user references in the URI identifies a user other than the user who is calling the method.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The user ID in the URI doesn't correspond to an existing user.
404 404006 Workbook not found The workbook ID in the request body doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Data Source from Favorites Deletes the specified data source from the user's favorites. If the specified data source is not a favorite, the operation has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/datasources/datasource-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
user-idThe ID of the user to remove the favorite from.
datasource-idThe ID of the data source to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Forbidden favorites accessA non-administrator user attempted to delete a data source from a different user's favorites.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user
404404010Data source not a favoriteThe data source ID in the URI exists but is not a favorite of the specified user.
404404011Data source not foundThe data source ID in the URI doesn't correspond to an existing data source
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Flow from Favorites Deletes the specified flow from the user's favorites. If the specified flow is not a favorite, the operation has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/datasources/datasource-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
user-idThe ID of the user to remove the favorite from.
datasource-idThe ID of the data source to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Forbidden favorites accessA non-administrator user attempted to delete a data source from a different user's favorites.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user
404404010Flow not a favoriteThe flow ID in the URI exists but is not a favorite of the specified user.
404404027Data source not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Project from Favorites Deletes the specified project from the user's favorites. If the specified project is not a favorite, the operation has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/projects/project-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
user-idThe ID of the user to remove the favorite from.
project-idThe ID of the project to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a project only from their own favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 3.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Forbidden favorites accessA non-administrator user attempted to delete a project from a different user's favorites.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/favorites/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/projects/89a82d78-664f-45a1-8256-d4d2961a070b" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Delete View from Favorites Deletes the specified view from user's favorites. If the specified view is not a favorite, the operation has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/views/view-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
user-idThe ID of the user to remove the favorite from.
view-idThe ID of the view to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a view only from their own favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Forbidden Favorites accessA non-administrator user attempted to delete a view from a different user's favorites.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user
404404010View not a favoriteThe view ID in the URI exists but is not a favorite of the specified user.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Workbook from Favorites Deletes a workbook from a user's favorites. If the specified workbook is not a favorite of the specified user, this call has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/workbooks/workbook-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to remove the favorite from.
workbook-idThe ID of the workbook to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can remove a workbook only from their own favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Access to Favorites forbiddenA non-administrator user attempted to delete a workbook from a different user's favorites.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404010Workbook not a favoriteThe workbook ID in the URI exists but belongs to a different user.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Favorites for User Returns a list of favorite projects, data sources, views, workbooks, and flows for a user. #### URI GET /api/api-version/sites/site-id/favorites/user-id GET /api/api-version/sites/site-id/favorites/user-id?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
user-idThe ID of the user for which you want to get a list favorites.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they are the user for which they want to get a list of favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ``` The value of view-url-name is the name of the view in its URL. For example, if a view named `View 1` shows the URL `https://MY_SERVER/#/site/MY_SITE/views/VIEW_1` in your browser address bar, then the view-url-name would be `VIEW_1`. Modifying the name (display name) of a view will not impact the view-url-name (path element of the view's URL). #### Response when favorite items have been deleted In the case where an item selected as a favorite has been deleted the response body will contain only the label of the favorite. ``` ``` #### Version Version 2.5 and later. Support for favorite projects added in version 3.1. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403403004Forbidden Favorites accessA non-administrator user called this method but doesn't have permission to view the specified user's favorites.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/favorites/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Organize Favorites Move an item to organize a user's favorites. #### URI PUT /api/api-version/sites/site-id/orderFavorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
user-idThe ID of the user for which you want to get a list favorites.
#### Request Body ``` ``` #### Attribute Values
favorite-id The ID of the favorite you want to move.
content-type The content type of a favorite. To specify the type, use one of the following values:
  • datasource
  • workbook
  • view
  • project
  • flow
These values are not case sensitive.
favorite-id-after The ID of the favorite that should follow, or come after, the favorite you want to move.
#### Permissions Users who are not server administrators or site administrators can call this method only if they are the user for which they want to move favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 None #### Version Version 3.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403403004Forbidden Favorites accessA non-administrator user called this method but doesn't have permission to view the specified user's favorites.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404010Favorite not foundThe favorite ID specified doesn't correspond to a user's favorite.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Filtering and Sorting in the Tableau REST API You can filter and sort the data that gets returned from requests to the following REST API endpoints: - [Get Users on Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_on_site) \[[filter list](#users)\] - [Get User Notification Preferences](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_user_notification_preferences) \[[filter list](#notification-prefs)\] - [List Custom Views](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#list_custom_views) \[[filter list](#custom-views)\] - [List Group Sets](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#list_group_sets) \[[filter list](#group-sets)\] - [List Recycle Bin Content by Type](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#list_recycle_bin_content_by_type) \[[filter list](#recycle-bin-content)\] - [Query Datasources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_sources) \[[filter list](#datasources)\] - [Query Groups](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groups) \[[filter list](#groups)\] - [Query Group Sets](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groupsets) \[[filter list](#groups)\] - [Query Jobs](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_jobs) \[[filter list](#jobs)\] - [Query Projects](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_projects) \[[filter list](#projects)\] - [Query Views for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_views_for_site) \[[filter list](#views)\] - [Query Workbooks for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbooks_for_site) \[[filter list](#workbooks)\] - [Query Flows for a Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#Query_Flows_For_Site) \[[filter list](#flows)\] - [Get Flow Runs](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_runs) \[[filter list](#flow-runs)\] - [Query Metrics for a Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#list_metrics_for_site) \[[filter list](#metrics)\] You can also filter query views using fields in underlying workbook data when using the [Download View Crosstab Excel](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#download_view_excel), [Query View Data](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_data), [Query View Image](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_image), and [Query View PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_pdf) methods. To learn more, see [View query filters](#Filter-query-views). **Tip:** Although you can't filter using the [Query Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_site) endpoint, you can look up a specific site by site-id or site-name?key=name. ## Filtering By default, methods like Get Users on Site return information about all the users or workbooks on a Tableau Server site. If there are many entities, the method returns them in chunks (pages). If you want information about a specific user or workbook, one option is to loop through the information returned by the call and look for the user or workbook that you're interested in. As an alternative, starting in the REST API version 2.3 (Tableau Server 10.0), you can include a filter expression in the query string of the URI, using the following syntax: `filter=field:operator:value` The following example shows how to include a filter in a call to get users on a site: `http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users?**filter=siteRole:eq:Viewer**` In the preceding example, the method returns only the users whose site role is `Viewer`. **Note:** Filter expressions can’t contain ampersand (&) or comma (,) characters because these characters are used as field expression separators. This is true even if those characters are encoded. ### Filter expressions The following tables list the field names and operators you can use in a filter expression. Notice that the user-related calls support slightly different fields than the workbook-related calls. #### Custom views | Field | Supported Operators | | --- | --- | | createdAt | eq, gt, gte, lt, lte | | id | eq, in | | name | eq, in | | ownerId | eq | | shared | eq | | updatedAt | eq, gt, gte, lt, lte | | viewId | eq | | workbookId | eq | #### Data sources | Field | Supported Operators | | --- | --- | | authenticationType | eq, in | | connectedWorkbookType | eq, gt, gte, lt, lte | | connectionTo | eq, in | | connectionType | eq, in | | contentUrl | eq, in | | createdAt | eq, gt, gte, lt, lte | | databaseName | eq, in | | databaseUserName | eq, in | | description | eq, in | | favoritesTotal | eq, gt, gte, lt, lte | | hasAlert | eq | | hasEmbeddedPassword | eq | | hasExtracts | eq | | isCertified | eq | | isConnectable | eq | | isDefaultPort | eq | | isHierarchical | eq | | isPublished | eq | | name | eq, in | | ownerDomain | eq, in | | ownerEmail | eq | | ownerName | eq, in | | projectName _(Not available in [API 3.13 to 3.17](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm#version_and_rest))_ | eq, in | | serverName | eq, in | | serverPort | eq | | size | eq, gt, gte, lt, lte | | tableName | eq, in | | tags | eq, in | | type | eq | | updatedAt | eq, gt, gte, lt, lte | #### Flows | Field | Supported Operators | | --- | --- | | createdAt | eq, gt, gte, lt, lte | | name | eq, in | | ownerName | eq | | projectId | eq | | projectName | eq, in | | updatedAt | eq, gt, gte, lt, lte | #### Flow Runs | Field | Supported Operators | | --- | --- | | completeAt | eq, gt, gte, lt, lte | | flowId | eq, in | | progress | eq, gt, gte, lt, lte | | startedAt | eq, gt, gte, lt, lte | | userId | eq, in | #### Groups | Field | Supported Operators | | --- | --- | | domainName | eq, in | | domainNickname | eq, in | | isExternalUserEnabled _(added in API 3.21, Tableau Cloud only)_ | eq | | isLocal | eq | | luid _(added in API 3.22, Tableau Cloud only)_ | eq, in | | minimumSiteRole | eq, in | | name | cieq, eq, in, like | | userCount | eq, gt, gte, lt, lte | #### Group Sets | Field | Supported Operators | | --- | --- | | domainName | eq, in | | domainNickname | eq, in | | isExternalUserEnabled _(added in API 3.21, Tableau Cloud only)_ | eq | | isLocal | eq | | luid _(added in API 3.22, Tableau Cloud only)_ | eq, in | | minimumSiteRole | eq, in | | name | cieq, eq, in, like | | userCount | eq, gt, gte, lt, lte | #### Jobs | Field | Supported Operators | | --- | --- | | args | has | | completedAt | eq, gt, gte, lt, lte | | createdAt | eq, gt, gte, lt, lte | | jobType | eq, in | | notes | has | | priority | eq, gt, gte, lt, lte | | progress | eq, gt, gte, lt, lte | | startedAt | eq, gt, gte, lt, lte | | status | eq | | subtitle | eq, has | | title | eq, has | #### Metrics | Field | Supported Operators | | --- | --- | | createdAt | eq, gt, gte, lt, lte | | favoritesTotal | eq, gt, gte, lt, lte | | hitsTotal | eq, gt, gte, lt, lte | | name | eq, in | | ownerDomain | eq, in | | ownerEmail | eq, in | | ownerName | eq, in | | projectName | eq, in | | tags | eq, in | | updatedAt | eq, gt, gte, lt, lte | #### Notification Preferences | Field | Supported Operators | | --- | --- | | channel | eq | | notificationType | eq | #### Projects | Field | Supported Operators | | --- | --- | | createdAt | eq, gt, gte, lt, lte | | name | eq, in | | ownerDomain | eq, in | | ownerEmail | eq, in | | ownerName | eq, in | | parentProjectId | eq, in | | topLevelProject | eq | | updatedAt | eq, gt, gte, lt, lte | #### Recycle Bin Content | Field | Supported Operators | | --- | --- | | createdAt | eq, gt, gte, lt, lte | | deleterId | eq, in | | id | eq, in | | name | eq, in | | ownerId | eq, in | | path | eq, in | | updatedAt | eq, gt, gte, lt, lte | #### Sites | Field | Supported Operators | | --- | --- | | id | eq | #### Users | Field | Supported Operators | | --- | --- | | domainName | eq, in | | friendlyName | eq, in | | isLocal | eq | | lastLogin | eq, gt, gte, lt, lte | | luid | eq, in | | name | cieq, eq, in | | siteRole | eq, in | #### Views | Field | Supported Operators | | --- | --- | | caption | eq, in | | contentUrl | eq, in | | createdAt | eq, gt, gte, lt, lte | | favoritesTotal | eq, gt, gte, lt, lte | | fields | eq, in | | hitsTotal | eq, gt, gte, lt, lte | | name | eq, in | | ownerDomain | eq, in | | ownerEmail | eq, in | | ownerName | eq | | projectName | eq, in | | sheetNumber | eq, gt, gte, lt, lte | | sheetType | eq, in | | tags | eq, in | | title | eq, in | | updatedAt | eq, gt, gte, lt, lte | | viewUrlName | eq, in | | workbookDescription | eq, in | | workbookName | eq, in | #### Workbooks | Field | Supported Operators | | --- | --- | | createdAt | eq, gt, gte, lt, lte | | contentUrl | eq, in | | displayTabs | eq | | favoritesTotal | eq, gt, gte, lt, lte | | hasAlerts | eq | | hasExtracts | eq | | name | eq, in | | ownerDomain | eq, in | | ownerEmail | eq, in | | ownerName | eq, in | | projectName | eq, in | | sheetCount | eq, gt, gte, lt, lte | | size | eq, gt, gte, lt, lte | | subscriptionsTotal | eq, gt, gte, lt, lte | | tags | eq, in | | updatedAt | eq, gt, gte, lt, lte | ### Filter expression notes - Operators are delimited with colons (`:`). - If any reserved characters following the question mark (`?`) in the URI are encoded, then all reserved characters must be encoded. For example, the colon character (`:`) would be encoded as `%3A` and the equals character (`=`) would be encoded as `%3D`. - The operators are: - `cieq`: case-insensitive equals - `eq`: equals - `gt`: greater than - `gte`: greater than or equal - `has`: includes the specified string - `in`: any of \[list\] (for searching tags) - `lt`: less than - `lte`: less than or equal - `like`: matches values using a wildcard pattern (`*`) - Field names, operator names, and values are case-sensitive. - Values should be URL-encoded. For example, to search for the workbook named `Project Views`, include a filter like `filter=name:eq:Project+Views`. - Substring search (the **has** operator) is only supported for the [Query Jobs](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_jobs) method. - To filter on multiple fields, combine expressions using a comma, as in this example: `filter=lastLogin:gte:2016-01-01T00:00:00Z,siteRole:eq:Publisher` Multiple expressions are combined using a logical AND. (However, see next point.) - If you include the same field multiple times in a filter expression, only the last reference to the field is used. For example, in the following filter for a **Get Users on Site** call, the `siteRole` field appears twice. Tableau Server returns only the users whose site role is `Viewer`, because that's the value in the last reference. `filter=siteRole:eq:Publisher,siteRole:eq:Viewer` - For date-time values, use [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format (for example, `2016-05-04T21:24:49Z`). - Wildcard searches for characters using _starts with_, _ends with_, and _contains-based_ searches are supported starting in Tableau Cloud May 2023 and Tableau Server 2022.1.14. For example, if searching for a string such as "marketing-example", a wildcard search can look like the following: - **Starts with:** ?filter=name:like:mark\* - **Ends with:** ?filter=name:like:\*-ample - **Contains:** ?filter=name:like:mark\*ex\* - Wildcard searches are supported only on selected name fields (user `name`, user `friendlyName`, group `name`, and group set `name`). Other fields support exact matches only. ### Searching workbooks using tags To search for a workbook that has one specific tag, use the `tag` field and the `eq` operator, as in the following example: `http://MY-SERVER/api/2.3/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks?**filter=tags:eq:stocks**` This filter finds workbooks in which at least one of the tags is `stocks`. (The workbooks returned by this filter might have other tags as well.) You can also search for workbooks if they have any one of a list of tags—that is, you can create an OR search. To do this, use the `in` operator and provide a list of tags to search for, as in the following example: `http://MY-SERVER/api/2.3/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks?**filter=tags:in:[stocks,market]**` This filter finds workbooks that either have a tag `stocks` or a tag `market` (no matter what other tags the workbooks might have). ## Sorting To sort the results, include the `sort` parameter. The syntax is this: `sort=field:direction` You can sort on the same fields that you use to filter. The `direction` value is `asc` (ascending) or `desc` (descending), and is required. You can specify multiple levels of sorting by including multiple sort expressions, as in this example: `sort=siteRole:asc,name:desc` This example causes the results to be sorted first by site role in ascending order, and within site role, by name in descending order. ## Combining parameters You can combine filter, sort, and paging operators in the same call, separating them with `&`. The following example shows how you can combine a filter parameter, a sort parameter, and a paging parameter. `http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users?filter=lastLogin:gte:2016-02-01T00:00:00Z&sort=siteRole:desc,name:desc&pageNumber=2` ## View filter queries When using the following methods, you can use a filter expression in your request query parameters to modify the view data returned. The expression uses fields in the underlying workbook data to define the filter. - [Download View Crosstab Excel](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#download_view_excel) - [Get Custom View PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_custom_view_pdf) - [Get Custom View Data](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_custom_view_data) - [Download Workbook PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#download_workbook_pdf) - [Query View Data](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_data) - [Query View Image](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_image) - [Query View PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_pdf) ### View filtering basics Fields in a view filter expression can be measures or dimensions of your view data. To filter a view using a field, add one or more query parameters to your method call, structured as key=value pairs, prefaced by the constant `vf_`. The basic pattern of a view filter expression looks like: `**?vf_**{field-key-name}**=**{field-value}` Wild cards, value ranges, and non-equivalencies, like contains, less than, or greater than, aren’t supported. A field key name and field value must exactly match the measure or dimension names and values they express. For example, you could filter a view from a workbook with a **year** field that only displays data from the year **2017** using the following filter: `?vf_year=2017` Field key names and values that contain spaces or other special characters should be URL encoded. For instance, the key name **Product type** used in a view filter query would be: `?vf_Product**%20**type=widget`. ### Filtering for multiple fields and values When you want to filter for more than one key, or for more than one value of a key, keep these things in mind: - A view filter expression can contain more than one key by appending keys to the query string with an ampersand (&). The expression `?vf_year=2017&vf_region=west` would return data for the year 2017 in the west region, for a workbook that used a **region** field for which **west** was a valid value. - A key in a view filter expression can have more than one value by adding values as a comma-separated list. The expression `?vf_year=2017,2018` would return data for the years 2017 and 2018. - If there’s more than one key, then the values of each key are linked positionally. The expression `?vf_year=2017,2018&vf_region=west,east` filters the response to data for the year 2017 in the west region, and the year 2018 in the east region. The first value of the first key impacts the meaning of the first value of the second key. The second value of the first key impacts the second value of the second key. The same relationship would be true of any further keys/values added to the query. - All keys in the query must have the same number of values. The expression `?vf_year=2017,2018&vf_region=west,west` would return 2017 and 2018 values for the west region. The expression `?vf_year=2017,2017,2018,2018&vf_region=east,west,east,west` would return data for the years 2017 and 2018 for both east and west regions. ### Date and time in view filter queries Dates and times in a view filter query are formatted using the pattern: `yyyy-mm-dd hh:mm:ss` Time can be omitted but, if included, the format has a built-in space character that must be URL encoded, as in the following example: `?vf_datetime=2022-03-31**%20**022:08:58` ### Filtering on fields not in the original view Your view filter expression can include fields that don’t impact the original view you’re querying. For instance, the data for a workbook could include a dimension called **Product Type**, with the valid value **widget**, that isn’t used to form the year and region view specified in your request. If you include that dimension as a field in your filter expression, then the results would be filtered in a way that the original view wasn’t. For instance, consider a view that originally shows all products because it doesn’t use **Product type** to filter its content in any way. A request for that view that used the expression `?vf_Product%20type=widget` in its query string would return data only for widgets, not all product types. **Note:** Use care when filtering on fields not in the original view as the result could be misleading. For instance, if the original view has the label: “All products, all years”, then a downloaded image of the view using this example query would show data that didn’t match that label. [Skip to main content](#main-content) # Flow Methods Using the flow methods of the Tableau Server REST API you can do the operations listed in the following categories: **Flows** (sets of data preparation steps for a site) - Get a list of flows for a site or the users and details of a specific flow - Get a list of flow runs for a site - Run a specific flow with all or a specified set of output steps - Run a specific flow with [parameter values](https://help.tableau.com/current/prep/en-us/prep_parameters.htm#run-flows-with-parameters) - Cancel a specific flow run - Publish, update, delete and download a flow - Download an encrypted keychain for a flow that is migrating to another site. - Upload an encrypted keychain for a flow migrated to another site. **Flow Tasks** (scheduled or manually initiated tasks that perform flows for a site) - Get a list of flow tasks for a site and details of a specific flow task - Run a flow task - Add a flow task to a schedule - Add a flow task to a schedule with [parameter values](https://help.tableau.com/current/prep/en-us/prep_parameters.htm#run-flows-with-parameters) - Get a list of linked tasks for a site and details of a specific linked task - Run a linked task **Flow Connections** (connections to data sources of a flow) - Get and update the connection information for a flow task **Flow Permissions** (user permissions to initiate a flow) - List, grant, and remove granular permissions of a user to a flow This functionality relates to the UI elements and concepts described at: [Tableau Prep Conductor](https://help.tableau.com/current/server/en-us/prep_publishserver_overview.htm). ## 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: Flows](https://www.postman.com/salesforce-developers/salesforce-developers/folder/r21suuf/flows) ## Add Flow Permissions Adds permissions to the specified flow for a Tableau Server user or group. You can specify multiple sets of permissions using one call. #### URI PUT /api/api-version/sites/site-id/flows/flow-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
datasource-idThe ID of the flow.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
flow-id The flow-id value for the flow you want to add permissions to.
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name The capability to assign. If any capability has already been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a flow are:
  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • Execute
  • ExportXml (Download)
  • Read (view)
  • WebAuthoringForFlows
  • Write

For more information, see Permissions.

#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have permission to set permissions on the flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:permissions: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 ```                                                                                                                                                                                                             ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe capability in the URI is invalid for a flow. Valid capabilities for a flow are ChangeHierarchy, ChangePermissions, Delete, Execute, ExportXml (Download), Read (view), and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the flow.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundA user ID in the request body doesn't correspond to an existing user.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Flow Task to Server Schedule > > [!WARNING] > > > > The Add Flow Task to Schedule method is renamed and retired for Tableau Cloud in API 3.22 (Tableau Cloud March 2024). It will remain available for Tableau Server only. For Tableau Cloud in March 2024, this method will be replaced with [Create Cloud Flow Task](#create_cloud_flow_task) method. Adds a task to run a flow to an existing schedule. **Note:** This method is unavailable if you do not have a Data Management license or Tableau Prep Conductor is disabled for your site. #### URI PUT /api/api-version/sites/site-id/schedules/schedule-id/flows #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
schedule-idThe ID of the schedule that you are associating with the flow. The schedule that you are adding to must have Flow as the schedule type.
#### Request Body ``` ``` #### Attribute Values
flow-id

The ID of the flow to add to the schedule. This will include all the output steps in the flow and any output steps created in the future.

parameter-id

The ID of the flow parameter. Use the Flow Methods method to get the flow parameter ID. A parameter is a global placeholder value such as a number, text value, or boolean value that can replace a constant value in a flow.

Note: Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.

For more information, see Run flows with parameters.

overrideValue

The run-time value for the flow parameter. You must specify this if the parameter is required. Use the Flow Methods method to see if the parameter is required and to get a list of allowed values if the parameter is expecting a value from an enumerated list.

Note: Parameters are options and only relevant for flows that contains parameters and the parameter setting is enabled.

For more information, see Run flows with parameters.

#### Permissions Tableau Server users who are not server administrators or site administrators can only add a flow to a schedule if they own the flow, or are the project leader for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400148Invalid parameter override valueThe run-time value provided for the flow parameter is invalid.
400400149Missing run-time parameter value.The run-time value for a required flow parameters was not provided.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403098Update ForbiddenA non-administrator user called this method, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404043Flow parameter not foundThe flow parameter information was not provided.
404404002User not foundA user ID in the request body doesn't correspond to an existing user.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/flows" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @add-to-schedule.xml"` **Content of add-to-schedule.xml:** The in the request body is optional and only required in the following scenarios: - The flow has parameters and the parameter is marked as required to run the flow. - The flow has parameters but not marked as required. However, you want to specify a different value than the configured default. ``` parameterId="a2fb691b-90fa-4b6e-850e-f16c5afc1f89" overrideValue= "2"/>
``` ## Cancel Flow Run Cancels a flow run that is in progress. #### URI PUT /api/api-version/sites/site-id/flows/runs/flow-run-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-run-idThe ID of the flow run.
#### Request Body None #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_runs: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 None #### Version Version 3.10 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403135Flow run already completeThe flow run is already complete so it could not be canceled.
403403137User does not have permissions to cancel flow runIn addition to server administrators and site administrators, users can cancel a flow run if they initiated the flow run or created the flow run scheduled task and have "Run Flow Now" permissions for the flow.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404036Flow run not foundThe flow run ID in the URI doesn't correspond to an existing flow run.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Cloud Flow Task Creates a flow task on Tableau Cloud, and set its schedule. **Note:** This method is unavailable if you do not have a Data Management license or Tableau Prep Conductor is disabled for your site. **Version:** Available in API 3.22 (Tableau Cloud April 2024) 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:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** A user can create a cloud flow task if you are a site or server administrator, or they own the flow, or are the project leader for the project that contains the workbook.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** Not available. #### URI POST /api/api-version/sites/site-luid/tasks/flows #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "task": { "flowRun": { "flow": { "id": "dd3cd2e7-2ede-49c6-945f-e7b2a2f25541" } } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "12:30:00", "end": "23:30:00", "intervals": { "interval: [ { "hours": "4" }, { "weekDay": "Monday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Request Attributes
flow.id(Required)The LUID of the flow the task is being scheduled for.
schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### 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 ``` ``` ``` { "task": { "flowRun": { "id": "4d49655a-0f3a-45cc-ba61-b108a763e83a", "priority": "50", "consecutiveFailedCount": "0", "type": "RunFlowTask", "schedule": { "id": "1060dcb7-fef7-4fb1-8d3b-d0f042932d1a", "name": "SSS_e95a9d25-c616-4542-87b6-3725975bdfbd", "state": "Active", "priority": "50", "createdAt": "2024-04-09T18:54:12Z", "updatedAt": "2024-04-09T18:54:12Z", "type": "Flow", "frequency": "Daily", "nextRunAt": "2024-04-10T19:30:00Z" }, "flow": { "id": "dd3cd2e7-2ede-49c6-945f-e7b2a2f25541", "name": "olympic 1", "parameters": { "parameter": { "id": "4f22c514-5b56-4400-a48a-f69d9be217a9", "type": "integer", "name": "output_count", "description": "This is a parameter of a flow.", "value": "2", "isRequired": "true", "domain": { "xsi_type": "flowParameterAnyDomainType", "domainType": "all" } } } }, "flowRunSpec": { "flowId": "dd3cd2e7-2ede-49c6-945f-e7b2a2f25541", "flowOutputSteps": { "flowOutputStep": { "id": "485c8b5f-5647-466c-b549-e38410b7c7c8", "name": "Output" } }, "flowParameterSpecs": [] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Flow Deletes a flow. When a flow is deleted, its associated connections, the output and input steps, any associated scheduled tasks, and run history are also deleted. #### URI DELETE /api/api-version/sites/site-id/flows/flow-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to delete.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a flow for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user called this method but doesn't have Read (view) and Delete permission for the flow.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Flow Permission Deletes the specified permission from the specified flow for a group or user. #### URI DELETE /api/api-version/sites/site-id/flows/flow-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/flows/flow-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the flow.
flow-id The ID of the flow to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name The capability to remove the permission for. Valid capabilities for a flow are:
  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • Execute
  • ExportXml (Download)
  • Read (view)
  • WebAuthoringForFlows
  • Write

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete permissions from a flow only if they have ChangePermissions permission for flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:permissions: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 #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a flow. Valid capabilities for a flow are ChangeHierarchy, ChangePermissions, Delete, Execute, ExportXml (Download), Read (view), and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the flow.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not foundThe capability in the URI doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allowor Denyat the end of the URI.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allowor Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Flow Downloads a flow in .tfl or .tflx format. #### URI GET /api/api-version/sites/site-id/flows/flow-id/content #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to download.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can download a flow only if they have download permission for the flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows:download ``` 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 None #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403097Read forbiddenA non-administrator user attempted to download a flow, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/flows/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/content" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" >` **Response:** The response is a file that contains the flow. ## Download Flow Encrypted Keychain Gets an encrypted version of the embedded credentials in a flow. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server. **Version**: Available in API 3.25 (Tableau Cloud February 2025 / Tableau Server 2025.1) and later. **License**: No additional license required. **Permissions**: This method can only be called by Tableau Cloud site and Tableau Server administrators. **Access Scope**: tableau:embedded\_credentials:download - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/flows/flow-luid/retrieveKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
flow-luidThe LUID of the flow to download the encrypted keychain from.
#### Request Body ``` site1 d56023b5-8f8b-4241-aa74-8974ced85827 http://localhost ``` ``` { "destinationSiteUrlNamespace": "site1", "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827", "destinationServerUrl": "http://localhost" } ``` #### Request Attributes
destinationSiteUrlNamespace

(Required) The site name on the destination site.

destinationSiteLuid (Required)  The site LUID of the destination site.
destinationServerUrl

(Required) The destination Tableau Server or Tableau Cloud URL.

#### cURL Request Example ``` curl --location "https://myserver/api/3.25/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/flows/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/retrievekeychain" -X POST --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data "site1 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4dhttp://localhost" ``` #### Response Code 200 #### Response Body ``` BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidList": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site LUID in the URI doesn't correspond to an existing site.
404 404004 Flow not found The flow LUID in the URI doesn't correspond to an existing flow.
405 405000 Invalid request method Request type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Flow Run Gets a flow run. #### URI GET /api/api-version/sites/site-id/flows/runs/flow-run-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-run-idThe ID of the flow run.
#### Request Body None #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_runs: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 ``` ``` The status attribute can be: Pending, InProgress, Success, Cancelled, or Failed. #### Version Version 3.10 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Get forbiddenUser does not have permissions to get the flow run. A user can view a flow run if they have permission to view the flow.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404036Flow run not foundThe flow run ID in the URI doesn't correspond to an existing flow run.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Flow Runs Get flow runs. #### URI GET /api/api-version/sites/site-id/flows/runs GET /api/api-version/sites/site-id/flows/runs?filter=filter-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
filter-expression(Optional) An expression that lets you specify a subset to return. You can filter on predefined fields such as the userId of the user who started the flow run, flowId, progress, startedAt, and completedAt. You can include multiple filter expressions. For more information, see Filtering and Sorting.
#### Request Body None #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_runs: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 ``` ... additional flow runs.... ``` The status attribute can be: Pending, InProgress, Success, Cancelled, or Failed. #### Version Version 3.10 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Get forbiddenUser does not have permissions to get the flow run.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the filter doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Flow Run Task Returns information about the specified flow run task. This method shows you information about the scheduled task for the flow. #### URI GET /api/api-version/sites/site-id/tasks/runFlow/task-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the scheduled flow run task that you want information about.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of scheduled flow run tasks that they own. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_tasks: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 ``` ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Operation unauthorizedThe user is not authorized to get the task.
404404026Task not foundThe task ID in the URI doesn't correspond to an existing task.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/runFlow/1bff10bb-57ae-43df-8774-a86d14aef432" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ## Get Flow Run Tasks Returns a list of scheduled flow tasks for the site. #### URI GET /api/api-version/sites/site-id/tasks/runFlow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of scheduled flow tasks for the flows that they own. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_tasks: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 ``` ... additional tasks ... ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/runFlow" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Linked Task Returns information about a specific linked task. This method shows you information about the scheduled linked task #### URI GET /api/api-version/sites/site-id/tasks/linked/linked-task-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
linked-task-idThe ID of the scheduled linked task that you want information about.
#### Request Body None #### Permissions All Tableau users can view linked tasks information, but can only see information about the flows in the response body if they have permissions to flows included in the linked task. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:linked_tasks: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 ` ...additional linked tasks steps... ...additional linked tasks steps... ` #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Operation unauthorizedThe user is not authorized to get the task.
404404045Linked task not foundThe task ID in the URI doesn't correspond to an existing linked task.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/linked/1bff10bd-57ae-37df-8774-a86d14aef432" -X GET -H "X-Tableau-Auth:12ab34cd56ef98ab90ce12ef34ab52cd"` **Example response:** ## Get Linked Tasks Returns a list of scheduled linked tasks for a site. #### URI GET /api/api-version/sites/site-id/tasks/linked #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
#### Request Body None #### Permissions All Tableau users can view linked tasks information, but can only see information about the flows in the response body if they have permissions to flows included in the linked task. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:linked_tasks: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 ``` ...additional linked tasks steps... ...additional linked tasks steps... ... additional linked tasks ... ``` #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400154Generic query linked task errorCould not get a list of linked tasks for some reason other than the ones specified below.
403403155Linked tasks disabledLinked tasks has been disabled for your site or server.
403403004Operation unauthorizedYou do not have permissions to see the list of linked tasks
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Example `curl "http://MY-SERVER/api/3.29/sites/9a6b7c6d-5e4f-4a2b-1c0d-9e8f7s6b5c4d/tasks/linked" -X GET -H "X-Tableau-Auth:12ab34cd56ef98ab90ce12ef34ab52cd"` **Example response:** ``` ``` ## Publish Flow Publishes a flow on the specified site. To make other changes to a published flow, call [Update Flow](#update_flow) or [Update Flow Connection](#update_flow_connection). **Version**: Available in API 3.3 and later. **License**: No additional license required. **Permissions**: Users who are not server administrators or site administrators can publish a flow only if the flow belongs to a project that they have permissions to publish to, have a site role that allows publishing and have write permissions on the flow if overwriting. **Access Scope**: `tableau:flows:create` - Scope added in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). You can publish a flow in a single request or in multiple parts. To publish a flow in a single request you include the content of the workbook file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. To publish a flow in multiple parts, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload), and then commit the upload by calling Publish Flow. In this case, Publish Flow doesn't contain the file to publish but the `uploadSessionId` and the `flowType` parameters are required. #### URI POST /api/api-version/sites/site-id/flows POST /api/api-version/sites/site-id/flows?overwrite=overwrite-flag POST /api/api-version/sites/site-id/flows?overwrite=overwrite-flag&uploadSessionId=upload-session-id&flowType=flow-file-type #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to publish to.
overwrite-flag(Optional) true to overwrite a flow that has the same name, or false to fail if the specified flow already exists. The default is false. If overwrite-flag is set to true but the flow doesn't already exist, the operation succeeds.
upload-session-idIf you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
flow-file-typetfl or tflx to indicate whether you have uploaded a flow file (tfl) or a packaged flow file (tflx). This value is only necessary and required if you upload a file in multiple parts. In the Publish Flow call after completing file upload, specify the file type.
#### Publishing a file in the Request Body ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_flow"; filename="flow-file-name" Content-Type: application/octet-stream content-of-flow-file --boundary-string-- ``` #### Attribute Values
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

name The name to assign to the flow when it is saved on the server.
description The description of the flow.
server-address Specify the server address for an input connections.
port-number Specify the port number for input connections.
connection-username (Optional) If the flow input connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection username. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

connection-password (Optional) If the flow input connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection password. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

embed-flag (Optional) If the flow input connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials.
oauth-flag

(Optional) If the flow input connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the connectionCredentials element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the data source.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

project-id The ID of the project to assign the flow to.
content-of-flow-file The file itself if you are including it in the request body.
#### Response Code 201 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Malformed request bodyThe XML content in the MIME multipart request is not empty.
400400089Missing flow nameFlow name is required and was not specified.
403403007Invalid permissionsThe caller does not have the necessary permissions to publish the flow. 
400400090Missing flow payloadThe flow information (the structure containing the flow description, flow project) was not included in the request body.
400400086Invalid flow attachmentThe name of the flow doesn't end in .tfl or .tflx.
400400087Generic flow publishing errorThe flow could not be published for some other reason than those specified earlier.
409409041Flow already found in destinationThe flow name should be unique, or the overwrite flag parameter should be set to true.
403403008Insufficient storage quotaThe flow could not be published because there is not enough storage remaining on the server to accommodate its size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Flow Returns information about the specified flow, including information about the project, owner, and output steps. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/flows/flow-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to return information about.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can query a flow only if they have Read(view) permission for the flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 ``` ...additional output steps... ...additional parameters... ``` **Note:** Parameters is only shown in the response if parameters are enabled on the site and the flow contains parameters. #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA non-administrator user attempted to query the flow, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not GET.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/flows/ d00700fe-28a0-4ece-a7af-5543ddf38a82" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Flows for a Site Returns the flows on a site. If the user is not an administrator, the method returns just the flows that the user has permissions to view. #### URI GET /api/api-version/sites/site-id/flows GET /api/api-version/sites/site-id/flows?filter=filter-expression GET /api/api-version/sites/site-id/flows?sort=sort-expression GET /api/api-version/sites/site-id/flows?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flows.
filter-expression(Optional) An expression that lets you specify a subset of flows to return. You can filter on predefined fields such as name, tags, and createdAt. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which flow information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters using an ampersand (**`&`**). #### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can get flows that they have Read (view) permissions for (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 ``` ... additional flows ... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403101Read forbiddenA non-administrator user attempted to query flows for the site, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/9954070a-581d-40fa-ae73-e815ce8b0562/flows" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ## Query Flows for User Returns the flows that the specified user owns in addition to those that the user has Read (view) permissions for. **Note:** After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/users/user-id/flows GET /api/api-version/sites/site-id/users/user-id/flows?ownedBy=isOwner&pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to get flows for.
isOwner(Optional) trueto return only flows that the specified user owns, or falseto return all flows that the specified user has at least read access to. The default is false.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions All users can call this method, but the results of the call depend on the user's permissions. Server and site administrators see all flows for the specified user. If the isOwnerparameter is true, users who are not server or site administrators see the flows that they own on the site. If isOwnerparameter is false, users who are not server administrators see the flows that they have Read (view) permissions for. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 ``` ... additional flows... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for flows at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size exceeds upper limitThe page size parameter exceeds the system-wide upper limit of 1000.
403403101Read forbiddenA non-administrator user attempted to query flows for the user, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/flows" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Flow Connections Returns a list of data connections for the specific flow. #### URI GET /api/api-version/sites/site-id/flows/flow-id/connections #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to return connection information about.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can query a flow only if they have Read(view) permission for the flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_connections: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 ``` ... additional connections ... ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403092Read forbiddenA user who is not a server administrator user attempted to query the flow connections, but the caller doesn't have Readpermission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/flows/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List Flow Permissions Returns a list of permissions for the specific flow. #### URI GET /api/api-version/sites/site-id/flows/flow-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to get permissions for.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:permissions: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 ``` ... additional capabilities ... ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_project) or for an existing project by calling [Update Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/flows/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Run Flow Now Runs the specified flow. This method runs the specified flow with all the output steps if none are specified. If you want to run only a subset of output steps, you can specify one or more output steps using the output-ids by using the [Flow Methods](#Query). The Run Flow Now method is the equivalent of selecting a flow using the Tableau Server UI, and then selecting **Run Now** from the menu. A flow task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a flow task will often fail if the task has been put in the task queue in any of these ways, or is already in progress. Running the flow for a suspended task using Run Flow Now will resume the task job. **Note:** - This method is unavailable if you don't have Data Management. For more information, see [Tableau Prep Conductor](https://help.tableau.com/current/online/en-us/dm_overview.htm#tableau-prep-conductor). - This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). #### URI POST /api/api-version/sites/site-id/flows/flow-id/run POST /api/api-version/sites/site-id/flows/flow-id/run?flowOutputStepIds=flow-outputstep-id&flowRunMode=flow-run-mode #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to update.
#### Request Body ``` ``` A request body with for running a flow with no parameters: ``` ``` A request body for running a flow but not specifying output step (effectively running all output steps): ``` ``` #### Attribute Values
flow-id

The ID of the flow to add to the schedule. This will include all the output steps in the flow and any output steps created in the future.

flow-outputstep-id

The ID of the output steps you want to run. This parameter is optional. If you don't specify the output steps, all the output steps in the flow will be included. You can specify one or more output steps. Use the Flow Methods method to get the list of flow-outputstep-ids.

flow-run-mode

The mode to use for running this flow, either full or incremental. This parameter is optional. If you don't specify an option the run mode will be full. The flow must be configured with incremental options on the input nodes to refresh incrementally.

parameter-id

The ID of the flow parameter. Use the Flow Methods method to get the flow parameter ID. A parameter is a global placeholder value such as a number, text value, or boolean value that can replace a constant value in a flow.

Note: Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.

For more information, see Run flows with parameters.

overrideValue

The run-time value for the flow parameter. You must specify this if the parameter is required. Use the Flow Methods method to see if the parameter is required and to get a list of allowed values if the parameter is expecting a value from an enumerated list.

Note: Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.

For more information, see Run flows with parameters.

**Note:** You must specify the flow-id value in the URI. If you are using a request body to specify the attributes, you must also include the flow-id in the request body in addition to providing it in the URI. #### Permissions In addition to the owner of a flow, Tableau server administrators, site administrators, and project leaders can run flows within their scope. Users with a creator or explorer license that have been granted permissions by an administrator, leader or owner for a flow may also run it. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows:run ``` 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 ``` ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400400132Invalid flow run modeThe specified flow run mode is not valid.
400400148Invalid parameter override valueThe run-time value specified is not valid.
400400149Parameter override value missingThe run-time value for the parameter was not specified and is required.
403403149Flow cannot be runThe flow parameter setting is disabled on the site preventing the flow run.
403403150Flow cannot be runThe flow cannot be run because flow parameters contain parameter domain type "any" but the Allow parameters that can accept any input setting is disabled on the site.
404404000Site not foundThe site ID in the URI is unknown.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
404404043Flow parameter not foundThe parameter ID specified in the request body does not match any of the existing parameters for this flow.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/flows/ d00700fe-28a0-4ece-a7af-5543ddf38a82/run?flowRunMode=incremental" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Run Flow Task Runs the specified flow run task. **Note:** \- This method is unavailable if you don't have Data Management. For more information, see [Tableau Prep Conductor](https://help.tableau.com/current/online/en-us/dm_overview.htm). \- This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). This method runs the scheduled task for the flow. You must first schedule the task for the flow. You can do this using the [Create Schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_schedule) method to create the task. The Run Flow task requires you to provide a task id. To get the task-id, use the Get Flow Run Tasks method, which returns the flowRun ID. The value of the flowRun ID is what you use as the task-id. The method adds the flow run task to the backgrounder queue. Depending upon the backgrounder load, the task might not run immediately. The method returns information about the backgrounder job responsible for running the flow run task, including a job id that can be used with the [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_job) method to query the status of the flow run. A flow task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a flow task will often fail if the task has been put in the task queue in any of these ways, or is already in progress. If your request results in an error code `403102`, it means that there is already a scheduled task for this within a very close time period (seconds). In this case, if the task is currently in a suspended state, it will resume. #### URI POST /api/api-version/sites/site-id/tasks/runFlow/task-id/runNow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the flow run task that you want to run.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only run the flow run tasks that they own. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_tasks:run ``` 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 ``` ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400084Flow run task errorThe task specified is not a flow run task.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/runFlow/9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c/runNow" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Run Linked Task Now Runs the specified linked task. This method runs the specified linked task with all the steps. Depending on the setting that the task was created with, the linked task will stop at a step on failure or continue to the next step. For more information, see [schedule linked tasks](https://help.tableau.com/current/server/en-us/prep_conductor_schedule_flow_task.htm#schedule-linked-tasks). **Version**: Available in API 3.15 and later. **License**: Data Management required. For more information, see [Tableau Prep Conductor](https://help.tableau.com/current/online/en-us/dm_overview.htm). - The **RunNow** setting for the site must be enabled by a site administrator for run linked tasks requests to succeed. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). **Permissions**: Tableau server administrators, site administrators, and project leaders can run linked tasks within their scope. Tableau users can run a linked task if they own the task or have permissions to run all the flows included in the linked task. **Access Scope**: `tableau:linked_tasks:run` - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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-id/tasks/linked/linked-task-id/runNow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
linked-task-idThe ID of the linked task to run.
#### Request Body none #### cURL Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/tasks/linked/d00700fe-28a0-4ece-a7af-5543ddf38a82/runNow -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body ``` . ``` ``` { "linkedTaskJob": { "id": "765dfdfc-26ec-47ea-b53b-54419c8f6b61", "linkedTaskId": "cde24429-6217-48e5-8ff5-f5dcd6a7006b", "status": "InProgress", "createdAt": "2022-02-15T00:22:22Z" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400153Generic errorUnable to run the linked task for some reason other than the ones specified below.
403403155Linked task cannot be runThe linked task setting is disabled on the site.
404404045Linked task not foundThe linked task ID in the URI doesn't correspond to an existing linked task.
405405000Invalid request methodRequest type was not POST.
409409082Run now forbiddenRun now setting has been disabled.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Flow Updates the project and/or owner of the specified flow. To change the flow owner with fewer limitations on who the new owner can be, use the [Update Flow Owner](#update_flow_owner) method instead. #### URI PUT /api/api-version/sites/site-id/flows/flow-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to update.
#### Request Body #### Attribute Values
new-project-id(Optional) The ID of a project to add the flow to.
new-owner-id(Optional) The ID of a user to assign the flow to as owner. The new owner must be the user calling this method.
Any combination of the attributes inside the **** element is valid. Only the attributes and child elements that are included result in updates to the flow. If no attributes or nested elements are included, no update is made. If the **** element is included, the **id** attribute must be included, and any other attributes of the **** element are ignored. If the **** element is included, the **id** attribute must be included, and any other attributes of the owner are ignored. #### Permissions Tableau Server users who are server administrators or site administrators can change the owner for a flow. Users who are not server administrators can move a flow from one project to another if they own the flow or the current (source) project, or are a project leader for the current project, and they have Write permission for the destination project. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 ``` ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403098Owner update forbiddenA non-administrator user tried to change the owner for the flow.
403403030Project update forbiddenA non-administrator user tried to change the project for the flow, but the caller doesn't have Write permission for the project. 
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002Owner not foundThe owner ID in the request body doesn't correspond to an existing owner. 
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project. 
409409041Flow name conflictThe flow name in the request already belongs to the specified site. For the purpose of uniqueness checks, flow names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example **Example response:** ``` ``` ## Update Flow Connection Updates the server address, port, username, or password for the specified flow connection. The connection can be an input or an output connection. #### URI PUT /api/api-version/sites/site-id/flows/flow-id/connections/connection-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to update.
connection-idThe ID of the connection to update. To determine what connections are available for a flow, call Query Flow.
#### Request Body ``` ``` #### Attribute Values Any combination of the attributes inside the **** element is valid. You will need to provide at least one attribute. If no attributes are included, this will result in an error.
serverAddress The new server for the connection.
port The new port for the connection.
userName The new username for the connection.
password The new password for the connection.
embedPassword true to embed the password; otherwise, false.
authenticationType Added in API 3.28.

The new authentication type for the connection.

Standard values:

  • Username Password: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a flow that is currently using the target authentication type, you can query for it using the REST API method Workbooks and Views Methods, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a flow, which is available locally. Look for the value of the authentication attribute of the connection.

#### Permissions Only Tableau Server users who are server administrators or Tableau Cloud site administrators can change the connection for a flow. Users who are not server administrators can update a flow only if they have Write(save) permission for the flow and if they have **Write** permission for the project. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_connections: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 ``` ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403103Update forbiddenA non-administrator user tried to update a flow, but the caller doesn't have Write permission.
403403098Owner update forbiddenA non-administrator user tried to change connection information for the flow, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Flow Connections Updates the server address, port, username, or password for one or more flow connections. The connection can be an input or an output connection. **Version**: Available in API 3.28 (Tableau Cloud April 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Only users who are Tableau Server administrators or Tableau Cloud site administrators can change the connection for a flow. Users who are not Tableau Server administrators or Tableau Cloud site administrators can update a flow only if they have Write(save) permission for the flow and if they have **Write** permission for the project. **Access Scope**: `tableau:flow_connections:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/flows/flow-id/connections #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to update.
#### Request Body ``` ``` ``` { "connections": { "connection": [ { "id": "f63809db-abe9-454c-96dc-0f2f1b065a55", "serverAddress": "myco.com", "serverPort": "1234" }, { "id": "7bc5d700-bbc9-4ec3-9225-121f2846b5e7", "userName": "snguyen", "embedPassword": "false" } ] } } ``` #### Attribute Values Any combination of the attributes inside the **** element is valid. You will need to provide at least one attribute. If no attributes are included, this will result in an error.
id The ID of the flow connection to update.
serverAddress The new server for the connection.
port The new port for the connection.
userName The new username for the connection.
password The new password for the connection.
embedPassword true to embed the password; otherwise, false.
authenticationType

The new authentication type for the connection.

Standard values:

  • Username Password: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a flow that is currently using the target authentication type, you can query for it using the REST API method Workbooks and Views Methods, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a flow, which is available locally. Look for the value of the authentication attribute of the connection.

#### cURL Request Example ``` curl "https://MY-SERVER/api/api-version/sites/site-id/flows/flow-id/connections" -X PUT -H "X-Tableau-Auth: auth-token" -H "Content-Type: application/xml" -d '' ``` #### Response Code 200 #### Response Body ``` ``` ``` { "connection": [ { "id": "f63809db-abe9-454c-96dc-0f2f1b065a55", "useOAuthManagedKeychain": "false", "embedPassword": "true", "serverAddress": "myco.com", "serverPort": "1234", "userName": "snguyen" }, { "id": "7bc5d700-bbc9-4ec3-9225-121f2846b5e7", "useOAuthManagedKeychain": "false", "embedPassword": "false", "serverAddress": "myco.com", "userName": "snguyen" } ] } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403103Update forbiddenA non-administrator user tried to update a flow, but the caller doesn't have Write permission.
403403098Owner update forbiddenA non-administrator user tried to change connection information for the flow, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Flow Owner Updates a flow's owner. If the same user owns all the flows in a linked task, this method also changes the ownership of the linked task to that user. This method overlaps in function with [Update Flow](#update_flow) method, but has fewer limitations on who the new owner can be. If you're changing the owner of a flow, Tableau recommends you use this method. **Version**: Available in API 3.27 (Tableau Cloud December 2025 / Server 2025.3) and later. **License**: Data Management or Tableau+. **Permissions**: Server administrators, site administrators, or flow owner **Access Scope**: `tableau:flows:update` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/flows/flow-id/owner/user-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow.
user-idThe ID of the user.
#### Request Body None #### cURL Request Example ``` curl -X PUT "https://MY-SERVER/api/3.27/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/flows/08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6/owner/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -H "Content-Type: application/xml" -H "X-Tableau-Auth: a1B2c3D4e5F6g7H8i9J0kL|a1B2c3D4e5F6g7H8i9J0kL1m2N3o4P5q|12345678-90ab-4cde-8f01-234567890abc" ``` #### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
403403184Ownership changes are disabledOn Tableau Server, a machine administrator can use TSM to to enable or disable content ownership changes. For more information, see wgserver.change_owner.enabled in tsm configuration set Options
403403187Permission deniedYou must be a site administrator, a server administrator, or the flow owner to change the ownership of a flow.
404404061Resource not foundThe flow id and/or user id can't be found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Upload Flow Encrypted Keychain Uploads the encrypted version of the embedded credentials of a flow. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site. **Version**: Available in API 3.25 (Tableau Cloud February 2025 / Tableau Server 2025.1) and later. **License**: No additional license required. **Permissions**: This method can only be called by Tableau Cloud site and Tableau Server administrators. **Access Scope**: tableau:embedded\_credentials:upload - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-luid/flows/flow-luid/applyKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
flow-luidThe LUID of the flow to upload the encrypted keychain from.
#### Request Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= 2BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "tsRequest": { "associatedUserLuidMapping": { "userLuidPair": { "sourceSiteUserLuid": "9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d", "destinationSiteUserLuid": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" } }, "encryptedKeychainList": [ "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=", "2BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" ] } } ``` #### Request Attributes
associatedUserLuidMapping (Required) The user IDs from the source site mapped to destination site user IDs.
userLuidPair (Required) The user IDs needed to map source site flow owner to destination site flow owner.
sourceSiteUserLuid

(Required) The user ID of the flow owner from the source site; an attribute of the associatedUserLuidMapping element.

destinationSiteUserLuid (Required) The user ID of the flow owner on the destination site; an attribute of the associatedUserLuidMapping element.
encryptedKeychainList (Required) List of encrypted keychains from the source Tableau Server.
encryptedKeychain

(Required) Encrypted keychain from the source Tableau Server. You can get this value by calling the Download Flow Encrypted Keychain method.

#### cURL Request Example ``` curl --location "https://myserver/api/3.25/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/flows/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/applyKeychain" -X PUT --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=2BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" ``` #### Response Code 200 #### Response Body None #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404004 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Fundamentals of the Tableau Server REST API Tableau Server provides an application programming interface (API) that lets you programmatically manage users, workbooks, data connections, and other resources on the server. By using the API, you can create users or import them from Active Directory, publish workbooks, create, view, and delete data sources, and perform other actions on the server. Using the API, you can perform many of the tasks that you can do using [tabcmd](https://help.tableau.com/current/server/en-us/help.htm#tabcmd.htm). However, the REST API methods provide more granular control over your interaction with the server. You can think of them as a set of programmatic blocks that you can use to put together complex operations that chain the output of one operation to the input of the next one, and that might involve conditions and other scenarios that are best addressed in programming logic. ## About the REST API The Tableau Server REST API is based on the principles of REST (representational state transfer) protocol for client-server communication. In Tableau Server, the client-server communication occurs over HTTP, using standard web requests. In REST, resources are identified in a consistent way using a URI (uniform resource identifier). Actions are expressed using standard verbs like GET and POST. The client passes all necessary information to the server for each action—that is, the server does not have to maintain any state about the client. For more information about REST principles and architecture, see [A Brief Introduction to REST](http://www.infoq.com/articles/rest-introduction). **Note:** As a security measure, you should make API calls to Tableau Server using the HTTPS protocol (SSL/TLS). See [Using HTTPS (SSL/TLS) for API Calls](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_SSL.htm). ## Using HTTP Verbs to Request Server Actions When you work with the Tableau Server REST API, you use the following HTTP verbs to request actions from the server: - GET to read information, such as getting a list of users or downloading a workbook. - POST to create or publish new resources, such as sites, users, workbooks, and data sources. - PUT to update existing resources, such as updating a user’s password, updating permissions, or changing a workbook owner. - DELETE to remove a resource, such as deleting a user, or workbook. This verb can also dissociate a resource from a collection—for example, you can use the DELETE verb to remove a user from a site, which dissociates the user from collection of users on the site, but doesn't remove the user from the server. ## Using URIs to Specify Resources The HTTP verb indicates the type of operation you want to perform on a resource. You indicate what resource to work with by making requests using a URI. The URI specifies the site, project, workbook, user, or other resource that you are creating, viewing, or deleting. For example, to get a list of the users in a specific group, you send a GET request that has the following format: ``` https://your-server/api/3.29/sites/site-id/groups/group-id/users ``` In this URI, _your-server_ is the name or IP address for your Tableau Server installation. The _site-id_ value is an identifier for the site, and _group-id_ is an ID for the group. If you want to use the REST API with Tableau Cloud, see [Specifying Resources on Tableau Cloud](#tableau-online-uris). **Note**: IDs for the site, groups, and other resources consist of locally unique IDs (LUIDs) that contain 16 hexadecimal values in the following format: `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d`. For more information, see [Identifying Resources Using Locally Unique Identifiers (LUIDs)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_luid.htm). In the previous example, you used a GET request because you were reading resources from the server. To delete a workbook, you would send a DELETE request that has this form: ``` https://your-server/api/3.29/sites/site-id/workbooks/workbook-id ``` As in the previous example, you substitute your own values for _your-server_ and _site-id_. In this case, for _workbook-id_, you would include the unique identifier for the workbook you want to delete. The URI specifies a hierarchy for the resource. To get users in a group, you use a URI that includes sites and the site ID, and then groups and the group within that site, and finally users to indicate that you want users from the specified group. In the URI for deleting a workbook, you specify sites plus the site ID, then workbooks plus the ID of the workbook to delete. You reference other resources in a similar way. The following URI specifies an individual project on the site: ``` https://your-server/api/3.29/sites/site-id/projects/project-id ``` This example URI specifies an individual data source on the site: ``` http://your-server/api/3.29/sites/site-id/datasources/datasource-id ``` And this URI references the preview image for an individual view within a specific workbook on the site: ``` https://your-server/api/3.29/sites/site-id/workbooks/workbook-id/views/view-id/previewImage ``` Notice in these examples that the URI itself does not contain information about the operation to perform—for example, when you want to delete a workbook, there’s nothing in the URI that includes a term like “delete” or “remove.” The action is specified only by the HTTP verb that you use when you make the request (DELETE); the URI indicates only the resource on which the action should take place. ### Specifying Resources on Tableau Cloud For scalability and reliability, the Tableau Cloud infrastructure extends over multiple server instances. In this environment, each site is assigned to a distinct instance (or pod). When you sign in using online.tableau.com, the site redirects you to the instance where your site resides. You will see the redirect reflected in the URL shown in the browser’s address bar. For example, instead of online.tableau.com, it might show the following address: https://10ay.online.tableau.com When you make REST API calls to Tableau Cloud, rather than using online.tableau.com, you need to use the URL for the instance on which your site exists. The following URI specifies an individual project on a site on the 10ay instance: `https://10ay.online.tableau.com/api/3.29/sites/_site-id_/projects/_project-id_` ### Request Limits on Tableau Cloud Requests for extract refreshes and scheduled tasks have limits to how frequently they can be used, with quotas that are refreshed periodically (one or more times per day). If you encounter the errors shown below, your request has hit these limits, and you will need to try again later: `Unknown 429` And `ApiCallError: 429000: Too Many Requests` ## Using JSON with the REST API The REST API documentation provides most syntax examples in XML. To use the REST API with JSON, you can convert the syntax examples included in the REST API documentation to JSON using the same JSON parser used by the REST API: the open-source Jackson Project JSON Parser (previously known as “JSON for Java”). You can install the Jackson Project JSON Parser on a laptop or other computer and use that to convert the XML syntax provided in the REST API documentation to JSON, so there is no need to install this parser on the same server where Tableau Server is installed. To install and use the Jackson Project JSON Parser, see the [Jackson Project on GitHub](https://github.com/FasterXML/jackson). **Disclaimer**: Clicking this link will take you away from the Tableau website. Although we make every effort to ensure that links to external websites are accurate, up to date, and relevant; Tableau cannot take responsibility for the accuracy or freshness of pages maintained by external providers. Contact the external site for answers to questions regarding its content. ## Sending Information for New and Updated Resources (POST and PUT) You create new resources by sending a POST request, and you update existing ones by sending a PUT request. You include the information for the operation in the body of the request, sometimes referred to as the _payload_ or simply the _data_. **Note**: For POST and PUT requests, the request should include the `Content-Length` and `Content-Type` headers. The request can be in XML or JSON. For more information, see [Passing MIME Type and Authentication Information in the Header](#passing_headers). For example, to create a user on a site, you send a POST request using a URI in the following format: ``` https://your-server/api/3.29/sites/site-id/users/ ``` The information for the new user can be placed in the body of the request block. The request block can be in either XML or JSON. By default, the `Content-Type` is (`text/xml`). If you use XML, the block must have root element called . The body of the XML request might look like the following: ``` ``` If you set the `Content-Type` to JSON (`application/json`), the request block might look like the following: ``` { "user": { "name": "Bob", "siteRole": "Viewer" } } ``` The siteRole value is the role you want the new user to have, such as **Viewer**, **Publisher**, or **Interactor**. In response to the POST request to create a user, Tableau Server returns the response that includes the `user-id` assigned to the new user. To update a user, you make a PUT request and use a URI like the following to update the user with the specific `user-id`: ``` http://your-server/api/3.29/sites/site-id/users/user-id ``` In XML, the body of the request might look like this: ``` ``` Or like the following in JSON: ``` { "user": { "fullName": "Adam Davis", "email": "adamd@example.com", "password": "passw0rd" } } ``` **Note**: Some query path parameters, such as _user-id_ in the preceeding example, are legal in both the query and request body parameters of a REST API method. Where this is true, the parameter should be declared in the query path, not the request body. If it is declared in both places, the request body parameter value will be ignored. The XML and JSON requests and responses follow a schema. You can use the XML schema to generate classes that you can use when programming. For more information, see [REST API XML Schema](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_schema.htm). ## Passing MIME Type and Authentication Information in the Header Some information for a request is passed using the request header. This includes the content length, MIME-type information, and authentication information. - **All POST and PUT requests** should include the `Content-Length` header, which indicates the length of the request body. - **All POST and PUT requests** should include a `Content-Type` header that indicates the MIME type of the data in the request body. For most POST and PUT requests, this should be `text/xml` or `application/xml` for XML and `application/json` for JSON. If not specified, the default is `text/xml`. If the `Accept` header is specified, it must match the `Content-Type`; use `application/json` or `application/xml`. (Setting the `Content-Type` heading to an incorrect type, such as `application/x-www-form-urlencoded`, can result in unexpected corruption of your posted data.) For publish requests like [Publish Datasource](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_datasource) and [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook), the `Content-Type` header is set to `multipart/mixed; boundary=_boundary-string_`, where _boundary-string_ is a string that is used to separate parts of the request body. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). - To specify whether you want the response in XML or JSON, set the `Accept` header. By default, the response matches the `Content-Type`. If the `Accept` header and `Content-Type` are not specified, the default is `text/xml` and `application/xml`. - **All requests** except the initial **[Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in)** request must include an authentication token in the `X-Tableau-Auth` header. For more information about signing in and authentication, see [Signing In and Signing Out (Authentication)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm). The documentation for individual methods discusses any additional headers you need to set for that call. For examples of requests, including headers and request body information, see [REST API Example Requests](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_example_requests.htm). ## Enabling CORS on Tableau Server for the REST API For security, most web browsers restrict HTTP requests to the same origin. That is, to access a resource on a server through an API, the request must come from the same origin (server), or a proxy must be set up to handle the request. Tableau Server now supports _Cross-Origin Resource Sharing_ (CORS), so you can do away with your proxy and call the REST API from the browser. The CORS mechanism is currently only enabled for Tableau Server, and can be turned on by server administrators in a couple of steps using the TSM command-line tool. To learn more, see the description of the `vizportal.rest_api.cors.allow_origin` option in [tsm configuration set Options](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm). As a security measure, you should make API calls to Tableau Server using the HTTPS protocol (SSL or TLS). See [Using HTTPS (SSL/TLS) for API Calls](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_SSL.htm). 1. Add the origins that need access to the Tableau Server. Determine the origins (servers) you want to allow access to the REST API, and use the `tsm configuration set` command with the `vizportal.rest_api.cors.allow_origin` option. For example, to grant access to one two origins, https://mysite and https://yoursite, you would stop the server (`tsm stop`) and then use the following command: tsm configuration set -k vizportal.rest\_api.cors.allow\_origin -v https://mysite,https://yoursite You can enter multiple origins. Use a comma to separate the entries. **Note:** You could also use an asterisk (**\***) as a wild card to match all sites. This is not recommended as it allows access from any origin that has access to the server and could present a security risk. Do not use an asterisk (**\***) unless you fully understand the implications and risks for your site. 2. Enable CORS on Tableau Server. Use the `tsm configuration set` command with the `vizportal.rest_api.cors.enabled` option. The default setting is `false`, so set this to `true` as follows: tsm configuration set -k vizportal.rest\_api.cors.enabled -v true 3. Update your Tableau Server configuration (`tsm pending-changes apply`)  to restart Tableau Server and make the changes take effect.  Only the origins you specify will have access. For information about CORS, see [https://www.w3.org/TR/cors/](https://www.w3.org/TR/cors/). ## Passing Additional Information in the Query String For some calls, you pass parameters using the query string. These parameters indicate processing instructions for the request, as distinct from data. One example is the **overwrite** query string parameter that you can include when you publish a workbook, to indicate that Tableau should overwrite any existing workbook. Another example is pagination instructions. The following example shows the URI for a GET request to list all the sites on the server. The parameters in the query string specify that the request should return elements 51 through 100. ``` https://my-server/api/3.29/sites?pageSize=50&pageNumber=2 ``` Some methods also let you pass parameters in the query string that let you filter the results to return. For example, when you call [Get Users on Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_on_site), you can add the filter parameter and a filter expression like the following to the URI in order to return only users whose site role is Viewer: ``` https://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users?filter=siteRole:eq:Viewer ``` For some methods, you can also add the sort parameter and a sort expression to the query string, as in this example: ``` https://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users?sort=name:desc ``` For some methods, you can add the fieldsparameter to qualify the results by the fields and resources you are interested in. For example, when you call [List Metrics for Site - Retired in API 3.22](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Query), you can add the fields parameter and a field expression to return just the id and name of all the workbooks:  ``` https://localhost/api/2.5/sites/1a10f5b9-029b-43e4-a620-773d1690338c/workbooks?fields=id,name ``` For more information, see [Filtering and Sorting in the Tableau REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm) and [Using Fields in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fields.htm). ## Getting Results from the Server Tableau Server sends a response to each REST API request. The response includes a standard HTTP status code, such as 200 (OK) or 201 (Created). For most requests, the server returns a response body as you specify in the `Accept`or `Content-Type` header as either JSON or XML. In XML, the root element is . (The exception is DELETE requests. These do not return a response body. The HTTP status code for successful DELETE operations is 204 (No Content), because there is nothing to return.) For example, to get a list of projects for a site, you make a GET request using a URI with the following format: ``` https://your-server/api/3.29/sites/site-id/projects ``` The body of the response includes the list of projects. It might look like the following XML example: ``` ... more projects ... ``` The response body is an XML block. The element includes attributes that specify the XML namespace for the elements, and the location of the XML schema that defines the structure for the XML block. (For an introduction to XML namespaces, see [Understanding XML Namespaces](http://msdn.microsoft.com/en-us/magazine/cc302166.aspx) in MSDN Magazine.) Following these declarations, the element contains a collection of elements. Each one includes information about an individual project. This response also includes a element that is useful if the number of projects is large and you need to make multiple requests to get successive pages of project information. For more information about paginating results, see [Paginating Results](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_paging.htm). When you create or update a resource, the body of the response lists the new or updated state of the affected resource. For example, to create a new project, you make a POST request using a URI with the following format: ``` https://your-server/api/3.29/sites/site-id/projects ``` The body of the request contains the XML that defines the new project values. In XML: ``` ``` In JSON: ``` { "project": { "name": "SampleProject", "description": "This is a new description of a test project" } } ``` If the request is successful, the response body includes a block that describes the new project. In XML: ``` ``` In JSON: ``` { "project": { "id": "1f2f3e4e5-d6d7-c8c9-b0b1-a2a3f4f5e6e", "name": "SampleProject", "description": "This is a new description of a test project", "contentPermissions": "ManagedByOwner" } } ``` Notice that the response body echoes some of the information that you sent in the request body. The server is returning state information about the project to the client, including both the information you originally sent (name and description) and new information (the ID that was generated for the new project). Having the original request information echoed in the response makes it easier to use that information as input into a subsequent request (that is, to chain requests), because you don’t have to save this information in your application between calls. ## Importing CSV files with Multipart Requests Tableau REST API methods that involve uploading or importing the content of a file, such as [Import Users to Site from CSV](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#import_users_to_site_from_csv), require [MIME multipart form-data requests](https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html). These are requests where the request-payload is one of three parts in the request body, separated from each other by a boundary string. The other two parts define the type of request being sent and, typically, and the content of the request in file path or other form. **Using cURL** cURL is a common command line tool for making REST requests. A request to import users listed in a .csv file to a Tableau site, would look like the following: ``` curl -X POST \ http://10.108.21.238//api/3.15/sites/8aa3291f-1b5a-4f52-a3be-6512661f574d/users/import \ -H 'cache-control: no-cache' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -H 'x-tableau-auth: AVjAKZb3SQimzoqyMmQXEg|9OSHQrwCXF83SIR2XCuDEK91AM7v3FZr' \ -F tableau_user_import=@users.csv \ -F 'request_payload=' ``` Note that the form includes two key/value elements: - `tableau_user_import` is a typical key whose value defines the path of the file. The key name will be different for each endpoint, for instance, the key for the [Delete Users from Site with CSV](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_users_from_site_with_csv) endpoint is `tableau_user_delete` . - `request_payload`‘s value contains the XML or JSON statement of the request. Some multipart requests may not have a request payload. The content-type header element specifies the form of the request as multipart/form-data and provides the boundary string for separating the parts of the request. **Using Postman** Postman is another common tool. Most requests can be made by placing XML or JSON statements in the request body with the **raw** option. For multipart requests use the **form-data** option instead. 1. Select **Header** and set the **Content-Type** to _multipart/form-data_ ![Screen capture of Postman, showing how multipart header elements appear in the app.](/tableau/next/en-us/api/rest_api/en-us/Img/multipart-header.png) 2. Select **Body** and then **form-data**. The following screen capture show the request-payload and .csv path key in the form. For the .csv path key, select the **File** option, then browse to the path using the **Select Files** button. ![Screen capture of Postman, showing how multipart-form elements appear in the app.](/tableau/next/en-us/api/rest_api/en-us/Img/multipart-form.png) **Using Python** The following Python script shows the basics of making a multipart request. ``` import requests url = "http://10.108.21.238/api/3.15/sites/7bc03892-6693-43c1-aa2d-d374f4a2cc2b/users/import" payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"tableau_user_import\"; filename=\"users.csv\"\r\nContent-Type: text/csv\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"request_payload\"\r\n\r\n [Skip to main content](#main-content) # Get Started Tutorial Part 1: Tools, REST Basics, and Sign In ## What is in part 1 of this tutorial? This is part 1 of a 3-part tutorial to help you get started using the Tableau Server REST API. Setup steps and concepts you’ll need are described on the [introduction page](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_intro.htm). We expect part 1 will take you about 20 minutes to complete. - **[Introduction and Set Up](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_intro.htm)** - **Part 1: Tools, REST Basics, and Sign In** (this page: ~20 minutes) - Read about REST basics. - Make a REST request to sign in to your server. - Learn to use the server’s response to authenticate other requests. - **[Part 2: Create a Project and Publish a Workbook to It](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_2.htm)** (~20 minutes) - **[Part 3: Create a User Group and Give it Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_3.htm)** (~20 minutes) [Watch a video demonstration](https://youtu.be/rlKakxlIB1I) of signing in using the REST API through Postman. ## The basics of REST Already familiar with REST? Skip to [Sign in to your server](#sign-in-to-your-server). **Why would I want to use the REST API to manage my Tableau Server and resources?** The Tableau Server REST API enables you to create a script or program that performs the same actions you can take through the server UI. That means you can automate repetitive tasks, create automated workflows that behave differently based on the condition of your Tableau resources, integrate Tableau management tasks into your existing workflows, and more. **How does REST work?** REST is a common pattern for making requests to and getting responses from an API (a server's or app's programming interface) over the web. Here are a few parts of the REST protocol you need to know about to get started. - **Resource:** The component of the API you want to query or manage, represented by a URI that contains the location of your server plus the resource you want. Typical Tableau Server resources are users, workbooks, and views. The URIs for resources are often referred to as endpoints and resemble URLs used for navigating to web pages. The model of a URI to get the details of a Tableau workbook looks something like: ``` GET https://MY_SERVER/api/3.4/workbooks/workbook-id ``` Note that the server name and the workbook id are placeholders in the model. You would replace them to form a real example of a request. - **Request:** A message to a server describing the action you want to take relating to a resource. Requests use an HTTP verb (action word found in typical web requests) to describe the action being requested. These include: - GET (read information) - POST (create new resources) - PUT (update existing resources) - DELETE (remove resources or configurations) Note that the model of a URI for a request tells you which verb to use. Many requests have bodies that carry details of the request. For instance, a sign in request body carries a user's username and password credentials for the server to validate when authorizing the sign in. - **Response:** A server’s response to a request that contains information about the state of the resource after the request. Responses often have bodies that carry information resulting from the request. For instance, the response to a request for sign in has a body containing a credentials token that, in following requests, the server uses to validate that the user is already signed. - **Response code:** Tableau server also returns a response code that reports if the call was a success (200) or why it failed (400 or greater). - **Header:** All requests and responses have headers that contain information about them, for instance, the format (XML or JSON) of the response or request. They can also carry key information, such as when a request header contains the credentials token that allows a server to validate a user's sign in. To learn more, see [Fundamentals of the Tableau Server REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm). ## Step 1: Sign in to your server with REST For simplicity, we'll use username/password sign in for this tutorial. To log in to the server, you will call the signin method of the Tableau auth object. ### URI Start by constructing the URI for your request to sign in to your server. The model of the URI for a sign in request looks like: ``` POST https://MY_SERVER/api/api-version/auth/signin ``` Replace `MY_SERVER` with your Tableau server name, and `api-version` with the API version of your server (if you get the API version wrong, look for the right one in the error response from the server). If you are using your Tableau Developer Program sandbox your URI might look like: ``` https://10ax.online.tableau.com/api/3.4/auth/signin ``` ### Request body In the request body XML, add your login credentials. Replace the placeholders with valid `user-name`, `password`, and `site-name`. **Note:** `site-name` refers to the name of your sandbox, if you are using your Developer Program sandbox. If you are signing in to Tableau Server use the site name. If you use the default site, leave the contentUrl value empty (`contentUrl=""`). ``` ``` If you just activated your Developer Program site and the URL is `https://10ax.online.tableau.com/t/MarketingTeam` your request body will look something like: ``` ``` ### Make a REST sign in request - **Using Postman** - To use Postman to make a sign in request: 1. Open Postman and select +New > Request. 2. In Request name, type "Sign in". 3. Choose +Create collection and name the new collection “REST Tutorial Collection". 4. Choose the check mark on the right of the form field, then choose Save to REST Tutorial Collection. 5. Change the verb on the upper left to POST, and then replace "Enter request URL " with your URI. 6. Select Body, then select raw. 7. Copy/Paste the body XML from the preceding section into the raw body area, ensuring the placeholders have been replaced with valid values. 8. Choose Send, then scroll down to view the response panel. An animation of signing in with a Postman request. Click to replay. - **Using cURL** - To use cURL to make a sign in request: 1. Paste your request body into a text editor such as Notepad or TextEdit and save it somewhere you will remember as a file named `signin.xml`. 2. Open a terminal window ([Windows / Mac](https://www.google.com/search?q=how+to+open+a+teminal+window)). At the command prompt, navigate to the directory where you saved signin.xml. Replace `MY_SERVER`" with the name of your server in the following command, and then run it as follows. ``` cd /…/dir-containing-sign-in-xml curl "https://MY-SERVER/api/3.4/auth/signin" -X POST -d "@signin.xml" ``` ### Response Body In Postman, you may need to scroll down to see the response body. In curl, the terminal should display the response at the prompts following your request command line. If the response body looks like the following, then you have succeeded in signing in to your Tableau Server. You can confirm the sign in by viewing the users page of the server management. ``` ``` If you got an error, try to use the message in the response body to figure out if there is a password, server name or other problem. Otherwise, find the error response code in the response body and try looking at the [sign in](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_in) method error message list in the API reference. ### Save your credentials token and site id The response contains two pieces of information that you will need to complete the rest of the tasks in this tutorial: 1. The value of the credentials token: This token will allow the other calls to be authenticated as valid by your Tableau Server. To keep things secure, the token has a time limit, typically 2 hours. After that you'll need to sign in again and use the new token from the response for following requests. 2. The value of site id: This is the identifier for the site on your Tableau Server that you define in the contentUrl in your request body. Your users, workbooks and views are all children of your site object, and you need this identifier to make REST calls to them. If contentUrl is empty, then the default site’s id is returned. Copy and save those two values for next steps in this tutorial. ## Authentication of REST calls Here's one more important piece of information about REST that you will use in all REST requests you make once you have signed in to a server. Tableau Server responds to a sign in call with a credentials token. The token is used by the server to validate that a request comes from a signed-in user. When a token expires, typically after 2 hours, you will need to make a new sign in request to get a fresh token. Every REST call to the server after sign in needs to pass a valid token to succeed. To pass the token you place it in the request header as a key/value pair:
keyValue (example)
X-Tableau-AuthfDgkilutQqmJn0znEZr7Sg|0CHx3E9Sird1cOHv4yNVK86Y7opMmhKz
### Adding credentials to a request - **Using Postman** - To add credentials to a request header using Postman: 1. Open Postman and choose your request. 2. Select Headers. 3. In an empty row, in the Key column, type "X-Tableau-Auth". 4. In the Value column, enter the credentials token value you copied from response body of your sign in call. An animation of adding credentials to a request header with Postman. Click to replay. - **Using cURL** - To add credentials to a request header using cURL. (This example is calling the [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#create_site) method. The site.xml file referenced in the command would be the request body, but is not included.) Add the key/value pair to your command using the Header parameter, abbreviated as `-H`. ``` curl "https://MY-SERVER/api/3.4/sites" -X POST -d "@site.xml" -H "X-Tableau-Auth:fDgkilutQqmJn0znEZr7Sg|0CHx3E9Sird1cOHv4yNVK86Y7opMmhKz" ``` **Next Up: [Part 2: Create a Project and Publish a Workbook to It](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_2.htm)** (~20 minutes) [Skip to main content](#main-content) # Get Started Tutorial Part 2: Create a Project and Publish a Workbook to it ## What is in part 2 of this tutorial? This is Part 2 of a 3-part tutorial to help you get started using the Tableau Server REST API. Steps on this page depend on completing the previous parts. We expect this part will take you about 20 minutes to complete. - **[Introduction and Set Up](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_intro.htm)** - **[Part 1: REST Basics, and Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm)** (~20 minutes) - **Part 2: Create a Project and Publish a Workbook to it** (this page: ~20 minutes) - Create a Tableau project. - List the projects on your site. - Publish a workbook. - **[Part 3: Create a User Group and Give it Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_3.htm)** (~20 minutes) ## Step 1: Create a project ### What are Tableau sites and projects? A Tableau site is a grouping of your workbooks and other resources on a server. A site has its own URL and users. It is walled off from other sites on the server. A developer program sandbox is a site on the Tableau Cloud server. A Tableau project is a way of grouping your workbooks and other resources within a site. You can organize related pieces of your work into a project and control access to those pieces by granting permissions at the project level. To create a project on your site you'll use the site id and credentials token you copied and saved from the response to your sign in request in [Part 1](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm) of the tutorial. ### URI Here is the model of a REST call to create a new project in a site, note that using the verb POST causes the project to be created: ``` POST https://MY_SERVER/api/api-version/sites/site-id/projects ``` The `_site-id_` is the value from your sign in response. ### Request body The request body for a call to create a project should include a name and a description of the project. ``` ``` ### Make a REST request to create a project - **Using Postman** - To use Postman to create a project: 1. Open Postman and create a new request called Create Project and save it in your REST Tutorial Collection. 2. Add the request body described in this section (see how it is done at [Make a REST sign in request](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#make-a-rest-sign-in-request)). 3. Add URI with your server name and site id, and then make sure the verb is set to POST. 4. Add the credentials token to the request header (see how it is done at [Authentication of REST calls](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#add-credentials-to-a-rest-call)). 5. Choose Send, then scroll down to view the response panel. - **Using cURL** - To use cURL to create a project: 1. Paste your request body into a text editor such as Notepad or TextEdit and save it somewhere you will remember as a file named create-project.xml. 2. Open a terminal window ([Windows / Mac](https://www.google.com/search?q=how+to+open+a+teminal+window)). At the command prompt, navigate to the directory where you saved `create-project.xml`. In the following command, replace: - `MY_SERVER` with the name of your server - `api-version` with the API version number of your server - `site-id` with the value of site id parameter in the sign in response - `credentials-token` with the value of the credentials token parameter of the sign in response 3. Then run the command: ``` cd /…/dir-containing-sign-in-xml curl "https://MY_SERVER/api/api-version/sites/site-id/projects" -X POST -H "X-Tableau-Auth:credentials-token" -d "@create-project.xml" ``` ### Response Body In Postman, you may need to scroll down to see the response body. In curl, the terminal should display the response at the prompts following your request command line. If the response body looks like the following, then you have succeeded in creating a project on your site. ``` ``` Save your project ID for use in publishing your workbook in a coming step. If you got an error, try to use the message in the response body to figure out if there is a password, server name or other problem. Otherwise, find the error response code in the response body and try looking at the [create project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_projects.htm#create-project) method error message list in the API reference. You can confirm the project creation by viewing the project list on your server. You can also confirm the new project by making the REST call to list the projects on your site as follows. ## Step 2: List the projects in your site To get a list of projects on your site, try the same URI used to create a project, but using the GET verb instead of POST. You will still need to [pass the credentials token in the header](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#add-credentials-to-a-rest-call). ### URI Here is the model of a REST call to list the projects in your site: ``` GET https://MY_SERVER/api/api-version/sites/site-id/projects ``` The `_site-id_` is the value from your sign in response. ### Request body None needed. Since this request is a query for a list of existing Tableau objects, you don't need to provide details in a request body. When you make a query request [filter and sort](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm) the results to be returned. ### Make a REST request to list projects in a site - **Using Postman** - To use Postman to list projects in a site: Here's an example of a URI to query for a listing of projects in your site in Postman: ``` GET https://10ax.online.tableau.com/api/3.4/sites/c7b3099d-9e6d-44f1-8e05-d58d7fa97d4d/projects ``` 1. Open Postman and create a new request called Query Projects and save it in your REST Tutorial Collection. 2. Add the URI with your server name and site id, and then make sure the verb is set to GET. 3. Add the credentials token to the request header (see how it is done at [Authentication of REST calls](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#add-credentials-to-a-rest-call)). 4. Choose Send, then scroll down to view the response panel. - **Using cURL** - To use cURL to list projects in a site: Here's an example of the cURL command for the same request: ``` curl "https://10ax.online.tableau.com/api/3.4/sites/c7b3099d-9e6d-44f1-8e05-d58d7fa97d4d/projects" -X GET -H "X-Tableau-Auth:RTvMkIbYT7Ww6mIMWS5UbA|FcVcVbbOdST0dedYS6pkM6mHzVL0smvT" ``` ### Response Body In Postman, you may need to scroll down to see the response body. In curl, the terminal should display the response at the prompts following your request command line. The response from the server listing each project in your site with their details. ``` ``` ## Step 3: Publish a workbook To publish a workbook, use the POST verb. ### URI Here is the model of a REST call to list publish a workbook to a site: ``` POST https://MY_SERVER/api/api-version/sites/site-id/workbooks ``` The `_site-id_` is the value from your sign in response. ### Request body The request body uses the project id you copied earlier when you made your request to create a project. ``` ``` ### Make a REST request to publish a workbook - **Using Postman** - To use Postman to publish a workbook: At this time, Postman and Tableau do not play well together on a technical issue having to do with mixed content types (this kind of request combines a text part, for the REST command, and a file part, for the workbook being published). Use cURL for this tutorial. Alternatively, you can use Tableau Desktop to publish `MY_WORKBOOK.twbx`, or use your Tableau Developer program sandbox to create a workbook. - **Using cURL** - To use cURL to publish a workbook: As in previous steps, to use cURL to publish a workbook to your project, create an xml file called `publish-workbook.xml` containing the request body in this section. ``` curl "https://MY_SERVER/api/3.4/sites/site-id/workbooks" -X POST -H "X-Tableau-Auth:credentials token" -H "Content-Type: multipart/mixed;" -F "request_payload=@publish-workbook.xml" -F "tableau_workbook=@MY_WORKBOOK.twbx" ``` ### Response Body In Postman, you may need to scroll down to see the response body. In curl, the terminal should display the response at the prompts following your request command line. A successful response from the server will list the details of each workbook in your site. These contain the project(s) the workbook is included in. ``` ``` Save the workbook ID for a coming tutorial step that gives users permissions to use the workbook. **Next Up: [Part 3: Make a User Group and Give it Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_3.htm)** (~20 minutes) [Skip to main content](#main-content) # Get Started Tutorial Part 3: Make a User Group and Give it Permissions ## What is in part 3 of this tutorial? This is part 3 of a 3-part tutorial to help you get started using the Tableau Server REST API. Steps on this page depend on completing the previous parts. We expect this part will take you about 20 minutes to complete. - **[Introduction and Setup](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_intro.htm)** - **[Part 1: Tools, REST Basics, and Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm)** (~20 minutes) - **[Part 2: Create a Project and Publish a Workbook to It](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_2.htm)** (~20 minutes) - **Part 3: Create a User Group and Give User Permissions** (this page: ~20 minutes) - Manually add user to your site. - Create a group. - Add users to your group. - Give users permissions to your workbook. ## Step 1: Manually add users to your site You can control who gets access to your Tableau resources in several ways. In this tutorial, we demonstrate giving permissions for a group of users to access a workbook. Organizing permissions with groups is a best practice that makes managing permissions easier. You can add users to your site with a variety of methods, including via the command line in a terminal or by integrating with Active Directory through SAML. To keep things simple for now, add some users to your site manually. To add users to your site manually: - Go to the [user page](https://help.tableau.com/current/server/en-us/sites_addusers.htm) of your server and choose Add User. - Choose Enter email addresses, copy and paste the following list of emails, and then choose Import users. ``` Amanda@mycompany.com; Brian@mycompany.com; Christina@mycompany.com; Daniel@mycompany.com; Elizabeth@mycompany.com; Frank@mycompany.com; George@mycompany.com; Heather@mycompany.com ``` ## Step 2: Create a group in your site A group allows you to centrally manage the permissions for multiple users. To create a group on your site, use the following URI and request body. ### URI Here is the model for the REST call to create a group: ``` POST /api/3.4/sites/site-id/groups ``` ### Request body The request body carries the name of the group that is posted to the site. ``` ``` ### Making a REST request to create a group - **Using Postman** - To use Postman to create a group: An example of the URI to create a group looks like: ``` https://MY-SERVER/api/3.4/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups ``` 1. Open Postman and create a new request called Create Group and save it in your REST Tutorial Collection. 2. Add the request body described in this section (see how it is done at [Make a REST sign in request](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#make-a-rest-sign-in-request)). 3. Add URI with your server name and site id, and then make sure the verb is set to POST. 4. Add the credentials token to the request header (see how it's done at [Authentication of REST calls](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#add-credentials-to-a-rest-call)). 5. Choose Send, then scroll down to view the response panel. - **Using cURL** - To use cURL to create a group: 1. Paste your request body into a text editor such as Notepad or TextEdit and save it somewhere you will remember as a file named `create-group.xml`. 2. Open a terminal window ([Windows / Mac](https://www.google.com/search?q=how+to+open+a+teminal+window)). At the command prompt, navigate to the directory where you saved `create-group.xml`. In the following command, replace `MY_SERVER`" with the name of your server, and the value of `X-Tableau-Auth` with the credentials token from your sign in response. Then run the command. ``` cd /…/dir-containing-create-group-xml curl "https://MY-SERVER/api/3.4/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d "@create-group.xml" ``` ### Response Body In Postman, you may need to scroll down to see the response body. In curl, the terminal should display the response at the prompts following your request command line. If your request succeeds, the response body contains the group ID of the new group. ``` ``` Copy and save the group ID for following steps. ## Step 3: Get IDs for users on your site To add users to a group you need their IDs. Use the following URI to get the list of users with their IDs. ### URI Here is the model for the REST call to query users of a site: ``` GET /api/3.4/sites/site-id/users ``` ### Request body None needed. Since this request is a query for a list of existing Tableau objects, you don't need to provide details in a request body. When you make a query request [filter and sort](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm) the results to be returned. ### Making a REST request to query users of a site - **Using Postman** - To use Postman to query users of a site: Here is an example of the URI to query users of a site. ``` https://MY-SERVER/api/3.4/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users ``` 1. Open Postman and create a new request called Query Users and save it in your REST Tutorial Collection. 2. Add the URI with your server name and site id, and then make sure the verb is set to GET. 3. Add the credentials token to the request header (see how it's done at [Authentication of REST calls](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#add-credentials-to-a-rest-call)). 4. Choose Send, then scroll down to view the response panel. - **Using cURL** - To use cURL to get users of a site: 1. Open a terminal window ([Windows / Mac](https://www.google.com/search?q=how+to+open+a+teminal+window)). In the following command, replace `MY_SERVER`" with the name of your server, and the value of `X-Tableau-Auth` with the credentials token from your sign in response. Then run the command. ``` cd /…/dir-containing-create-group-xml curl "https://MY-SERVER/api/3.4/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` ### Response Body In Postman, you may need to scroll down to see the response body. In curl, the terminal should display the response at the prompts following your request command line. If your request succeeds, the response body contains the metadata for each user, including their ID. ```
``` ### Making a REST request to grant workbook permissions to a group - **Using Postman** - To use Postman to add group permissions An example of the URI to add a user looks like: ``` https://MY-SERVER/api/3.4/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/34fb7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4f/permissions ``` 1. Open Postman and create a new request called Add Group Permissions and save it in your REST Tutorial Collection. 2. Add the request body described in this section (see how it is done at [Make a REST sign in request](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#make-a-rest-sign-in-request)). 3. Add URI with your server name and site id, and then make sure the verb is set to POST. 4. Add the credentials token to the request header (see how it's done at [Authentication of REST calls](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm#add-credentials-to-a-rest-call)). 5. Choose Send, then scroll down to view the response panel. - **Using cURL** - To use cURL to add group permissions: 1. Paste your request body into a text editor such as Notepad or TextEdit and save it somewhere you will remember as a file named `add-permissions.xml`. 2. Open a terminal window ([Windows / Mac](https://www.google.com/search?q=how+to+open+a+teminal+window)). At the command prompt, navigate to the directory where you saved `add-permissions.xml`. Replace `MY_SERVER`" with the name of your server in the following command, and then run it as follows. ``` cd /…/dir-containing-add-permissions-xml curl "https://10ax.online.tableau.com/api/3.4/sites/c7b3099d-9e6d-44f1-8e05-d58d7fa97d4d/workbooks/0d110ecf-b4d8-42c0-af2b-756be5677eeb/permissions" -X PUT -H "X-Tableau-Auth:GGxvSGb-SN6nzyLhfFuifQ|9sodYqlju7dZjjCyykh4fGn4kH7FJe3j" -d "@add-permissions.xml" ``` ### Response Body In Postman, you may need to scroll down to see the response body. In curl, the terminal should display the response at the prompts following your request command line. The response body confirms that permissions were granted to the group. ``` ``` To verify that permissions were granted to the group, find your workbook on your server and view its permissions. To find these, choose the explore icon on the left, choose your workbook, and then choose the stacked dots menu next to the workbook name. In the menu, choose Permissions, and note that the new group you created is listed with the Read permissions you set. ## Next Steps Congratulations! You have completed the Tableau Server REST API Get Started tutorial. Now that you have some experience with the pattern of working with REST calls, you have the tools to explore the whole REST API surface of Tableau server. Some things you may want to try: - To discover what methods are available, explore the [REST API reference](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm). - To use Python to integrate REST API methods into your workflow, check out the [Tableau Server Client Library](https://tableau.github.io/server-client-python/docs/) (TSC). - Participate in the [Tableau Developer Forum](https://community.tableau.com/s/topic/0TO4T000000QF8eWAG/developers). [Skip to main content](#main-content) # Get Started Tutorial: Introduction and Set Up ## What is in this tutorial? This is the introduction to a 3-part tutorial on the basics of using the Tableau Server REST API to manage your resources. With this content, you can learn to use the REST API to: - Sign in to a server. - Create a project and publish a workbook to it. - Create a user group and give it permissions to your workbook. Here's what you'll find in each part: - **Introduction and Set Up** (this page) - Join the Tableau Developer Program to activate your free Tableau sandbox and more (or use your own Tableau server). - Set up the tools used for the tutorial. - Download the tutorial workbook file (or use your own). - **[Part 1: Tools, REST Basics, and Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm)** (~20 minutes) - Read about REST basics. - Make a REST request to sign in to your server. - Learn to use the server’s response to authenticate other requests. - **[Part 2: Create a Project and Publish a Workbook to It](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_2.htm)** (~20 minutes) - Create a Tableau project. - List the projects on your site. - Publish a workbook. - **[Part 3: Create a User Group and Give it Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_3.htm)** (~20 minutes) - Manually add user to your site. - Create a group. - Add users to your group. - Give users permissions to your workbook. ## What do I need to get started? 1. **Join the [Tableau Developer Program](https://developer.tableau.com)** (or use your own server) For this tutorial, you will need administrative access to a Tableau Cloud account or an installation of Tableau Server version 9.0 or higher. If you need access to a server, you can register for the [Tableau Developer Program](https://developer.tableau.com) and activate a personal Tableau Cloud sandbox at no cost. You will also be able to get updates and learning resources, participate in Tableau team sprint demos, and connect with others via the [Tableau Developer Community Forum](https://community.tableau.com/s/topic/0TO4T000000QF8eWAG/developers). 2. **Get the tools** There are many means of making REST calls. This tutorial illustrates use of two common tools for sending single REST calls. Try one or both. **[Install Postman](https://www.getpostman.com/downloads/)** - Postman is a popular desktop application for making REST calls. It is useful for learning about REST calls, testing them out, and performing small operations on your server. **[Install cURL](https://curl.haxx.se/download.html)** - cURL is a popular command line application for making REST calls. It is useful for the same kinds of things Postman is good at, and can be incorporated directly into scripts. To learn more, see [Testing and Troubleshooting REST API Calls](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_testing.htm). 3. **Get a Tableau workbook to publish** For this tutorial, you can use any workbook you have on hand that is less than 64MB in size. [Get-started-LATEST\_PSL\_0.twb](https://public.tableau.com/workbooks/Get-started-LATEST_PSL_0.twb) is available from Tableau Public if you need a small workbook to use. When we refer to your workbook in the tutorial, we'll call it `MY_WORKBOOK.twbx`, replace that with your actual file name. **Now you are ready to start: [Part 1: Tools, REST Basics, and Sign in](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_get_started_tutorial_part_1.htm)** (~20 minutes) ## Other articles in this section [Skip to main content](#main-content) # Handling Errors in the REST API If a request results in an error, the server returns an HTTP status code that indicates the general nature of the error. These can include 400 (Bad Request) if Tableau Server cannot parse or interpret the message in the request, 403 (Forbidden) if the request was not authorized, 404 (Not Found) if a resource could not be located, and 405 (Method Not Allowed) if the wrong verb was used for an operation (for example, making a GET request instead of a POST request). For error conditions, the response body also includes an XML block that provides details about the error. For example, if the HTTP response was 404, the response body provides details about what resource in particular was not found. Imagine that you send the following PUT request in order to update information for a user: `http://your-server/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d/users/9f9e9d9c8-b8a8-f8e7-d7c7-b7a6f6d6e6d` An HTTP status code of 404 for the response tells you that the operation was not successful because a resource could not be found. In that case, the response body might look like the following example: ``` Resource Not Found User '9f9e9d9c8-b8a8-f8e7-d7c7-b7a6f6d6e6d' could not be found. ``` Notice that the code in the element provides both general information and specifics. In the example, the error code is 404002. The "404" part of the code indicates a "not found" error, which matches the HTTP status code. The "002" part indicates that it was the specified user that was not found. The element within the error provides a text description of the error. If error messages have been translated, they are returned in the language that's set in the Accept-Language header of the request. For example, if the headers include `Accept-Language: de-de`, error messages are returned in German. **Note**: You should not rely on specific text appearing in the  element of an error response. Instead, test the value of the error code attribute to determine why an operation failed. ## Common Errors The following errors can occur in any API call.
HTTP Status CodeErrorDetails
400Resource unavailable in API version.The API version specified in the URI is valid, but the specified resource is not available in that version of the API.
400Malformed XML in request bodyThe request body contains malformed XML.
400Invalid request bodyThe XML in the request body is well-formed XML, but it does not meet the format defined in the XML schema.
401Not authenticatedThe client attempted to access an API method without authentication credentials.
403Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
403Cross-site access forbiddenThe client attempted to access or modify a resource on one site using an authentication token that was created for another site.
404Invalid API versionThe API version in the URI is not valid.
## Table of Error Codes The following table lists all the codes that can appear as code attribute of an  element if an error has occurred.
BAD_REQUEST 400000
NONADMIN_ASSET_TARGET 400001
EMPTY_ASSET_TARGET 400002
USER_VALIDATION_ERROR 400003
INVALID_SITE_UPDATE_VALUE 400004
INVALID_FAVORITE_LABEL 400005
INVALID_PAGE_NUMBER 400006
INVALID_PAGE_SIZE 400007
INVALID_PARAMETER_VALUE 400008
INVALID_CAPABILITY_FOR_RESOURCE 400009
INVALID_DATASOURCE_ATTACHMENT 400010
GENERIC_PUBLISHING_ERROR 400011
GENERIC_UPDATE_USER_ERROR 400012
INVALID_SITE_ROLE 400013
GENERIC_CREATE_GROUP_ERROR 400014
GENERIC_CREATE_FILE_UPLOAD_ERROR 400015
FILE_SIZE_LIMIT_EXCEEDED 400016
GENERIC_APPEND_FILE_UPLOAD_ERROR 400017
INVALID_USER_FULL_NAME 400018
MALFORMED_IMPORT_ELEMENT 400019
INVALID_WORKBOOK_ATTACHMENT 400020
GENERIC_QUERY_GROUP_USERS_ERRROR 400021
GENERIC_ADD_USER_TO_GROUP_ERROR 400022
GENERIC_QUERY_WORKBOOKS_ERROR 400023
INVALID_SYNC_MODE 400024
GENERIC_QUERY_SITE_USERS_ERROR 400025
GENERIC_DOWNLOAD_WORKBOOK_ERROR 400026
GENERIC_QUERY_WORKBOOK_DATA_CONNECTIONS_ERROR 400027
GENERIC_QUERY_GROUPS_ERROR 400028
GENERIC_DELETE_WORKBOOK_ERROR 400029
GENERIC_DELETE_DATASOURCE_ERROR 400030
GENERIC_QUERY_JOB_ERROR 400031
GENERIC_UPDATE_GROUP_ERROR 400032
GENERIC_UPDATE_DATASOURCE_CONNECTIONS_ERROR 400033
INVALID_RESOURCE_QUALIFIER 400034
INVALID_WORKBOOK_NAME 400035
GENERIC_UPDATE_WORKBOOK_ERROR 400036
GENERIC_DOWNLOAD_DATASOURCE_ERROR 400037
GENERIC_QUERY_SITE_USER_ERROR 400038
GENERIC_UPDATE_WORKBOOK_CONNECTION_ERROR 400039
GENERIC_UPDATE_DATASOURCE_ERROR 400040
ATTRIBUTE_VALUE_EXCEEDS_LIMIT 400041
REQUEST_PERMISSIONS_PAYLOAD_CONTAINS_UNEXPECTED_ELEMENT 400042
INVALID_USER_EMAIL 400043
GENERIC_DELETE_SITE_ERROR 400044
GENERIC_DELETE_GROUP_ERROR 400045
GENERIC_REMOVE_USER_FROM_SITE_ERROR 400046
GENERIC_QUERY_EXTRACT_REFRESHES_ERROR 400047
GENERIC_QUERY_VIEW_IMAGE_PREVIEW_ERROR 400048
GENERIC_ADD_TAGS_TO_WORKBOOK_ERROR 400049
GENERIC_QUERY_WORKBOOK_ERROR 400050
GENERIC_DELETE_TAG_FROM_WORKBOOK_ERROR 400051
GENERIC_QUERY_WORKBOOK_IMAGE_PREVIEW_ERROR 400052
GENERIC_QUERY_VIEWS_ERROR 400053
INVALID_APPEND_TO_DATASOURCE_FILE_TYPE 400054
CANNOT_OVERWRITE_AND_APPEND_DATASOURCE 400055
GENERIC_DELETE_REVISION_ERROR 400056
GENERIC_DOWNLOAD_REVISION_ERROR 400057
GENERIC_QUERY_REVISION_ERROR 400058
GENERIC_DELETE_SCHEDULE_ERROR 400059
GENERIC_QUERY_SUBSCRIPTIONS_ERROR 400060
GENERIC_UPDATE_SITE_ERROR 400061
GENERIC_DELETE_SUBSCRIPTION_ERROR 400062
GENERIC_CREATE_SUBSCRIPTION_ERROR 400063
GENERIC_CREATE_SCHEDULE_ERROR 400064
GENERIC_FILTER_QUERY_ERROR 400065
GENERIC_SORT_ORDER_ERROR 400066
INVALID_SUBSCRIPTION_SUBJECT 400067
INVALID_SUBSCRIPTION_TARGET 400068
INVALID_SUBSCRIPTION_SCHEDULE_TYPE 400069
GENERIC_UPDATE_SCHEDULE_ERROR 400070
GENERIC_QUERY_SCHEDULE_ERROR 400071
GENERIC_CREATE_PROJECT_ERROR 400072
GENERIC_UPDATE_PROJECT_ERROR 400073
GENERIC_QUERY_VIEW_IMAGE_ERROR 400074
GENERIC_ADD_TAGS_TO_DATASOURCE_ERROR 400075
GENERIC_ADD_TAGS_TO_VIEW_ERROR 400076
GENERIC_DELETE_TAG_FROM_DATASOURCE_ERROR 400077
GENERIC_DELETE_TAG_FROM_VIEW_ERROR 400078
GENERIC_QUERY_PROJECT_ERROR 400079
GENERIC_QUERY_VIEW_PDF_ERROR 400080
GENERIC_QUERY_VIEW_DATA_ERROR 400081
GENERIC_QUERY_VIEW_EXPORT_ERROR 400082
QUERY_VIEW_DATA_NODATA_ERROR 400083
INVALID_TASK_TYPE 400084
USER_CANNOT_BE_CREATED 400085
INVALID_FLOW_ATTACHMENT 400086
GENERIC_FLOW_PUBLISHING_ERROR 400087
GENERIC_QUERY_FLOW_ERROR 400088
MISSING_PUBLISH_FLOW_NAME 400089
MISSING_PUBLISH_FLOW_PAYLOAD 400090
GENERIC_QUERY_METRIC_ERROR 400091
GENERIC_DELETE_METRIC_ERROR 400092
GENERIC_DOWNLOAD_FLOW_ERROR 400093
GENERIC_QUERY_FLOWS_ERROR 400094
GENERIC_DELETE_FLOW_ERROR 400095
GENERIC_QUERY_FLOW_TASKS_ERROR 400096
GENERIC_UPDATE_FLOW_CONNECTIONS_ERROR 400097
GENERIC_ADD_TAGS_TO_FLOW_ERROR 400098
GENERIC_DELETE_TAG_FROM_FLOW_ERROR 400099
GENERIC_UPDATE_FLOW_ERROR 400100
GENERIC_QUERY_WORKBOOK_PDF_ERROR 400101
INVALID_SUBSCRIPTION_ATTACHMENTS_TYPE 400102
GENERIC_QUERY_LABEL_ERROR 400103
GENERIC_QUERY_LABELS_ERROR 400104
GENERIC_DELETE_LABEL_ERROR 400105
GENERIC_DELETE_LABELS_ERROR 400106
GENERIC_ADD_ERROR 400107
GENERIC_ADD_LABELS_TO_CONTENT_ERROR 400108
MISSING_LABEL_PAYLOAD 400109
CANNOT_CREATE_WEBHOOKS_ERROR 400110
CANNOT_DELETE_WEBHOOKS_ERROR 400111
CANNOT_QUERY_WEBHOOKS_ERROR 400112
CANNOT_TEST_WEBHOOKS_ERROR 400113
GENERIC_WORKBOOK_DOWNGRADE_ERROR 400114
QUERY_WORKBOOK_DOWNGRADE_INVALID_VERSION_NUMBER_ERROR 400115
QUERY_WORKBOOK_DOWNGRADE_UNSUPPORTED_VERSION_ERROR 400116
GENERIC_SEARCH_ERROR 400117
INVALID_WEBHOOK_DESTINATION 400118
GENERIC_UPDATE_DATA_ROLE_ERROR 400119
NO_EXPLICIT_PERMISSIONS_FOR_EMBEDDED 400120
GENERIC_ADD_TAGS_TO_METRIC_ERROR 400121
GENERIC_DELETE_TAG_FROM_METRIC_ERROR 400122
GENERIC_UPDATE_METRIC_ERROR 400123
CANNOT_UPDATE_WEBHOOKS_ERROR 400124
INVALID_GRANT_LICENSE_MODE 400125
GENERIC_QUERY_WORKBOOK_POWERPOINT_ERROR 400126
CANNOT_SET_WEBHOOK_STATUS_CHANGE_REASON 400127
GENERIC_QUERY_VIEW_ERROR 400128
GENERIC_QUERY_VIEW_CROSSTAB_ERROR 400130
GENERIC_QUERY_FLOW_RUN_ERROR 400131
INVALID_FLOW_RUN_MODE 400132
INVALID_SUBSCRIPTION_SENDIFVIEWEMPY 400133
GENERIC_QUERY_DATA_QUALITY_TRIGGER_ERROR 400134
GENERIC_QUERY_DATA_QUALITY_TRIGGERS_ERROR 400135
GENERIC_ADD_UPDATE_DATA_QUALITY_TRIGGERS_ERROR 400136
GENERIC_UPDATE_DATA_QUALITY_TRIGGER_ERROR 400137
GENERIC_DELETE_DATA_QUALITY_TRIGGER_ERROR 400138
GENERIC_DELETE_DATA_QUALITY_TRIGGERS_ERROR 400139
INVALID_SITE_SETTINGS_PARAMETER 400140
INCOMPATIBLE_DOCUMENT_VERSION_ERROR 400141
CANNOT_RUN_FLOW_WITHOUT_OUTPUT_STEPS_ERROR 400142
GENERIC_CONNECTED_APP_ERROR 400143
EXCEEDED_SECRET_LIMIT_ERROR 400144
INVALID_CONNECTED_APP_UPDATE_VALUE 400145
INVALID_CONNECTED_APP_SECRET_ID 400146
INVALID_VIEW_OPTIONS_RIGHT 400147
FLOW_PARAMETER_OVERRIDE_INVALID 400148
FLOW_PARAMETER_OVERRIDE_MISSING 400149
GENERIC_RUN_FLOW_ERROR 400150
FLOW_RUN_FORBIDDEN 400151
MISSING_CSV_FILE 400152
GENERIC_RUN_LINKED_TASK_ERROR 400153
GENERIC_QUERY_LINKED_TASK_ERROR 400154
PUBLISH_TO_SALESFORCE_APPS_INVALID_SALESFORCE_OAUTH_CREDENTIAL_ID 400155
PUBLISH_TO_SALESFORCE_APPS_SALESFORCE_CLIENT_ERROR 400156
GENERIC_EXTERNAL_AUTHZ_SERVER_ERROR 400157
GENERIC_ADD_TAGS_ERROR 400158
GENERIC_DELETE_TAG_ERROR 400159
AUTHZ_SERVER_LIMIT_EXCEEDED 400161
ISSUER_ALREADY_CONFIGURED_ON_SITE 400194
UNSUPPORTED_LANGUAGE_PROVIDED 400217
UNSUPPORTED_LOCALE_PROVIDED 400218

SCIM_CONFIGURATION_LIMIT_EXCEEDED

SCIM_API_TOKEN_ALREADY_PRESENT

400802
EXTERNAL_USER_NOT_ENTITLED 400984
NO_AUTH_CREDENTIALS 401000
LOGIN_ERROR 401001
INVALID_AUTH_CREDENTIALS 401002
SWITCH_SITE_ERROR 401003
MUST_BE_ADMIN_USER 403000
MISSING_AUTH_TOKEN 403001
CANNOT_DELETE_DEFAULT_SITE 403002
CANNOT_DELETE_DEFAULT_PROJECT 403003
OPERATION_ON_RESOURCE_UNAUTHORIZED 403004
CANNOT_RENAME_DEFAULT_PROJECT 403005
SERVER_ADMIN_NOT_CONFIGURED 403006
PUBLISHING_UNAUTHORIZED 403007
PUBLISHING_OVERWRITE 403130
PUBLISHING_CONCURRENT_UPDATE 403131
PUBLISHING_CONNECTION_CHECK 403132
INSUFFICIENT_SITE_STORAGE_REMAINING 403008
UPDATE_USER_FORBIDDEN 403009
AUTHENTICATED_SITE_MISMATCHED 403010
AD_NOT_CONFIGURED 403011
QUERY_GROUP_USERS_FORBIDDEN 403012
ADD_USER_TO_GROUP_FORBIDDEN 403013
PAGE_SIZE_LIMIT_EXCEEDED 403014
CREATE_FILE_UPLOAD_FORBIDDEN 403015
APPEND_FILE_UPLOAD_FORBIDDEN 403016
REMOVE_USER_FROM_GROUP_FORBIDDEN 403017
QUERY_WORKBOOKS_FORBIDDEN 403018
DOWNLOAD_WORKBOOK_FORBIDDEN 403019
CANNOT_MODIFY_AD_GROUP_NAME 403020
QUERY_WORKBOOK_DATA_CONNECTIONS_FORBIDDEN 403021
CANNOT_CHANGE_NON_LOCAL_USER_PASSWORD 403022
UPDATE_DATASOURCE_CONNECTIONS_FORBIDDEN 403023
UPDATE_WORKBOOK_NAME_FORBIDDEN 403024
MOVE_WORKBOOK_PROJECT_PERMISSIONS_FORBIDDEN 403025
MOVE_WORKBOOK_WORKBOOK_PERMISSIONS_FORBIDDEN 403026
UPDATE_WORKBOOK_OWNER_FORBIDDEN 403027
DOWNLOAD_DATASOURCE_FORBIDDEN 403028
UPDATE_WORKBOOK_CONNECTION_FORBIDDEN 403029
MOVE_DATASOURCE_PROJECT_PERMISSIONS_FORBIDDEN 403030
MOVE_DATASOURCE_DATASOURCE_PERMISSIONS_FORBIDDEN 403031
UPDATE_DATASOURCE_OWNER_FORBIDDEN 403032
UPDATE_WORKBOOK_SHOW_TABS_FORBIDDEN 403033
ADD_USER_TO_SITE_FORBIDDEN 403034
QUERY_PERMISSION_TEMPLATES_FOR_DATASOURCE_FORBIDDEN 403035
QUERY_PERMISSION_TEMPLATES_FOR_WORKBOOK_FORBIDDEN 403036
API_VERSION_DEPRECATED 403037
DELETE_PERMISSION_TEMPLATES_FOR_DATASOURCE_FORBIDDEN 403038
OPERATION_FORBIDDEN_PROJECT_LOCKED 403039
GROUP_MEMBERSHIP_UPDATE_FORBIDDEN 403040
UPDATE_PROJECT_FORBIDDEN 403041
ADD_PERMISSION_TEMPLATES_FOR_DATASOURCE_FORBIDDEN 403042
ADD_PERMISSION_TEMPLATES_FOR_WORKBOOK_FORBIDDEN 403043
DELETE_PERMISSION_TEMPLATES_FOR_WORKBOOK_FORBIDDEN 403044
CREATE_PROJECT_FORBIDDEN 403045
DELETE_PROJECT_FORBIDDEN 403046
REMOVE_USER_FROM_SITE_FORBIDDEN 403047
DELETE_ALL_USERS_GROUP_FORBIDDEN 403048
NEW_CONTENT_OWNER_MUST_BE_ADMIN 403049
CHANGE_DATASOURCE_OWNER_DISABLED 403050
QUERY_EXTRACT_REFRESHES_FORBIDDEN 403051
UPDATE_WORKBOOK_FORBIDDEN 403052
CONTENT_REVISIONS_DISABLED 403053
QUERY_DATASOURCE_REVISIONS_FORBIDDEN 403054
CANNOT_DELETE_HEAD_REVISION 403055
QUERY_WORKBOOK_REVISIONS_FORBIDDEN 403056
DELETE_SCHEDULE_FORBIDDEN 403057
QUERY_SUBSCRIPTIONS_FORBIDDEN 403058
DELETE_SUBSCRIPTION_FORBIDDEN 403059
CREATE_SUBSCRIPTION_FORBIDDEN 403060
CREATE_SCHEDULE_FORBIDDEN 403061
UPDATE_DATASOURCE_MULTIPLE_CONNECTIONS_FORBIDDEN 403062
CREATE_SUBSCRIPTION_FORBIDDEN_USER_HAS_NO_PERMISSIONS_TO_CONTENT 403063
CREATE_SUBSCRIPTION_FORBIDDEN_USER_EMAIL_MISSING 403064
UPDATE_SUBSCRIPTION_FORBIDDEN 403065
UPDATE_SCHEDULE_FORBIDDEN 403066
CREATE_SUBSCRIPTION_FORBIDDEN_USER_UNLICENSED 403067
QUERY_VIEW_IMAGE_DISABLED 403068
QUERY_SITES_FORBIDDEN 403069
CANNOT_SWITCH_TO_SAME_SITE 403070
QUERY_GROUPS_FORBIDDEN 403071
QUERY_VIEW_PDF_DISABLED 403072
CANNOT_MOVE_DEFAULT_PROJECT 403073
CANNOT_MOVE_PROJECT_TO_DESCENDANT 403074
QUERY_VIEW_DATA_DISABLED 403075
REFRESH_WORKBOOK_FORBIDDEN 403076
REFRESH_DATASOURCE_FORBIDDEN 403077
CREATE_TASK_FORBIDDEN 403078
QUERY_BACKGROUND_JOBS_DISABLED 403079
CANCEL_BACKGROUND_JOBS_DISABLED 403080
CANCEL_BACKGROUND_JOBS_TYPE_UNSUPPORTED 403081
CANCEL_BACKGROUND_JOBS_ALREADY_COMPLETE 403091
QUERY_FLOW_DATA_CONNECTIONS_FORBIDDEN 403092
ADD_PERMISSION_TEMPLATES_FOR_FLOW_FORBIDDEN 403093
QUERY_PERMISSION_TEMPLATES_FOR_FLOW_FORBIDDEN 403094
DELETE_PERMISSION_TEMPLATES_FOR_FLOW_FORBIDDEN 403095
VIEW_PERMISSIONS_CANNOT_BE_CHANGED 403096
DOWNLOAD_FLOW_FORBIDDEN 403097
UPDATE_FLOW_OWNER_FORBIDDEN 403098
MOVE_FLOW_PROJECT_PERMISSIONS_FORBIDDEN 403099
MOVE_FLOW_FLOW_PERMISSIONS_FORBIDDEN 403100
QUERY_FLOWS_FORBIDDEN 403101
FLOW_RUN_BULKED 403102
UPDATE_FLOW_CONNECTIONS_FORBIDDEN 403103
CANNOT_REFRESH_LIVE_CONNECTIONS 403104
QUERY_WORKBOOK_PDF_DISABLED 403105
SITE_IS_NOT_ENABLED_FOR_MATERIALIZED_VIEWS 403106
WORKBOOK_TOO_LARGE_TO_MATERIALIZE 403107
MATERIALIZED_VIEWS_FEATURE_DISABLED 403108
WEBHOOKS_DISABLED 403109
QUERY_WORKBOOK_DOWNGRADE_FORBIDDEN 403110
DATA_ROLE_VALUES_TOO_LARGE_TO_MATERIALIZE 403111
OPERATION_NOT_ALLOWED_ON_EMBEDDED_DATABASE 403112
OPERATION_NOT_ALLOWED_ON_EMBEDDED_TABLE 403113
ADD_PERMISSION_TEMPLATES_FOR_TABLE_FORBIDDEN 403114
QUERY_PERMISSION_TEMPLATES_FOR_TABLE_FORBIDDEN 403115
DELETE_PERMISSION_TEMPLATES_FOR_TABLE_FORBIDDEN 403116
OPERATION_FORBIDDEN_DATABASE_LOCKED 403117
UPDATE_METRIC_FORBIDDEN 403118
UPDATE_METRIC_OWNER_FORBIDDEN 403119
MOVE_METRIC_PROJECT_PERMISSIONS_FORBIDDEN 403120
MOVE_METRIC_METRIC_PERMISSIONS_FORBIDDEN 403121
REFRESH_METRIC_FORBIDDEN 403122
UPDATE_METRIC_NAME_FORBIDDEN 403123
QUERY_METRICS_FORBIDDEN 403124
VIEW_RECOMMENDATIONS_DISABLED 403125
MATERIALIZED_VIEWS_DOES_NOT_SUPPORT_ENCRYPTED_EXTRACTS 403126
MATERIALIZED_VIEWS_DOES_NOT_SUPPORT_NON_EMBEDDED_CREDENTIALS 403127
QUERY_WORKBOOK_POWERPOINT_DISABLED 403128
OPERATION_NOT_ALLOWED_ON_DATABASE 403129
QUERY_USER_PERMISSIONS_FORBIDDEN 403133
QUERY_SHEET_CROSSTAB_EXCEL_DISABLED 403134
FLOW_RUN_ALREADY_COMPLETE 403135
CANCEL_FLOW_RUNS_DISABLED 403136
CANCEL_FLOW_RUN_FORBIDDEN 403137
QUERY_PERMISSION_TEMPLATES_FOR_METRICS_FORBIDDEN 403138
GET_LOCATION_FOR_CONTENT_FORBIDDEN 403139
CANNOT_MOVE_PUBLISHED_DATASOURCE_TO_PERSONAL_SPACE 403140
UPDATE_DATASOURCE_FORBIDDEN 403141
QUERY_PERMISSION_TEMPLATES_FOR_DATAROLE_FORBIDDEN 403142
QUERY_PERMISSION_TEMPLATES_FOR_LENS_FORBIDDEN 403143
INVALID_REQUEST_FORMAT_FOR_API_VERSION 403144
UPDATE_WORKBOOK_VIEW_OPTIONS_FORBIDDEN 403145
UPDATE_WORKBOOK_VIEW_OPTIONS_FORBIDDEN_BY_PROJECT 403146
UPDATE_PROJECT_VIEW_OPTIONS_FORBIDDEN 403147
UPDATE_PROJECT_VIEW_OPTIONS_FORBIDDEN_BY_PROJECT 403148
FLOW_PARAMETERS_DISABLED_ON_SITE 403149
FLOW_PARAMETERS_ANY_TYPE_DISABLED_ON_SITE 403150
BROADCAST_DISABLED_ON_THE_SITE 403151
QUERY_PERMISSION_TEMPLATES_FOR_DATABASE_FORBIDDEN 403152
DELETE_PERMISSION_TEMPLATES_FOR_DATABASE_FORBIDDEN 403153
ADD_PERMISSION_TEMPLATES_FOR_DATABASE_FORBIDDEN 403154
LINKED_TASKS_DISABLED 403155
MOVE_EXTERNAL_ASSET_PERMISSIONS_FORBIDDEN 403156
FEATURE_DISABLED 403157
CALLING_USER_INSUFFICIENT_PERMISSIONS 403182
USER_LANG_ASSIGNMENT_FORBIDDEN 403193
USER_LOCALE_ASSIGNMENT_FORBIDDEN 403194
SITE_NOT_FOUND 404000
VERSION_NOT_FOUND 404001
USER_NOT_FOUND 404002
UNKNOWN_RESOURCE 404003
DATASOURCE_NOT_FOUND 404004
PROJECT_NOT_FOUND 404005
WORKBOOK_NOT_FOUND 404006
TAG_NOT_FOUND 404007
OPERATION_NOT_SUPPORTED 404008
MISMATCHED_LUID 404009
FAVORITE_NOT_FOUND 404010
VIEW_NOT_FOUND 404011
GROUP_NOT_FOUND 404012
CAPABILITY_NOT_FOUND 404013
PERMISSION_NOT_FOUND 404014
FILE_UPLOAD_NOT_FOUND 404015
AD_DOMAIN_NOT_FOUND 404016
AD_GROUP_NOT_FOUND 404017
JOB_NOT_FOUND 404018
MISMATCH_AD_GROUP_DOMAIN_NAME_ON_SYNC 404019
DATA_CONNECTION_NOT_FOUND 404020
CAPABILITY_NOT_ASSIGNED 404021
USER_NOT_FOUND_IN_GROUP 404022
SCHEDULE_NOT_FOUND 404023
REVISION_NOT_FOUND 404024
SUBSCRIPTION_NOT_FOUND 404025
TASK_NOT_FOUND 404026
FLOW_NOT_FOUND 404027
METRIC_NOT_FOUND 404028
CONTENT_NOT_FOUND 404029
LABEL_NOT_FOUND 404030
DATABASE_NOT_FOUND 404031
TABLE_NOT_FOUND 404032
DATA_ROLE_NOT_FOUND 404033
WEBHOOK_NOT_FOUND 404034
RECOMMENDATION_NOT_FOUND 404035
FLOW_RUN_NOT_FOUND 404036
DATA_QUALITY_TRIGGER_NOT_FOUND 404037
COLLECTION_NOT_FOUND 404038
PERSONAL_SPACE_NOT_FOUND 404039
LOCATION_NOT_FOUND 404040
CONNECTED_APP_NOT_FOUND 404041
CONNECTED_APP_SECRET_NOT_FOUND 404042
FLOW_PARAMETER_NOT_FOUND 404043
BROADCAST_NOT_FOUND 404044
LINKED_TASK_NOT_FOUND 404045
LENS_NOT_FOUND 404046
EXTERNAL_AUTHZ_SERVER_NOT_FOUND 404047
API_TOKEN_NOT_FOUND 404050
PERSONAL_ACCESS_TOKEN_NOT_FOUND 404051
SCIM_CONFIGURATION_NOT_FOUND 404057
METHOD_NOT_ALLOWED 405000
UNACCEPTABLE_MEDIA_TYPE 406000
USER_ALREADY_ON_SITE 409000
SITE_NAME_EXISTS 409001
SITE_URL_EXISTS 409002
USER_ASSET_CONFLICT 409003
INVALID_PARAMETER 409004
CANNOT_ADD_USER_WITH_GUEST_ROLE 409005
PROJECT_NAME_EXISTS 409006
FAVORITE_LABEL_EXISTS 409007
CONFLICTING_PERMISSION 409008
GROUP_NAME_EXISTS 409009
EMAIL_EXISTS 409010
USER_ALREADY_IN_GROUP 409011
WORKBOOK_NAME_ALREADY_EXISTS 409012
WORKBOOK_ALREADY_EXISTS_IN_DESTINATION 409013
INSUFFICIENT_USER_LICENSES 409014
DATASOURCE_ALREADY_EXISTS 409015
IMPLICITLY_ADDED_SYSTEM_ADMIN 409016
USER_ALREADY_MEMBER_OF_SITE 409017
UPDATE_USER_SITE_USER_QUOTA_REACHED 409018
SITE_ID_EXISTS 409019
INVALID_SITE_ID 409020
SCHEDULE_NAME_EXISTS 409021
GUEST_ACCESS_CANNOT_BE_SET 409022
DATAALERT_NOT_FOUND 409023
GENERIC_QUERY_DATAALERTS_ERROR 409024
QUERY_DATAALERTS_FORBIDDEN 409025
GENERIC_DELETE_DATAALERT_ERROR 409026
DELETE_DATAALERT_FORBIDDEN 409027
ADD_RECIPIENT_TO_DATAALERTS_FORBIDDEN 409028
DELETE_DATAALERT_RECIPIENT_FORBIDDEN 409029
UPDATE_DATAALERT_FORBIDDEN 409030
NO_ENCRYPTABLE_EXTRACTS 409031
ENCRYPT_EXTRACTS_FORBIDDEN 409032
EXTRACT_ENCRYPTION_NOT_ENABLED_ON_SERVER 409033
CANNOT_ENCRYPT_ON_SITE_WITH_DISABLED_ENCRYPTION 409034
CANNOT_DECRYPT_ON_SITE_WITH_ENFORCED_ENCRYPTION 409035
CANNOT_PUBLISH_ENCRYPTED_ON_SITE_WITH_DISABLED_ENCRYPTION 409036
CANNOT_PUBLISH_UNENCRYPTED_ON_SITE_WITH_ENFORCED_ENCRYPTION 409037
REKEY_SITE_EXTRACTS_FORBIDDEN 409038
CANNOT_REKEY_EXTRACTS_ON_SITE_WITH_DISABLED_ENCRYPTION 409039
GENERIC_REKEY_SITE_EXTRACTS_ERROR 409040
FLOW_ALREADY_EXISTS_IN_DESTINATION 409041
DECRYPT_EXTRACTS_FORBIDDEN 409042
GENERIC_ENCRYPT_SITE_EXTRACTS_ERROR 409043
GENERIC_DECRYPT_SITE_EXTRACTS_ERROR 409044
GENERIC_DATABASE_ERROR 409045
GENERIC_QUERY_DATABASE_ERROR 409046
GENERIC_DELETE_DATABASE_ERROR 409047
GENERIC_ADD_TAGS_TO_DATABASE_ERROR 409048
GENERIC_DELETE_TAG_FROM_DATABASE_ERROR 409049
GENERIC_UPDATE_DATABASE_ERROR 409050
UPDATE_DATABASE_FORBIDDEN 409051
GENERIC_TABLE_ERROR 409052
GENERIC_QUERY_TABLE_ERROR 409053
GENERIC_DELETE_TABLE_ERROR 409054
GENERIC_ADD_TAGS_TO_TABLE_ERROR 409055
GENERIC_DELETE_TAG_FROM_TABLE_ERROR 409056
GENERIC_UPDATE_TABLE_ERROR 409057
UPDATE_TABLE_FORBIDDEN 409058
GENERIC_COLUMN_ERROR 409059
GENERIC_QUERY_COLUMN_ERROR 409060
GENERIC_DELETE_COLUMN_ERROR 409061
GENERIC_ADD_TAGS_TO_COLUMN_ERROR 409062
GENERIC_DELETE_TAG_FROM_COLUMN_ERROR 409063
UPDATE_COLUMN_FORBIDDEN 409064
GENERIC_UPDATE_COLUMN_ERROR 409065
COLUMN_NOT_FOUND 409066
EXTRACT_CREATION_FORBIDDEN 409067
CANNOT_CREATE_EXTRACT_ON_EXTRACT_DATASOURCE 409068
CANNOT_CREATE_EXTRACT_DUPLICATE 409069
GENERIC_EXTRACT_CREATION_ERROR 409070
CANNOT_CREATE_ENCRYPTED_EXTRACT_WHEN_EXTRACTION_SETTINGS_DISABLED 409071
CANNOT_CREATE_UNENCRYPTED_EXTRACT_WHEN_EXTRACTION_SETTINGS_ENFORCED 409072
CANNOT_CREATE_ENCRYPTED_EXTRACT_MIXED_WITH_UNENCRYPTED_DATASOURCE 409073
CANNOT_CREATE_UNENCRYPTED_EXTRACT_MIXED_WITH_ENCRYPTED_DATASOURCE 409074
ENCRYPT_PARAMETER_REQUIRED 409075
NO_VALID_DATASOURCE_TO_CREATE_EXTRACT 409076
CANNOT_CREATE_EXTRACT_WHEN_PENDING_EXTRACT_EXISTS 409077
DELETE_EXTRACT_FORBIDDEN 409078
GENERIC_DELETE_EXTRACT_FOR_DATASOURCE_ERROR 409079
GENERIC_DELETE_EXTRACTS_FOR_WORKBOOK_ERROR 409080
DATA_ROLE_ALREADY_EXISTS_ERROR 409081
RUN_NOW_FORBIDDEN 409082
DELETE_EMBEDDED_DATASOURCE_NOTSUPPORTED 409083
GENERIC_CREATE_VIEW_RECOMMENDATIONS_DISMISSAL_ERROR 409084
GENERIC_DELETE_VIEW_RECOMMENDATIONS_DISMISSAL_ERROR 409085
METRIC_ALREADY_EXISTS_IN_DESTINATION 409086
DATA_ACCELERATION_INFO_ACCESS_FORBIDDEN 409087
GENERIC_UNGROUP_DATABASE_ERROR 409088
EXTRACT_OPERATION_NOT_ALLOWED 409090
ADMIN_SCHEDULES_NOT_SUPPORTED 409091
BATCH_CREATE_TAGS_ERROR 409092
EXTRACT_OPERATION_ALREADY_QUEUED 409093
DATA_UPDATE_JOB_ALREADY_QUEUED 409094
GENERIC_ASSET_ANCHOR_ERROR 409095
ASSET_ANCHOR_RETRIEVAL_FORBIDDEN 409096
ASSET_ANCHOR_INVALID_PARAMETER 409097
INVALID_LOCATION_TYPE_VALUE 409100
INVALID_MISSING_LOCATION_TYPE 409101
INVALID_MISSING_LOCATION_ID 409102
INVALID_TYPE_LOCATION_PROJECT 409103
PERSONAL_SPACE_FEATURE_DISABLED 409104
SITE_SWITCH_DISABLED 409105
CONTENT_MIGRATION_NOT_AUTHORIZED 409107
USER_NOTIFICATION_PREFERENCES_INVALID_TYPE 409109
USER_NOTIFICATION_PREFERENCES_INVALID_CHANNEL 409110
USER_NOTIFICATION_PREFERENCES_FF_DISABLED 409111
CONTENT_MIGRATION_ALREADY_EXISTS 409112
USER_NOTIFICATION_PREFERENCES_UPDATE_PREFERENCES_FORBIDDEN 409113
USER_NOTIFICATION_PREFERENCES_UPDATE_SETTING_OVERRIDDEN 409114
USER_NOTIFICATION_PREFERENCES_UPDATE_MULTI_STATUS 409115
USER_NOTIFICATION_PREFERENCES_UNKNOWN 409116
GROUPSET_NOT_FOUND 409120
GROUPSET_NAME_EXISTS 409121
PAYLOAD_TOO_LARGE 413000
TOO_MANY_REQUESTS 429000
USER_ALREADY_IN_IDENTITY_POOL 429001
CANNOT_ADD_USER_TO_IDENTITY_POOL 429002
CANNOT_REMOVE_USER_FROM_IDENTITY_POOL 429003
INTERNAL_SERVER_ERROR 500000
INTERNAL_SERVICE_ERROR 500001
BROADCAST_SERVICE_ERROR 500002
GENERIC_PUBLISH_TO_SALESFORCE_APPS_ERROR 500003
LANG_ASSIGNMENT_FAILED_UNKNOWN_ERROR 500109
LOCALE_ASSIGNMENT_FAILED_UNKNOWN_ERROR 500110
[Skip to main content](#main-content) # Identifying Resources Using Locally Unique Identifiers (LUIDs) Resources on Tableau Server typically have a friendly name, such as "Default" for a site name, "Developers" for a group, and "Adam" for a user. These are the names that you see when you work in the Tableau Server user interface. These resources are also identified internally by Tableau Server using a locally unique identifier (LUID). LUIDs are 32-character hexadecimal strings separated by hyphens in a format like this: `9f8e7d6c5b-4a3f-2e1d-0c9b-8a7f6e5d4c`. Tableau Server uses LUIDs because friendly names might change or be reassigned. For example, you can change the friendly name of a user without affecting the user's permissions or membership in groups, because the LUID for that user does not change. In addition, you might delete a user named Adam because that user has left your company. If you later create a new user named Adam for a new employee, that user identity in Tableau Server should be distinct from the older identity, and using a different LUID for the new user guarantees that. **Note**: A LUID is unique for each content type within a site. A project and a workbook on the same site could theoretically have the same LUID, but that is unlikely. It's more likely that a LUID could be repeated on another site. For example: two workbooks on two different sites could have the same LUID. ## Getting LUIDs for Resources When you create a new resource, or if you query the server for a list of resources, the server returns the LUIDs for the resource. For example, [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in), [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site), [Create User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_user), [Get Users in Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_in_site), and [Query Groups](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groups) all return LUIDs for resources. The following example shows the return value for a call to [Query Groups](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groups), which includes the friendly name for each group as well as the group's LUID: ``` ``` ## Using LUIDs in API Calls When you specify a resource in a call, you typically need to provide the resource's LUID. For example, all calls except [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) call require you to include a site LUID in the URI, as in this example of calling [Query Groups](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groups): ``` http://my-server/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d/users ``` Similarly, if you want to update user information using the [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_user) API, you include the LUIDs for both the site and the user in the URI, as in this example: ``` http://my-server/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d/users/9f9e9d9c8-b8a8-f8e7-d7c7-b7a6f6d6e6d ``` In the preceding example, `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d` is the site ID, and `9f9e9d9c8-b8a8-f8e7-d7c7-b7a6f6d6e6d` is the ID of the user to update. [Skip to main content](#main-content) # Identity Pools Methods Identity pools are an identity management tool that uses provisioning and authentication information to enable user access to Tableau Server. Identity pools enable a more centralized and flexible identity management workflow. For more information, see [Provision and Authenticate Users Using Identity Pools](https://help.tableau.com/current/server-linux/en-us/identity_pools.htm) in the Tableau Server Help. The identity pools methods allow you to: 1. **Provision users** by creating a new local identity store instance. **Note:** Skip this step to use an existing local identity store or the external identity store you configured in TSM during Tableau Server setup. 2. **Set up an authentication method** to authenticate your users to Tableau Server using OpenID Connect (OIDC). 3. **Create an identity pool** that uses the identity store and authentication method you configured. 4. **Add users to an identity pool** using the [Add User to Identity Pool](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#add_user_to_idpool) endpoint using the Tableau REST API. Refer to the Tableau Server Help for [testing](https://help.tableau.com/current/server-linux/en-us/identity_pools_manage.htm#test), [managing](https://help.tableau.com/current/server-linux/en-us/identity_pools_manage.htm#manage), and [troubleshooting](https://help.tableau.com/current/server/en-us/identity_pools_manage.htm#troubleshoot) identity pools. **Note:** Identity pools do not replace the user provisioning and authentication configurations you made during Tableau Server setup. The purpose of identity pools is to complement and support additional user provisioning and authentication options you might need in your organization. ### Prerequisites Before getting started with identity pools, the following requirements must be met: - Integration with an OIDC identity provider (IdP), such as Okta, is already configured - You are running Tableau Server 2023.1 or later - You have performed the [identity migration](https://help.tableau.com/current/server-linux/en-us/identity_migration.htm) if you are running Tableau Server after upgrading from version 2021.4 or earlier - You have performed the steps described at [Step 1: Configure Tableau Server and establish a session](https://help.tableau.com/current/server-linux/en-us/identity_pools_manage.htm#step1) in the Tableau Server Help You can use the [Identity Pools](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-b229dea8-ee9c-4fbb-80d1-7e9153c207ee) Postman collection in the Salesforce Developer's Postman workspace to learn about, develop, and test the methods described. This functionality relates to the concepts and procedures described in the [Set Up and Manage Identity Pools](https://help.tableau.com/current/server/en-us/identity_pools_manage.htm) topic in the Tableau Server Help. ## 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: [Identity Pools (Server-only) Methods](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-7355cbd6-bbd1-4561-bcc8-8d799d3ee8af) ## Add User to Identity Pool Add a user to a specified identity pool. This enables the user to sign in to Tableau Server using the specified identity pool. This method is not available for Tableau Cloud. For more information about identity pools, see [Provision and Authenticate Users Using Identity Pools](https://help.tableau.com/current/server-linux/en-us/identity_pools.htm). #### URI POST /api/api-version/sites/site-id/users/identityPool #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that is associated with the user you want to add to the identity pool.
#### Request Body ``` ``` #### Attribute Values
user-name

The name of the user to add.

site-role

Site role of the user. You can use one of the following values:

  • Creator
  • Explorer
  • ExplorerCanPublish
  • ServerAdministrator
  • SiteAdministratorExplorer
  • SiteAdministratorCreator
  • Unlicensed
  • ReadOnly
  • Viewer
user-id Required. The ID (not name) of the user to add. You can get the user ID by calling Get Users on Site.
authentication-configuration The authentication configuration instance configured for the identity pool you want to add the user to. You can get the authentication configuration instance by calling List Authentication Configurations endpoint in Tableau REST OpenAPI.
idpool-uuid The ID of the identity pool that you wan to add the user to. You can get the identity pool ID by calling the List Identity Pools endpoint in the Tableau REST OpenAPI.
identity-uuid The identifier for the user you want to add. Identifiers are only used for identity matching purposes. For more information about identifiers, see Usernames and Identifiers in Tableau in the Tableau Server Help.
#### Permissions This method can only be called by Tableau Server administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:identity_pools_users: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 200 #### Response Body **Example response:** ``` ``` #### Version Version 3.19 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
429429001User conflictThe specified user is already a member of the identity pool.
429429002Can't add userThere was a problem and the user couldn't be added to the identity pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/identityPool" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-user-to-idpool.xml` - `MY-SERVER` is the name or IP address of your server. - `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d` is the ID of the site, as returned by a previous call to [Sign In](#sign_in). - `12ab34cd56ef78ab90cd12ef34ab56cd` is the credentials token returned by a previous call to [Sign In](#sign_in). **Content of add-user-to-idpool.xml:** ``` ``` **Example response:** ``` ``` ## Remove User from Identity Pool Remove a user from a specified identity pool. This method is not available for Tableau Cloud. **Version:** Available in API 3.19 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:** Tableau Server administrators only. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:identity\_pools\_users:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/users/user-id/identityPool/idpool-uuid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that is associated with the user you want to remove from the identity pool.
user-idThe ID of the user to remove from the identity pool.
idpool-uuidThe ID of the identity pool to remove the user from. You can get the identity pool ID by calling the List Identity Pools endpoint in the Tableau REST OpenAPI.
#### Request Body None #### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/7ad8f89e-c2a1-44b4-9413-ac8a62286a7a/identityPool/" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` - `MY-SERVER` is the name or IP address of your server. - `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d` is the ID of the site, as returned by a previous call to [Sign In](#sign_in). - `7ad8f89e-c2a1-44b4-9413-ac8a62286a7a` is the ID of the user to remove. - `df47cf24-5ed3-11ed-9b6a-0242ac12000` is the ID of the identity pool. - `12ab34cd56ef78ab90cd12ef34ab56cd` is the credentials token returned by a previous call to [Sign In](#sign_in). The response contains no body (data) if the user is successfully removed from the identity pool. The HTTP response code is 204 if the delete operation succeeded. #### Permissions This method can only be called by Tableau Server administrators. #### Response Code 204 #### Response Body None #### Version Version 3.19 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not DELETE.
429429003Can't remove userThere was a problem and the user couldn't be removed from the identity pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Authentication Configuration Delete an authentication instance. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/authn-service/auth-configurations/{id} [view details](#) ## Delete Identity Pool Delete an identity pool. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/authn-service/identity-pools/{uuid} [view details](#) ## Delete Identity Store Delete an identity store. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/authn-service/identity-stores/{id} [view details](#) ## Get Identity Pool Get information about an identity pool. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/authn-service/identity-pools/{uuid} [view details](#) ## List Authentication Configurations on Server List information about all authentication instances associated with identity pools. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/authn-service/auth-configurations [view details](#) ## List Identity Pools List all identity pools. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/authn-service/identity-pools [view details](#) ## List Identity Stores List information about all identity store instances used to provision users. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/authn-service/identity-stores [view details](#) ## Create Authentication Configuration Create an instance of OpenID Connect (OIDC) authentication. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/authn-service/auth-configurations [view details](#) ## Create Identity Pool Create an identity pool. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/authn-service/identity-pools [view details](#) ## Configure Identity Store Configure a new local identity store to provision users. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/authn-service/identity-stores [view details](#) ## Update Authentication Configuration Update an authentication instance. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/authn-service/auth-configurations/{id} [view details](#) ## Update Identity Pool Update information about an identity pool. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/authn-service/identity-pools/{uuid} [view details](#) [Skip to main content](#main-content) # Jobs, Tasks, and Schedules Methods Using the jobs, tasks, and schedules methods of the Tableau Server REST API you can do the operations listed in the following categories: **Extract Refresh Tasks:** (task to refresh the extract of a data source of a site) - See [Extract and Encryption Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm) **Data Acceleration Tasks:** (Tableau Server only) _Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2._ - Get a list of data acceleration tasks for a site - Delete a data acceleration task **Jobs:** (work items of a task carried out by the Tableau service) - Get a filtered, sorted list of jobs for a site and the details of specific jobs - Cancel jobs that are in progress **Server Schedules _(Tableau Server only)_:** (the configuration of when tasks will be initiated on Tableau Server) _For Tableau Cloud, you configure the frequency attributes of a Cloud task, instead of adding the task to a separate Server Schedule as described for Tableau Server on this page. See [Extract and Encryption Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm) and [Subscription Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm) to schedule tasks on Tableau Cloud._ - Create, update, and delete schedules - Create, update, and delete custom schedules for extract refresh and subscription tasks - List schedules, and get the details of specific tasks, jobs and schedules on a site This functionality relates to the UI elements and concepts described at: [Extract Refresh Schedules](https://help.tableau.com/current/server/en-us/publish.htm). The [Tableau Server Client library](https://tableau.github.io/server-client-python/), a Python wrapper for the REST API, offers the following related items: [Jobs Methods](https://tableau.github.io/server-client-python/docs/api-ref#jobs); and [Schedules Methods](https://tableau.github.io/server-client-python/docs/api-ref#schedules). ## 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: Jobs, Tasks, and Schedules](https://www.postman.com/salesforce-developers/salesforce-developers/folder/bagitd5/jobs-tasks-and-schedules) ## Add Data Source to Server Schedule Adds a task to refresh a data source to an existing server schedule on Tableau Server. _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task)._ #### URI PUT /api/api-version/sites/site-id/schedules/schedule-id/datasources #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
schedule-idThe ID of the schedule that you are associating with the data source.
#### Request Body ``` ``` #### Attribute Values
datasource-idThe ID of the data source to add to the schedule.
#### Permissions Tableau Server users who are not server administrators or site administrators can only add a data source to a schedule if they own the data source, or are the project leader for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 ``` ``` #### Version Version 2.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user called this method, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404004Resource not foundThe data source ID in the request body is unknown.
405405000Invalid request methodRequest type was not PUT.
500500000Internal Server ErrorThe schedule ID in the URI is unknown.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/datasources" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @add-to-schedule.xml` **Content of add-to-schedule.xml:** ``` ``` **Example response:** ``` ``` ## Add Virtual Connection to Server Schedule Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server. _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task)._ This method identifies and refreshes only the tables in the virtual connection that are configured as extracts; live tables are ignored. **Version**: Available in API 3.30 and later. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Tableau Server users who are not server administrators or site administrators can only add a virtual connection to a schedule if they own the virtual connection, or are the project leader for the project that contains the virtual connection. **Access Scope**: `tableau:schedules:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/schedules/schedule-id/virtualconnections #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
schedule-idThe LUID for the schedule that you are associating with the virtual connection.
#### Request Body ``` starting-item-id ``` #### Attribute Values
transaction-level

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
incremental-flag

Optional, boolean. Default is false.

  • If set to false, do a full refresh. Fully refresh all extracts including those configured for incremental extract.
  • If set to true, do an incremental refresh. Add new rows to incremental extracts. Full refresh other extracts.
virtualconnection-id The LUID of the virtual connection to add to the schedule.
starting-item-id The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element.
#### cURL Request Example ``` curl --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/virtualconnections' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 200 #### Response Body ``` 3577de68-2779-4962-b13d-3265ec98a4cb ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
400 400223 Virtual connection table not found. A LUID in startingItemIds is not an extract-eligible table on the virtual connection.
400 400225 Duplicate virtual connection table. startingItemIds contains the same table LUID more than once.
400 404049 No virtual connection specified. The request body must include a virtual connection in the extractRefresh element.
400 409004 Invalid parameter. startingItemIds contains a value that is not a valid LUID.
400 409090 No extract-eligible tables. The virtual connection has no active revision, or none of its tables are configured for extract refresh.
403 403078 Unable to create the task.

One of the following applies:

  • The user is not a system or site administrator and does not own the virtual connection.
  • The virtual connection already has a refresh scheduled on this schedule.
  • The virtual connection is in a personal space.
  • The extract refresh operation is not allowed for the virtual connection.
404 404023 Schedule not found. Check the schedule LUID.
404 404049 Virtual connection not found. Check the virtual connection LUID.
405 405000 Method not allowed. Request type must be PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Workbook to Server Schedule Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server. The task type must match the schedule type. For a list of schedule types, see [Create a Schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_schedule). _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task)._ **Note:** This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI PUT /api/api-version/sites/site-id/schedules/schedule-id/workbooks #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
schedule-idThe ID of the schedule that you are associating with the workbook.
#### Request Body ``` ``` #### Attribute Values
workbook-idThe ID of the workbook to add to the schedule.
#### Permissions Only Tableau Server users who are server administrators or site administrators can add a workbook to a data acceleration schedule. Tableau Server users who are not server administrators or site administrators can only add a workbook to other types of schedules if they own the workbook, or are the project leader for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 ``` ``` #### Version Starting in Tableau Server 10.5 (API 2.8) you can add a task to refresh a workbook extract. In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15), you can add a task to add data acceleration to a workbook. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user called this method, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404006Resource not foundThe workbook ID in the request body is unknown.
405405000Invalid request methodRequest type was not PUT.
500500000Internal Server ErrorThe schedule ID in the URI is unknown.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/ 1edc53ac-e247-4870-9fd3-6fad0ce5f84d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/workbooks" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @add-to-schedule.xml"` **Content of add-to-schedule.xml:** ``` ``` **Example response:** ``` ``` ## Batch Update Schedule State Updates the state of one or more schedules. Use the `updateAll` URI parameter to update the state of all schedules in a single call. **Version**: Available in API 3.27 (Tableau Server 2025.3 and later. Not available for Tableau Cloud.) **License**: No additional license required. **Permissions**: Only server administrators. **Access Scope**: `tableau:schedules:update` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/schedules?state=state-enum PUT /api/api-version/schedules?state=state-enum&updateAll=update-all-flag #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
state-enum Required, enum. Either active or suspended. The state for the schedule(s).

update-all-flag

Optional, boolean. If true, then the list of schedule IDs in the request body is ignored, and the operation affects all schedules on the Tableau Server.

Note: A common use case for this method is suspending all schedules before a maintenance window using the `updateAll` URI parameter. If, after the maintenance window, you use the same tactic and _activate_ all schedules using the `updateAll` URI parameter, you risk activating schedules that may have been intentionally suspended in the past, before you used `updateAll` to suspended all schedules. Instead, when suspending all schedules using the `updateAll` URI parameter, note which schedule LUIDs appear in the response body. This tells you which schedules were changed from active to suspended. Then, after the maintenance window, re-activatate only those schedules, not _all_ schedules. #### Request Body ``` schedule-id ``` { "scheduleLuids": { "scheduleLuid": \[ "schedule-id" \] } } #### Request Attributes

schedule-id

The LUID of the schedule. You can include multiple schedule-ids using additional <scheduleLuid> elements (in XML) or by comma-separating multiple schedule-ids (in JSON).

Note: If the updateAll URI parameter is included, schedule-ids in the request body are ignored.

#### cURL Request Example ``` curl "https://MY-SERVER/api/3.27/schedules?state=active&updateAll=true" -X PUT -H "X-Tableau-Auth: a1B2c3D4e5F6g7H8i9J0kL|a1B2c3D4e5F6g7H8i9J0kL1m2N3o4P5q|12345678-90ab-4cde-8f01-234567890abc" -d @data.xml ``` **Content of data.xml:** ``` 12ab34cd-56ef-78ab-90cd-12ef34ab56cd 08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6 ``` #### Response Code 200 #### Response Body The response body is a list of schedules that were updated with the call. ``` schedule-id ``` ``` { "scheduleLuids": { "scheduleLuid": [ "schedule-id" ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Generic errorAn unknown error occurred. The content of the request body may be missing or incomplete, or may contain malformed XML.
403403188Permissions errorUser calling the method isn't a server administrator.
403403189Invalid LUIDOne or more of the schedule LUIDs isn't a valid LUID.
404404023LUID not foundOne or more of the schedule LUIDs isn't found.
405405000Availability errorThis method only exists on Tableau Server. Tableau Cloud isn't supported.
409409004Parameter errorThe state parameter is absent or not recognized; or the updateAll parameter was absent or false and no schedule LUIDs were provided.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Cancel Job Cancels a job specified by job ID. To get a list of job IDs for jobs that are currently queued or in-progress, use the [Query Jobs](#query_jobs) method. The following jobs can be canceled using the **Cancel Job** method: - Full extract refresh - Incremental extract refresh - Subscription - Flow Run - Data Acceleration _Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2._ - Bridge full extract refresh - Bridge incremental extract refresh - Queue upgrade Thumbnail (Job that puts the upgrade thumbnail job on the queue) - Upgrade Thumbnail #### URI PUT /api/_api-version_/sites/_site-id_/jobs/_job-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site where the job is running.
job-idThe ID of the job to cancel.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:jobs: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 None #### Version Version 3.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403032Update forbiddenA non-administrator user tried to cancel a job.
403403091Can not cancel job, because it's already complete.The job ID provided is for a job that has already succeeded or failed.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/jobs/2474164d-8d37-4a4c-abc7-c2070fd25fd5" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Create Cloud Extract Refresh Task Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection. _For Tableau Server, see [Add data source to server schedule](#add_data_source_to_schedule), [Add workbook to server schedule](#add_workbook_to_schedule), and [Add virtual connection to server schedule](#add_virtual_connection_to_schedule)._ **Version:** Available in API 3.20 (Tableau Cloud June 2023) and later. Virtual connection support added in API 3.30. 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 for a data source or workbook target. A virtual connection target requires Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions:** Administrators and any user with the creator role can create a custom schedule for an extract refresh.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks: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-id/tasks/extractRefreshes #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
#### Request Body ``` ``` ``` { "extractRefresh": { "type": "FullRefresh", "workbook": { "id": "54321fd-6365-44d5-925b-644e5281b605" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } ``` #### Request Attributes All request attributes are **required** to create a custom schedule for an extract refresh, except where noted below.
extractRefresh type The type of extract refresh being scheduled. Valid values include:
  • FullRefresh
  • IncrementalExtract
extractRefresh transactionLevel

(Optional) : Only used with a virtual connection.

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
workbook id
or datasource id
or virtualConnection id
The LUID of the workbook, data source, or virtual connection that is the target of the custom schedule.
startingItemId

Only used with a virtual connection, when extractRefresh type is FullRefresh

The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element. See Virtual Connection Example.

tableLuid

Only used with a virtual connection, when extractRefresh type is IncrementalExtract

The LUID of an extract table in the virtual connection. You may have more than one <tableLiud> element inside of a <tableLiuds> element. See Virtual Connection Example.

schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### Virtual Connection Example When the target is a virtual connection, use `virtualConnection id` instead of `workbook id` or `datasource id`. The following example includes only the `` and child elements for brevity; see the primary example above for the a full request without the elements that apply only to virtual connections. _Incremental refresh of specific tables, with a table-level transaction:_ ``` b4e39d59-19c3-4380-8ea4-9bfa4ed8fb84 ``` #### cURL Request Example `curl --location --request POST "https://10ax.online.tableau.com/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/tasks/extractRefreshes" --header "Content-Type: application/xml" --data " "` 200 #### Response Body When the target is a virtual connection, the response's `extractRefresh` element includes a `transactionLevel` attribute and a `virtualConnection` element (with a sibling `startingItemIds`, if starting items were specified) in place of `datasource` or `workbook`. ``` ``` ``` { "extractRefresh": { "id": "13237fd-6365-44d5-925b-644e5281b605", "consecutiveFailedCount": "0", "type": "IncrementalRefresh", "datasource": { "id": "0057ccac-872a-11e5-bb51-f763326b1350" } }, "schedule": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400400225Duplicate starting itemstartingItemIds contains a duplicate table LUID.
409409090Extract operation not allowedThe virtual connection has no extract-configured tables; all tables are live.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
404404026Task not foundThe task for the extract refresh could not be found.
409409004invalid parameter valueThe request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between start and end times are not increments of one hour, this error will result.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Server Schedule Creates a new server schedule on Tableau Server. _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task) and [Create subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#create_subscription_cloud)._ Schedules are not specific to sites. For more information, see [Creating a Flow Schedule](https://help.tableau.com/current/server/en-us/prep_conductor_create_schedule_definitions.htm), [Extracts and Refresh Schedules](https://help.tableau.com/current/server/en-us/publish.htm) and [Create or Modify a Schedule](https://help.tableau.com/current/server/en-us/help.htm#schedule_manage_create.htm) in the Tableau Server documentation. Scheduling flows requires Tableau Prep Conductor to be enabled on your Tableau Server. For more information, see [Enable Tableau Prep Conductor](https://help.tableau.com/current/prep/en-us/prep_conductor_config_server_overview.htm). **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/schedules #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body ``` ``` #### Attribute Values
schedule-name The name to give to the schedule. This name identifies the schedule in the server environment when users select a schedule and manage schedule information.
schedule-priority An integer value between 1 and 100 that determines the default priority of the schedule if multiple tasks are pending in the queue. Lower numbers have higher priority.
schedule-type Flow to create a flow schedule, Extract to create an extract refresh schedule, Subscription to create a subscription schedule, or DataAcceleration to create a data acceleration schedule. Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.
schedule-execution-order Parallel to allow jobs associated with this schedule to run at the same time, or Serial to require the jobs to run one after the other.
schedule-frequency

This represents the granularity of the schedule.

  • Hourly. Jobs can be scheduled to run at intervals specified in run one or more times per day at intervals specified in minutes or hours. Valid intervals are 15 and 30 minutes and 2, 4, 6, 8, and 12 hours.

  • Daily. Jobs can be scheduled to run once per day.
  • Weekly. Jobs can be scheduled to run one or more times per week.
  • Monthly. Jobs can be scheduled to run once per month on a specific day.

The value you provide for schedule-frequency determines whether you must include an end-time value, and what is required in the contents of the <intervals> element.

start-time The time of day on which scheduled jobs should run (or if the frequency is hourly, on which they should start being run), in the format HH:MM:SS (for example, 18:30:00). This value is required for all schedule frequencies. The entered time will be applied based on the time zone of your server.
end-time If the schedule frequency is Hourly, the time of day on which scheduled jobs should stop being run, in the format HH:MM:SS (for example, 23:30:00). Hourly jobs will occur at the specified intervals between the start time and the end time. For other schedule frequencies, this value is not required; if the attribute is included, it is ignored. The entered time will be applied based on the time zone of your server.
interval-expression A value that specifies the interval between jobs associated with the schedule. The value you specify here depends on the value specified in schedule-frequency.

Hourly

The interval expression is only one of the following:

  • hours="interval" where interval is 1, 2, 4, 6, 8, or 12, representing how many hours between jobs.
  • minutes="interval" where interval is 15 or 30, representing how many minutes between jobs.

You can specify an interval in hours or minutes, but not both.

Daily

If the schedule frequency is Daily, no interval is specified. Any information specified in the <intervals> element is ignored.

Weekly

The interval expression is weekDay="weekday", where weekday is Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

You can specify multiple <interval> elements to indicate that scheduled jobs should run on multiple days during the week.

Monthly

The interval expression is monthDay="day", where day is either the day of the month (1, 2, etc.) or LastDay.

Note: If you want to specify multiple days in the month, you can do this using the web interface. You cannot create or update such a monthly schedule using REST API.

#### 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:schedules: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 ``` ``` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400064Error creating scheduleAn unspecified error occurred while trying to create the schedule.
400409004Bad requestThe content of the request body is missing or incomplete. For hourly, daily, or monthly schedules, this often means that the content of the <intervals> element does not match the expected format. The <detail> element of the error provides detail about the expected format.
405405000Invalid request methodRequest type was not POST.
409409021Schedule name conflictThe schedule name in the request already belongs to an existing schedule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/schedules/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-schedule.xml` **Content of create-schedule.xml for an hourly schedule** ``` ``` **Response body** ``` ``` **Content of create-schedule.xml for a daily schedule** For a daily schedule, frequencyDetails is set to `Daily`. The start attribute is required. No intervals element is required. **Daily schedules on any recurrence must have the same start and end minute. The hour can be different. However, if the daily schedule is set to only happen once a day, then it needs only a start time and not an end time.** ``` ``` **Response body** ``` ``` **Content of create-schedule.xml for a weekly schedule** For a weekly schedule, frequencyDetails is set to `Weekly`. A start attribute is required. The intervals element is required, and must include between 1 and 7 interval subelements that contain a weekDay attribute. Valid values for the weekDay attribute are `Sunday`, `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, or `Saturday`. ``` ``` **Response body** ``` ``` **Content of create-schedule.xml for a monthly schedule** For a monthly schedule, frequencyDetails is set to `Monthly`. A start attribute is required. The intervals element is required, and must include 1 interval subelement that contains a monthDay attribute. Valid values for the monthDay attribute are integers between 1 and 31 and the string `LastDay`. ``` ``` **Response body** ``` ``` ## Delete Data Acceleration Task Deletes a data acceleration task. This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI DELETE /api/api-version/sites/site-id/tasks/dataAcceleration/dataAcceleration-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the task.
dataAcceleration-idThe ID of the task to remove.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:data_acceleration_tasks: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 200 #### Response Body None #### Version In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15) data acceleration is supported. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403409087Permission deniedThe user isn't authorized to view data acceleration tasks.
403409087Permission deniedThe user isn't authorized to access the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404026Task not foundThe task id in the URI doesn't correspond to an existing task.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/dataAcceleration/7a2a7c6d-5e4f-3a2b-1c0d-9e8f7a6b3r4q" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Delete Server Schedule Deletes the specified schedule on Tableau Server. _For Tableau Cloud, see [Delete Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#delete_extract_refresh_task) and [Delete Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#delete_subscription)._ #### URI DELETE /api/api-version/schedules/schedule-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
schedule-idThe ID of the schedule to delete. To determine what schedules are available, call List Server Schedules.
#### 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:schedules: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 #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400059Error deleting the schedule.An unspecified error occurred during the deletion operation.
404404023Schedule not foundThe specified schedule doesn't correspond to an existing schedule on the site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Data Acceleration Tasks in a Site Returns a list of data acceleration tasks for the site. This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI GET /api/api-version/sites/site-id/tasks/dataAcceleration #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the task.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:data_acceleration_tasks: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 ``` ... additional tasks ... ``` #### Version In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15) data acceleration is supported. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403409087Permission deniedThe user isn't authorized to view data acceleration tasks.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
40540500Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/dataAcceleration" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Extract Refresh Task Returns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection. #### URI GET /api/api-version/sites/site-id/tasks/extractRefreshes/task-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the extract refresh that you want information about.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). `tableau:tasks:read` (this scope is included in the scope: `tableau:tasks`) 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 #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of extract refresh tasks that they own. #### Response Code 200 #### Response Body Tableau Server and Tableau Cloud return different payloads in response to this request. Output for virtual connections includes `transactionLevel` and table ids in addition to the output that's standard for data sources and workbooks. ### Tableau Server Response For Tableau Server an extract refresh task with a server schedule is returned. ``` ``` ``` [ { "extractRefresh": { "id": "refresh_task_id", "priority": "nn", "consecutiveFailedCount": "n", "type": "REFRESH_EXTRACT", "schedule": { "id": "schedule_id", "name": "schedule_name", "state": "state", "priority": "nn", "createdAt": "DATE_TIME", "updatedAt": "DATE_TIME", "type": "Extract", "frequency": "frequency", "nextRunAt": "DATE_TIME" }, "datasource": { "id": "datasource_id" } } }, [] ] ``` ### Tableau Cloud Response For Tableau Cloud an extract refresh task with its frequency is returned. ``` ``` ``` { "task": { "extractRefresh": { "id": "0ece2369-c4eb-4382-be0f-961039d708a0", "priority": "50", "consecutiveFailedCount": "5", "type": "RefreshExtractTask", "schedule": { "frequency": "Weekly", "nextRunAt": "2023-06-08T04:50:00Z", "frequencyDetails": { "start": "21:50:00", "intervals": { "interval": [ { "weekDay": "Thursday" } ] } } }, "workbook": { "id": "7e766949-7166-4b3d-90ba-784f7575743b" } } } } ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403403004Operation unauthorizedThe user is not authorized to get the task.
404404026Task not foundThe task ID in the URI doesn't correspond to an existing task.
405405000Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Extract Refresh Tasks in Site Returns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections. #### URI GET /api/api-version/sites/site-id/tasks/extractRefreshes #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). `tableau:tasks:read` (this scope is included in the scope: `tableau:tasks`) 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). #### cURL Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/tasks/extractRefreshes" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of extract refresh tasks that they own. #### Response Code 200 #### Response Body Tableau Server and Tableau Cloud return different payloads in response to this request. Output for virtual connections includes `transactionLevel` and table ids in addition to the output that's standard for data sources and workbooks. ### Tableau Server Response On Tableau Server, a list of extract refresh tasks with their server schedules is returned. ``` ``` ``` { "tasks": [ { "extractRefresh": { "id": "refresh_task_id", "priority": "nn", "consecutiveFailedCount": "n", "type": "REFRESH_EXTRACT", "schedule": { "id": "schedule_id", "name": "schedule_name", "state": "state", "priority": "nn", "createdAt": "DATE_TIME", "updatedAt": "DATE_TIME", "type": "Extract", "frequency": "frequency", "nextRunAt": "DATE_TIME" }, "datasource": { "id": "datasource_id" } } }, [] ] } ``` ### Tableau Cloud Response On Tableau Cloud, a list of extract tasks with their frequency is returned. ``` ``` ``` { "tasks": { "task": { "extractRefresh": { "id": "0ece2369-c4eb-4382-be0f-961039d708a0", "priority": "50", "consecutiveFailedCount": "5", "type": "RefreshExtractTask", "schedule": { "frequency": "Weekly", "nextRunAt": "2023-06-08T04:50:00Z", "frequencyDetails": { "start": "21:50:00", "intervals": { "interval": [ { "weekDay": "Thursday" } ] } } }, "workbook": { "id": "7e766949-7166-4b3d-90ba-784f7575743b" } } } } } ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
405405000Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Server Schedule Returns detailed information about the specified server schedule on Tableau Server. _Not available for Tableau Cloud._ **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/schedules/schedule-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
schedule-idThe ID of the specific schedule.
Note: You can get the schedule id from running the List Server Schedules method. For more information, see Jobs, Tasks, and Schedules Methods
#### Request Body None #### Permissions On Tableau Server, any user able to schedule extract refreshes and any site or server administrator can get schedules. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 ``` ``` #### Version Version 3.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404027Schedule not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/schedules/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List Extract Refresh Tasks in Server Schedule Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server. To get the ID of a schedule, call the [List Server Schedules](#query_schedules) method. Note that the List Server Schedules method is global to the server; schedules are not specific to a site. Therefore, the URI for the List Server Schedules method does not include `/sites/` or a site ID. However, individual scheduled tasks are specific to a site, and the URI for Query Extract Refresh Tasks must include the site information. For more information about refresh tasks, see [Manage Refresh Tasks](https://help.tableau.com/current/server/en-us/help.htm#task.htm). _Not available for Tableau Cloud._ #### URI GET /api/api-version/sites/site-id/schedules/schedule-id/extracts GET /api/api-version/sites/site-id/schedules/schedule-id/extracts?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 2.2. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the refresh tasks.
schedule-idThe ID of the schedule to get extract information for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### JWT Access Scope Not available. 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 #### Permissions This method can only be called by server administrators and site administrators. When a site administrator calls this method, the payload contains only the tasks that are associated with the site that the user is signed in to. #### Response Code 200 #### Response Body ``` ... additional extract refresh tasks ... ``` #### Version Version 2.2 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
400400047Invalid schedule typeThe schedule type does not represent an extract refresh task. (For example, it might be a subscription task.)
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404Schedule not foundThe schedule ID in the URI doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/schedules/59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba/extracts" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Job Returns status information about an asynchronous process that is tracked using a job. This method can be used to query jobs that are used to do the following: - Import users from Active Directory (the result of a call to [Create Group](#create_group)). - Synchronize an existing Tableau Server group with Active Directory (the result of a call to [Update Group](#update_group)). - Run extract refresh tasks (the result of a call to [Run Extract Refresh Task](#run_extract_refresh_task)). - Publish a workbook asynchronously (the result of a call to [Publish Workbook](#publish_workbook)). - Run workbook or view subscriptions (the result of a call to [Create Subscription](#create_subscription) or [Update Subscription](#update_subscription)) - Run a flow task (the result of a call to [Run Flow Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#RunFlowTask)) - Status of Tableau Server site deletion (the result of a call to asynchronous [Delete Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#async) beginning API 3.18) **Note:** To query a site deletion job, the server administrator must be first signed into the default site (`contentUrl=" "`). **Version**: Available in API 2.0 and later. **License**: No additional license required. **Permissions**: This method can only be called by server administrators and site administrators. **Access Scope**: `tableau:jobs:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/jobs/job-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site where the job is running.
job-idThe ID of the job to get status information for.
#### Request Body None #### Response Code 200 #### Response Body ``` ... view, workbook, or datasource id and name ... ... additional job notes ... ``` The createdAt, updatedAt, and CompletedAt values are dates and times in UTC format (YYYY-MM-DDTHH:MM:SSZ). The finishCode indicates the status of the job. - For most jobs, the `finishCode` indicates the status of the job: `0` for success, `1` for error, or `2` for canceled. - For bridge extract refresh jobs, a `finishCode` of `0` indicates that the bridge client is assigned to execute the job, while a `3` indicates that the job completed. - For [asynchronous workbook publishing](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm#async) jobs, progress will switch from `0` when the job is in-progress to `100` when it is complete. `finishCode` will switch from `1` when the job is in-progress to `0` when it is complete, and no `statusNotes` elements are provided. The statusNotes element contains one or more notes that provide details about the status of a job in a format that can be used for logging, auditing, and error recovery. Each status note contains three attributes: - type. An enumerated value (a string) that indicates the classification of the note. - value. A value that indicates the number of records reported by the current status, such as the count of records processed. - text. A description of the status that can be displayed to users. If you are working with a localized (translated) version of Tableau Server, this text is also localized. You should not rely on this text for any application logic. If you need to take action based on a specific status, test the value of the type attribute. The following table lists job status types. Some values are returned only when the job is synchronizing groups (Update Group).
TypeValueText
CountOfUsersAddedToGroupIntegerDescription of how many users were added to the group during the import.
CountOfUsersAddedToSiteIntegerDescription of how many users were added to the site during the import.
CountOfUsersWithInsufficientLicensesIntegerDescription of how many users could not have their site role updated due to server lacking sufficient licenses for them.
CountOfUsersInActiveDirectoryGroupIntegerDescription of the total number of users in the Active Directory group being imported or synchronized
CountOfUsersProcessedIntegerDescription of the total number of users processed during the import or synchronization process.
CountOfUsersSkippedIntegerDescription of the total number of users skipped during the import or synchronization process
CountOfUsersInformationUpdatedIntegerDescription of the total number of users whose information was updated during the import or synchronization process.
CountOfUsersSiteRoleUpdatedIntegerDescription of the total number of users whose site role was updated during the import or synchronization process.
CountOfUsersRemovedFromGroupInteger(Synchronization process only) Description of the number of users removed from the group during the synchronization process.
CountOfUsersUnlicensedInteger(Synchronization process only) Description of the number of users who were unlicensed during the synchronization process.
SiteDeleteIntegerDescription of the site deletion progress. Can include a general error or errorCode=9 when a site can't be deleted.
#### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404018Job not foundThe job ID in the URI doesn't correspond to an existing job.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Jobs Returns a list of active jobs on the specified site. To get details on a specific job, pass a job ID returned by this method to the [Query Job](#query_job) method. To cancel an active job, pass a job ID returned by this method to the [Cancel Job](#cancel_job) method. Calls to this method can be filtered, as shown in the URI examples shown below. To learn more about filtering, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm). **Version**: Available in API 3.1 and later. **License**: No additional license required. **Permissions**: This method can only be called by server administrators and site administrators. **Access Scope**: `tableau:jobs:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/_api-version_/sites/_site-id_/jobs GET /api/_api-version_/sites/_site-id_/jobs?filter=progress:lte:0 GET /api/_api-version_/sites/_site-id_/jobs?filter=jobType:eq:refresh\_extracts GET /api/_api-version_/sites/_site-id_/jobs?filter=createdAt:gt:2018-04-18T11:00:56z GET /api/_api-version_/sites/_site-id_/jobs?filter=title:has:Superstore GET /api/_api-version_/sites/_site-id_/jobs?filter=notes:has:nightly GET /api/_api-version_/sites/_site-id_/jobs?filter=jobType:eq:run\_flow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site where the job is running.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/jobs" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List Server Schedules Returns a list of flows, extract and subscription server schedules on Tableau Server. For each schedule, the API returns the name, frequency, priority, and other information. For more information about schedules, see [Create or Modify a Schedule](https://help.tableau.com/current/server/en-us/help.htm#schedule_manage_create.htm). _Not available for Tableau Cloud._ #### URI GET /api/api-version/schedules GET /api/api-version/schedules?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 2.2. For more information, see REST API and Resource Versions.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions On Tableau Server, any user able to schedule extract refreshes and any site or server administrator can get schedules. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 ``` ... additional schedules ... ``` The datetime-created, datetime-last-updated, datetime-next-run-time, and datetime-expiration attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Example `curl "http://MY-SERVER/api/3.29/schedules" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` #### Version Version 2.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Run Extract Refresh Task Runs the specified extract refresh task. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). This method runs the scheduled task for the data source extract, the published workbook that connects to the data extract, or the virtual connection extract. You must first schedule the task for the extract refresh. You can do this using the [Create Schedule](#create_schedule) method to create the task. To get information about the extract refresh task, use the [Get Extract Refresh Tasks](#get_extract_refresh_tasks) method, which returns the extractRefresh ID that you use as the task-id. The method adds the refresh task to the backgrounder queue. Depending upon the backgrounder load, the task might not run immediately. The method returns information about the backgrounder job responsible for running the extract refresh task, including a **job id** that can be used with the [Query Job](#query_job) method to query the status of the extract refresh. An extract refresh task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a refresh task will fail if the task has been put in the task queue in any of these ways, or is already in progress. #### URI POST /api/api-version/sites/site-id/tasks/extractRefreshes/task-id/runNow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the extract refresh task that you want to run.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). Not available for Tableau Server. `tableau:tasks:run` (this scope is included in the scope: `tableau:tasks`) 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 The request body is an empty tsRequest element. ``` ``` #### Permissions Tableau Server users who are not server administrators or site administrators can only run the extract refresh tasks that they own. #### Response Code 200 #### Response Body The content type (workbook, data source, or virtual connection) is indicated in the response. ``` ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400047Extract refresh errorThe task specified is not an extract refresh task.
400409090Extract operation not allowedThe extract operation is not allowed for the asset that the task refreshes.
403403004Operation on resource unauthorizedThe user is not authorized to run the task.
403409082Run now disabledThe Run Now setting is disabled for the site.
404404003Unknown resourceThe task ID in the URI doesn't correspond to an existing task.
404404049Virtual connection not foundThe virtual connection that the task refreshes no longer exists.
405405000Method not allowedThe request type was not POST.
409409093Operation already in queueThe extract refresh job is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/extractRefreshes/9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c/runNow" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @empty_request.xml` ## Update Server Schedule Modifies settings for the specified server schedule, including the name, priority, and frequency details on Tableau Server. _For Tableau Cloud, see [Update cloud extract refresh task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#update_cloud_extract_refresh_task) and [Update subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#update_subscription_cloud) ._ #### URI PUT /api/api-version/schedules/schedule-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
schedule-idThe ID of the schedule to update. To determine what schedules are available, call List Server Schedules.
#### Request Body ``` ``` #### Attribute Values
new-schedule-name The new name to give to the schedule.
new-schedule-priority An integer value between 1 and 100 that determines the default priority of the schedule if multiple tasks are pending in the queue. Lower numbers have higher priority.
new-schedule-execution-order Parallel to allow jobs associated with this schedule to run at the same time, or Serial to require the jobs to run one after the other.
new-schedule-frequency The granularity of the schedule. Valid values are:
  • Hourly. Hourly. Jobs can be scheduled to run one or more times per day at intervals specified in minutes or hours. Valid intervals are 15 and 30 minutes and 2, 4, 6, 8, and 12 hours.
  • Daily. Jobs can be scheduled to run once per day.
  • Weekly. Jobs can be scheduled to run one or more times per week.
  • Monthly. Jobs can be scheduled to run once per month on a specific day.

The value you provide for schedule-frequency determines whether you must include an end-time value, and what is required in the contents of the <intervals> element.

new-state Active to enable the schedule, or Suspended to disable it.
start-time The time of day on which scheduled jobs should run (or if the frequency is hourly, on which they should start being run), in the format HH:MM:SS (for example, 18:30:00). This value is required for all schedule frequencies. The entered time will be applied based on the time zone of your server.
end-time If the schedule frequency is Hourly, the time of day on which scheduled jobs should stop being run, in the format HH:MM:SS (for example, 23:30:00). Hourly jobs will occur at the specified intervals between the start time and the end time. For other schedule frequencies, this value is not required; if the attribute is included, it is ignored. The entered time will be applied based on the time zone of your server.
interval-expression A value that specifies the interval between jobs associated with the schedule. The value you specify here depends on the value of schedule-frequency.

Hourly

The interval expression is only one of the following:

  • hours="interval" where interval is 1, 2, 4, 6, 8, or 12, representing how many hours between jobs.
  • minutes="interval" where interval is 15 or 30, representing how many minutes between jobs.

You can specify an interval in hours or minutes, but not both.

Daily

If the schedule frequency is Daily, no interval is specified. Any information specified in the <intervals> element is ignored.

Weekly

The interval expression is weekDay="weekday", where weekday is Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

You can specify multiple <interval> elements to indicate that scheduled jobs should run on multiple days during the week.

Note: Updating a schedule without specifying days of the week will reset any existing weekly interval to include all 7 days. If you need the job you are updating to remain scheduled on selected days, make sure to include that information in your update request.

Monthly

The interval expression is monthDay="day", where day is either the day of the month (1, 2, etc.) or LastDay.

Note: If you want to specify multiple days in the month, you can do this using the web interface. You cannot create or update such a monthly schedule using REST API.

Any combination of the attributes inside the element is valid. Only the attributes and child elements that are included result in updates to the schedule. If no attributes or nested elements are included, no update is made. #### 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:schedules: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 ``` ``` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400008Invalid ParameterOne of the parameters in the request body is invalid.
400400071Error updating scheduleThe schedule couldn't be updated for an unspecified reason.
404404023Schedule not foundThe specified schedule doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not PUT.
409409021Schedule name conflictThe schedule name in the request already belongs to an existing schedule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/schedules/4d652179-36bf-47e4-a9dc-e069227c72d0" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-schedule.xml` **Content of update-schedule.xml for an hourly schedule** For an hourly schedule, frequencyDetails is set to `Hourly`. Both start and end values are required. The intervals element is required, and must include 1 interval subelement that contains either an hours or a minutes attribute. Valid values for minutes are `15` or `30`. Valid values for hours are `1`, `2`, `4`, `6`, `8`, or `12`. ``` ``` **Response body** ``` version-and-namespace-settings> ``` **Note:** For additional examples of how to construct the payload for updating schedules, see [Create Schedule](#create_schedule). ## Update Virtual Connection Now Runs an extract refresh on the specified virtual connection. This method identifies and refreshes only the tables in the virtual connection that are configured as extracts; live tables are ignored. No additional input is required from the caller. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). **Version**: Available in API 3.30 and later. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Users who are not server administrators or site administrators can only refresh extracts for virtual connections if they own the virtual connection, or if they are the project leader for the project. **Access Scope**: `tableau:tasks:run` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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-id/virtualconnections/virtualconnection-id/refresh #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection to refresh.
#### Request Body The request body is an empty tsRequest element. ``` ``` ``` {} ``` #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl --request POST 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/refresh' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 202 #### Response Body ``` ``` ``` { "job": { "id": "job-id", "mode": "Asynchronous", "type": "RefreshExtract", "createdAt": "date-time", "extractRefreshJob": { "virtualConnection": { "id": "virtualconnection-id", "name": "virtualconnection-name" } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400403180Full refresh not allowed.A full refresh extract operation is not allowed for the virtual connection.
400403181Incremental refresh not allowed.The request specified an incremental refresh, but an incremental refresh extract operation is not allowed for the virtual connection.
400409090No extract-eligible tables.The virtual connection has no active revision or no extract-eligible tables. Live tables are not refreshed.
403403199User not authorized to refresh the virtual connection.The user must have either the Manage Extract or the Allow Extract Refresh permission on the virtual connection.
403409082Run Now is disabled for the site.Enable Run Now for the site, then try the request again.
404404049Virtual connection not found.Check the virtual connection LUID.
405405000Method not allowed.Direct virtual connection extract refresh is not enabled for this site.
409409093Operation already in queue.An extract refresh job for the virtual connection is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Mapping ConnectionType Names Using the Tableau Server REST API, you can access connection information used by data sources, workbooks, and flows. In some cases you might need to identify the connection type used by the content. When you request information about databases, the request returns a “connectionType” attribute in the response body. The value returned for the "connectionType" attribute is the name of the connection type. Use the table below to map the "connectionType" name to the connection name that's displayed in various places within the Tableau platform.
ConnectionType Name Display Name
asterncluster Aster Database
athena Amazon Athena
aurora Amazon Aurora for MySQL
awshadoophive Amazon EMR Hadoop Hive
azure_sql_dw Azure SQL Data Warehouse
bigquery Google BigQuery
bigsql IBM BigInsights
box Box
cloudfile:box-excel-direct Microsoft Excel (Box)
cloudfile:box-semistructpassivestore-direct JSON file (Box)
cloudfile:box-textscan Text file (Box)
cloudfile:dropbox-excel-direct Microsoft Excel (Dropbox)
cloudfile:dropbox-semistructpassivestore-direct JSON file (Dropbox)
cloudfile:dropbox-textscan Text file (Dropbox)
cloudfile:googledrive-excel-direct Microsoft Excel (Google Drive)
cloudfile:googledrive-semistructpassivestore-direct JSON file (Google Drive)
cloudfile:googledrive-textscan Text file (Google Drive)
cloudfile:onedrive-excel-direct Microsoft Excel (OneDrive)
cloudfile:onedrive-semistructpassivestore-direct JSON file (OneDrive)
cloudfile:onedrive-textscan Text file (OneDrive)
composite TIBCO Data Virtualization
csv Text file (legacy)
databricks Databricks
dataengine Tableau Data Engine
db2 IBM DB2
denodo Denodo
drill Apache Drill

dropbox

Dropbox
essbase Oracle Essbase
exasolution Exasol
excel Microsoft Excel (legacy)
excel-direct Microsoft Excel
excel-reader Microsoft Excel Reader
firebird Firebird
genericjdbc Other Databases (JDBC)
genericodbc Other Databases (ODBC)
google-analytics Google Analytics
googlecloudsql Google Cloud SQL
googledrive Google Drive
google-sheets Google Sheets
greenplum Pivotal Greenplum Database
hadoophive Cloudera Hadoop
hive Apache Hive
hortonworkshadoophive Hortonworks Hadoop Hive
hyper Tableau Data Engine
jdbc Other Databases (JDBC) Note: This might display as "unknown."
kognitio Kognitio
maprhadoophive MapR Hadoop Hive
mariadb MariaDB
marklogic MarkLogic
memsql MemSQL
monetdb MonetDB
mongodb MongoDB BI Connector
msaccess Microsoft Access
msolap Microsoft Analysis Services
mysql MySQL
mysql_odbc Other Databases (ODBC) Note: This might display as "unknown."
netezza IBM PDA (Netezza)
odata OData
odbc Other Databases (ODBC) Note: This might display as "unknown."
ogr Spatial file
ogrdirect Spatial file
onedrive OneDrive
oracle Oracle
paraccel Actian Matrix
pdf PDF file
postgres PostgreSQL
powerpivot Microsoft PowerPivot
presto Presto
progressopenedge Progress OpenEdge
redshift Amazon Redshift
remote-domain Tableau Server
salesforce Salesforce
sapbw SAP NetWeaver Business Warehouse
saphana SAP HANA
semistructpassivestore JSON file Note: This might display as blank.
semistructpassivestore-direct JSON file
sharepoint SharePoint Lists
snowflake Snowflake
spark Spark SQL
splunk Splunk
sqlproxy Tableau Server
sqlserver Microsoft SQL Server
stat Statistical file
stat-direct Statistical file
sybasease SAP Sybase ASE
sybaseiq SAP Sybase IQ
tbio Teradata OLAP Connector
teradata Teradata
textclean Text file
textscan Text file
vectorwise Actian Vector
vertica Vertica
vizengine VizEngine
webdata Web Data Connector
webdata-direct Web Data Connector
webdata-direct:anaplan-anaplan Anaplan
webdata-direct:google-ads Google Ads
webdata-direct:intuit-quickbooks Intuit QuickBooks Online (9.3-2018.1)
webdata-direct:intuit-quickbooks-v3 Intuit QuickBooks Online
webdata-direct:marketo-marketo Marketo
webdata-direct:oracle-eloqua Oracle Eloqua
webdata-direct:ServiceNowITSM-ServiceNowITSM ServiceNow ITSM
[Skip to main content](#main-content) # Metadata Methods Metadata methods have been released incrementally beginning with Tableau version 2019.3. Using the metadata methods of the Tableau REST API, you can do the following tasks with Tableau metadata. Some methods require Data Management and are noted where this applies. **Database**, including files (external asset type) - Query a database or multiple databases - Update (e.g., certify), move, or remove a database - Add, query, or delete database permissions - Add, query, or delete default database permissions **Table** (external asset type) - Query a table or multiple tables - Update (e.g., certify), move, or remove a table - Add, query, or delete table permissions **Column** (external asset type) - Query a column or multiple columns that belong to a specific table - Update the column description or remove a column that belongs to a specific table **Label** (a common interface for managing certifications, data quality warnings, sensitivity labels, and other data labels) - Add, update, or delete labels - Query labels on one or more assets - Get, list, create, update, or delete label values - List, create, update, or delete label categories **Quality warning trigger** (enables monitoring of content and displays alerts when extract refresh and flow run failures occur) - Add, update, delete quality warning trigger - Query quality warning trigger **Tag** (keywords that helps users find, filter, and categorize external assets and Tableau content) - Add tags to a database, table, or column - Delete a tag from a database, table, or column - Batch add and delete tags on Tableau content and external assets **Data quality warning (DQW)** (conveys data quality warning information about databases, tables, published data sources, and flows) - Add, update (e.g., severity), or delete a data quality warning - Query data quality warnings - Batch add, update, or delete data quality warnings to and from Tableau content and external assets _**Note**: Both data quality warnings and certifications can be more generally managed through the newer **Label** methods. Tableau recommends using them instead._ **Data quality certification** (conveys data quality certification information for databases, tables, and data sources) - Add, update, or delete a data quality certification - Query data quality certification _**Note**: Both data quality certifications and warnings can be more generally managed through the newer **Label** methods. Tableau recommends using them instead._ The above functionality relates to metadata concepts and Data Catalog UI elements described at: [About Tableau Catalog](https://help.tableau.com/current/server/en-us/dm_catalog_overview.htm). For deeper and more comprehensive API functionality for querying metadata and schema information for Tableau content, see [Tableau Metadata API](https://help.tableau.com/current/api/metadata_api/en-us/index.html) Help. ## 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: Metadata](https://www.postman.com/salesforce-developers/salesforce-developers/folder/hiib1bv/metadata) ## Add Database Permissions Add permissions to a database asset. To add permissions, the database asset must be associated with a published data source. **Version:** Available in API 3.5 (Tableau Cloud and Tableau Server) and later.  _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Available with [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** Users that are granted ChangePermissions capabilities for the asset metadata and all administrators can add database permissions.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: _Not available._       #### URI PUT api/_api-version_/sites/_site-luid_/databases/_database-luid_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset.
#### Request Body ``` ``` #### Attribute Values ``` { "permissions": { "database": { "id": "1d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" }, "granteeCapabilities": [ { "user": { "@id": "2d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" }, "capabilities": { "capability": { "name": "ChangePermissions", "mode": "allow" } } }, { "group": { "id": "3d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" }, "capabilities": { "capability": { "name": "Read", "mode": "Allow" } } } ] } } ``` #### Request Attributes
database The LUID of the database asset you want to add permissions to.
user id The LUID of the user to add permissions for.
capability name

The capability to assign. If any capability has been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a database are:

  • Read (view)
  • Write (edit)
  • ChangePermissions (set permissions)
  • ChangeHierarchy (move)

These values are case sensitive.

capability mode

Use one of the following capabilities:

  • Allow
  • Deny

These values are case sensitive.

group id The LUID of the group to add permissions for.
#### Response Code 200 #### Response Body ``` ``` ``` { "permissions": { "database": { "id": "e8d4aa9f-3d1a-4b49-8d6d-27f113cbd25e", "name": "oracle.test.tsi.lan:1521" }, "granteeCapabilities": { "user": { " id": "6265b714-7533-465d-b6db-6d0be92bfd07" }, "capabilities": { "capability": { "name": "Read", "mode": "Allow" } } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be added because support for explicit permissions is available for database assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
405405000Invalid request methodRequest type was not PUT.
409409045Database errorAn unknown database asset error occurred.
409409050Database update errorAn unknown error occurred and the database asset could not be updated.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Add Default Database Permissions Adds default permission capabilities to a user or group for table resources in that database. Default permissions function as a permissions template for the database's table assets. Note: If a database is in a project, default database permissions are not evaluated to determine table permissions. Use the [Add Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_default_permissions) method to control default permission capabilities on tables through projects instead. How default permissions are enforced depends on whether the database is locked or unlocked. - **Locked to the database:** If the permissions on a database are locked or Locked to the database, existing child table assets and new child table assets that get indexed by Catalog will inherit the default permissions applied to the parent database asset. **Note:** If the database is locked, explicit permissions cannot be made for individual tables. - **Managed by the owner:** If the permissions on a database are unlocked or **Managed by the owner**, only new child table assets that get indexed by Catalog will inherit the default permissions applied to the parent database asset. **Note:** If the database is unlocked, explicit permissions for the table can be made in a separate request. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT /api/_api-version_/sites/_site-luid_/databases/_database-luid_/default-permissions/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset to set default permissions for.
#### Request Body ``` ``` #### Attribute Values
user-luid The LUID of the user to add default permissions for.
group-luid The LUID of the group to add permissions for.
capability-name

The capability to assign. If any capability has been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a databases are the following:

  • Read (view)
  • Write (edit)
  • ChangePermissions (set permissions)
  • ChangeHierarchy (move)

These values are case sensitive.

capability-mode

Use one of the following capabilities:

  • Allow
  • Deny

These values are case sensitive.

#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users set default permissions for the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to add permissions on the project.
403403114Permissions setting forbiddenDefault permissions cannot be added because the database asset is locked.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404003Resource not foundThe database LUID in the URI doesn't correspond to a database asset on the site.
404404002User not foundA user LUID in the request body as the grantee doesn't correspond to an existing user.
404404012Group not foundA group LUID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe capability in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not PUT.
## Add Data Quality Warning Add a data quality warning to a database, table, column, published data source, flow, virtual connection, or virtual connection table. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Update Labels](#update_labels_on_assets) method instead. The Add Data Quality Warning method adds a data quality warning to an asset. (An automatically-generated monitoring warning does not count towards this limit.) In Tableau Cloud February 2024 and Tableau Server 2024.2 and earlier, adding a data quality warning to an asset that already has one causes an error. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/_api-version_/sites/_site-id_/dataQualityWarnings/_content-type_/_content-luid_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type The type of asset that the data quality warning is being attached to. To specify the type, use:
  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtual connection
  • virtual connection table

These values are not case sensitive.

content-luid The unique ID of the asset (database, table, column, published data source, flow, virtual connection, or virtual connection table). This is the same as the content ID.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid, but the data quality warning type is required. If the data quality warning type is not included, an error is thrown.
type

Type of data quality warning to apply to the asset. To specify the type, use one of the following values:

  • DEPRECATED
  • WARNING
  • STALE
  • SENSITIVE_DATA
  • MAINTENANCE

These values are case sensitive.

state

(Optional) Controls whether the data quality warning displays. Value can be "true" or "false". If the state is not specified, the data quality warning is set to "true" and is visible by default. For more information about data quality warnings, see "Set a Data Quality Warning" in the Server Help or Cloud Help.

message

(Optional. Was required in Tableau Server 2023.3 and earlier.)

A custom message to accompany the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.

severity (Optional) Enables high visibility for the data quality warning when set to "true". Value can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 201 #### Response Body **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400108Generic add data quality warning errorThe data quality warning could not be added for some other reason than those specified in this table.
400400109Bad requestThe request body is missing the data quality warning type.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Batch Add or Update Data Quality Warnings Add or update multiple data quality warnings on assets. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Update Labels](#update_labels_on_assets) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/api-version/sites/site-id/dataQualityWarnings/createOrUpdate #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values
content

The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
column-id The unique ID of the column asset.
datasource-id The unique ID of the data source content.
flow-id The unique ID of the flow content.
virtualconnection-id The unique ID of the virtual connection.
virtualconnectiontable-id The unique ID of the virtual connection table.
type

The type of data quality warning to apply to the content or asset. To specify type, use one of the following values:

  • DEPRECATED
  • WARNING
  • STALE
  • SENSITIVE_DATA
  • MAINTENANCE
message (Optional) A custom message to accompany the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
state (Optional) Controls whether the data quality warning displays. Value can be "true" or "false". If the state is not specified, the data quality warning is set to "true" and is visible by default. For more information about data quality warnings, see "Set a Data Quality Warning" in the Server Help or Cloud Help.
severity (Optional) Enables high visibility for when the data quality warning is set to "true". Value can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to batch add or update data quality warnings: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400109Bad requestThe content of the request body (content type, content id, or dataQualityWarning attributes) is missing, incomplete, or contains malformed XML.
400400108Generic add data quality warning errorThe data quality warning could not be added for some other reason than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
## Batch Add or Update Data Quality Certifications Create or update one or more data quality certifications for different content and asset items. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Update Labels](#update_labels_on_assets) method instead. A content or asset item can only have up to one data quality certification applied to it. Adding a data quality certification to an item that already has one will update the data quality certification with the latest specified values. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/api-version/sites/site-id/dataQualityCertifications #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid, however **type** and **message** attributes are required.
content

The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:

  • database
  • table
  • datasource
  • virtualconnection
  • virtualconnectiontable
database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
datasource-id The unique ID of the data source content.
virtualconnection-id The unique ID of the virtual connection asset.
virtualconnectiontable-id The unique ID of the virtual connection table asset.
type

Use the following value to apply a data quality certification: CERTIFIED.

message A custom message to accompany the data quality certification. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
state (Optional) Controls whether the data quality certification displays. Value can be "true" or "false". If the state is not specified, the data quality certification is set to "true" and is visible by default. For more information about data quality certifications, see "Set a Data Quality Certification" in the Server Help or Cloud Help.
severity (Optional) Enables high visibility for when the data quality certification is set to "true". Value can be "true" or "false". If the severity is not specified, the data quality certification is set to "false." This setting is available only through the REST API.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add or update data quality certifications: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 201 #### Response Body **Example response** ``` ``` #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400108Generic data quality certification errorThe data quality certification could not be added for some reason other than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
## Add or Update Monitoring Quality Warning on Content Create or update one or more monitoring quality warnings. You can monitor for extract refresh failures on extract data sources or flow run failures on flows. An asset can only have one instance of monitoring. Adding monitoring to an asset that already has it will update it to use the latest specified values. **Note:** An asset can have one monitoring warning in addition to other [data quality warnings](#add_dqw). This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI **Add or update a monitoring quality warning for an asset** POST api/_api-version_/sites/_site-id_/dataQualityTriggers/_content-type_/contentIds?filter=contentId:in:\[_content-luid_\] **Add or update a monitoring quality warning for multiple assets** POST api/_api-version_/sites/_site-id_/dataQualityTriggers/_content-type_/contentIds?filter=contentId:in:\[_content-luid1_,_content-luid2_,_content-luid3_,...\] **Note:** The square brackets are required around the single LUID or comma-separated list of LUIDs. #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content the monitoring is being applied to. Use one of the following values:

  • datasource
  • flow

These values are not case sensitive.

content-luid

The LUID of the asset. This is the same as the content ID.

The square brackets are required around the single LUID or comma-separated list of LUIDs.

#### Request Body ``` ``` #### Attribute Values
type

Type of monitoring quality warning. To specify the type, use one of the following values:

  • EXTRACT_REFRESH
  • FLOW_RUN

These values are not case sensitive.

status

Monitoring status. Values can be "true" or "false". If set to "true", the data source is monitored for extract refresh failures or the flow is monitored for flow run failures).

If an extract refresh or flow run failure occurs, the specified data quality warning is attached to the data source or flow (depending on type). The data quality warning is removed when the extract refresh or flow run is successful.

For more information about monitoring quality warnings, see the monitoring quality warning section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.

message (Optional) A custom message for the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
severity High visibility status of the data quality warning. Values can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add a monitoring quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400136Generic quality warning trigger errorThe monitoring quality warning could not be added or updated for some other reason than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
409409004Invalid parameterOne or more values in the request body are invalid.
## Add Table Permissions Add permissions to a table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-luid_/tables/_table-luid_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
table-luidThe LUID of the table asset.
#### Request Body ``` ``` #### Attribute Values
table-luid The LUID for the table asset you want to add permissions to.
user-luid The LUID of the user to add permissions for.
capability-name

The capability to assign. If any capability has been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a database are:

  • Read (view)
  • Write (edit)
  • ChangePermissions (set permissions)
  • ChangeHierarchy (move)

These values are case sensitive.

capability-mode

Use one of the following capabilities:

  • Allow
  • Deny

These values are case sensitive.

group-id The LUID of the group to add permissions for.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add table asset permissions: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be added because support for explicit permissions is available for table assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403117Database lockedPermissions for the table asset cannot be deleted because the database asset is locked.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Table errorAn unknown table asset error occurred.
409409057Table update errorAn unknown error occurred and the table asset could not be updated.
409409058Table update forbiddenA user without "write" permissions to the table asset attempted an update.
## Add Tags to Column Add one or more tags to a column. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI PUT api/api-version/sites/site-id/columns/column-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
column-idThe unique ID of the column asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to the asset.

tag-value2

Keyword text you want to add to the asset.

#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:column_tags: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 **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
409409062Generic column tag errorThe tag or tags could not be added (or deleted) for some other reason than those specified above.
409409066Column not foundThe column asset does not exist.
## Add Tags to Database Add one or more tags to a database. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI PUT api/api-version/sites/site-id/databases/database-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
database-idThe unique ID of the database asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to the asset.

tag-value2 Keyword text you want to add to the asset.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:database_tags: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 **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404031Database not foundThe database asset does not exist.
409409048Generic database tag errorThe tag or tags could not be added (or deleted) for some other reason than those specified above.
## Add Tags to Table Add one or more tags to a table. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI PUT api/api-version/sites/site-id/tables/table-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the column asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to the asset.

tag-value2

Keyword text you want to add to the asset.

#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:table_tags: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 **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404032Table not foundThe table asset does not exist.
409409055Generic table tag errorThe tag or tags could not be added (or deleted) for some other reason than those specified above.
## Batch Add Tags Add multiple tags to items that are different content and asset types. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI PUT api/api-version/sites/site-id/tags:batchCreate #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to item.

tag-value2

Keyword text you want to add to item.

database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
column-id The unique ID of the column asset.
datasource-id The unique ID of the data source content.
workbook-id The unique ID of the workbook content.
flow-id The unique ID of the flow content.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tags:batch_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 200 #### Response Body **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
404404031Database not foundThe database asset does not exist.
404404032Table not foundThe table asset does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
409409066Column not foundThe column asset does not exist.
## Add Tags to Virtual Connection Adds tags to a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the View permission for the virtual connection and your site role must be at least Explorer.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connection\_tags:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body ``` ``` #### Attribute Values
tagThe text of the tag.
#### cURL Request Example `curl --location --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/tags' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data @data.xml` **Contents of data.xml.** ``` ``` #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400049Error adding tagsThere was a problem adding tags to the specified virtual connection.
403403004Adding tags forbiddenThe user doesn't have permissions to add tags to the virtual connection.
404404000Site not foundThe site ID in the URI is not for an existing site.
404404006Virtual connection not foundThe virtual connection ID in URI doesn't correspond to an existing virtual connection.
404405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Label Category Creates a data label category. Note that category is one property of a label value (labelValue), which is itself a property of a label on an asset. Other properties of a labelValue include name and description. These properties determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label categories, but one is required to create, update, delete, and see labels on assets. #### URI POST api/api-version/sites/site-luid/labelCategories #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
#### Request Body ``` ``` #### Attribute Values
label-category-name

The label category name.

Required. Must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)

label-category-description

The label category description.

Required. Must be 1-500 characters in length.

#### Permissions - Only a site or server administrator can create, update, or delete label categories. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_categories: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 200 #### Version Introduced in Tableau Cloud October 2023 (API 3.21) / Server 2023.3 (API 3.21). #### Response Body ``` ``` #### Errors
HTTP status error Code Condition Details
400 400189 Generic create label categories error An unknown error occurred.
403 403004 Operation on resource unauthorized You must be an administrator to create, update, or delete label values.
409 409004 Invalid parameter
  • The category name must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, the category name must be 1-24 characters long.)
  • The category name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label categories names.
  • The category description must be 1-500 characters in length.
## Create or Update labelValue Creates a label value with the specified name if it doesn't exist, or updates the existing label value if the label value name already exists. Note: You can update an existing label value using either this method or the [Update labelValue](#ref_update_labelvalue) method. If you want to change the name on an existing label value, use the [Update labelValue](#ref_update_labelvalue) method. Note that a label value (labelValue) is one property of a label. A label value has its own properties like name, category, and description that determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label values, but one is required to create, update, delete, and see labels on assets. #### URI PUT api/api-version/sites/site-luid/labelValues #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
#### Request Body ``` ``` #### Attribute Values
label-value-name

The label value name.

Required. If you specify an existing label value name, this method will update the label value. If you specify a label value name that's different than existing label value names, this method will create the label value.

Required. Must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)

label-value-category

The label value category.

Required. If you're updating an existing label value, this must match the existing category for that label value.

label-value-description

The label value description.

Required, but does not need to be different than the existing description. Must be 1-500 characters in length.

#### Permissions - Only a site or server administrator can create, update, or delete label values. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_values: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 200 #### Version Introduced in Tableau Cloud June 2023 (API 3.20) and Tableau Server 2023.3 (API 3.21). #### Response Body ``` ``` #### Errors
HTTP status error Code Condition Details
401 4000173 Generic create label values error An unknown error occurred.
403 403004 Operation on resource unauthorized You must be a site or server administrator to create or update label values.
403 403157 Bad request You may see this error if you try to create or update a label in the certification category.
409 409004 Invalid parameter
  • The label value name must be 1-128 characters long in Tableau Cloud. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)
  • The name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label value names.
  • The category must match an existing category.
  • You can't change the category on an existing label value.
  • The description can't be empty or over 500 characters.
## Delete Database Permissions Permanently remove the permissions applied to a database asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/api-version/sites/site-luid/databases/database-luid/permissions/users/user-luid/capability-name/capability-mode DELETE api/api-version/sites/site-luid/databases/database-luid/permissions/groups/group-luid/capability-name/capability-mode #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site.
database-luidThe LUID of the database asset.
user-luidThe LUID of the user to remove the permissions for.
group-luidThe LUID of the group to remove the permissions for.
capability-nameThe explicit permissions capability to remove. Capabilities that can be removed are Read, Write, ChangePermissions, or ChangeHierarchy.
capability-modeThe permissions mode to remove. Modes that can be removed are Allow or Deny.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users have permissions to delete the permissions on the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400120Bad requestPermissions could not be deleted because support for explicit permissions is available for database assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403117Database lockedPermissions for the database asset cannot be deleted because the database asset is locked.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Delete Default Database Permissions Permanently remove the default permissions on a database asset. Removing the default permissions from the database asset means that any new child table assets that are indexed by Catalog won't have any default permissions set. Note: If a database is in a project, default database permissions are not evaluated to determine table permissions. Use the [Delete Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_default_permissions) method to control default permission capabilities on tables through projects instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-luid_/databases/_database-luid_/default-permissions/tables/users/user-luid/capability-name/capability-mode DELETE api/_api-version_/sites/_site-luid_/databases/_database-luid_/default-permissions/tables/groups/group-luid/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The LUID of the site asset.
database-luid The LUID of the database asset.
user-luid The LUID of the user to remove the default permission for.
group-id The LUID of the group to remove the default permission for.
capability-name

The capability to remove the permissions for.

Valid capabilities for databases are the following:

  • Read (view)
  • Write (edit)
  • ChangePermissions (set permissions)
  • ChangeHierarchy (move)

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users have permissions to delete the permissions on the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Response Code 200 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400120Bad requestPermissions could not be deleted because support for explicit permissions is available for database assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403117Database lockedDefault permissions cannot be deleted because the database asset is locked.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Delete Data Quality Warning by ID Delete a data quality warning from an asset using the data quality warning ID. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Label](#delete_label) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/dataQualityWarnings/_dataqualitywarning-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
dataqualitywarning-idThe unique ID of the data quality warning.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400105Data quality warning delete errorAn unknown error occurred and the data quality warning could not be deleted.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Delete Data Quality Warning by Content Delete the data quality warnings from an asset. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Labels](#delete_labels_on_assets) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/api-version/sites/site-id/dataQualityWarnings/content-type/content-luid #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of asset that the data quality warning is being attached to. To specify the type, use:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable

Types are not case sensitive.

content-luid The LUID of the content (database, table, column, published data source, flow, virtual connection, or virtual connection table).
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
409400106Data quality warning delete errorAn unknown error occurred and the data quality warning could not be deleted.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Batch Delete Data Quality Warnings Delete multiple data quality warnings from assets. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Labels](#delete_labels_on_assets) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/api-version/sites/site-id/dataQualityWarnings/batchDelete #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values
content

The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
column-id The unique ID of the column asset.
datasource-id The unique ID of the data source content.
flow-id The unique ID of the flow content.
virtualconnection-id The unique ID of the virtual connection.
virtualconnectiontable-id The unique ID of the virtual connection table.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete data quality warnings: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
404404031Database not foundThe database asset does not exist.
404404032Table not foundThe table asset does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Data Quality Certification by ID Delete a data quality certification from an asset using the data quality certification ID. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Label](#delete_label) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/dataQualityCertifications/_certification-luid_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
certification-luidThe unique ID of the data quality certification.
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete a data quality certification: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400105Generic data quality certification errorThe data quality certification could not be deleted for some reason other than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Data Quality Certifications by Content Delete multiple data quality certifications from assets. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Labels](#delete_labels_on_assets) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/dataQualityCertifications #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
indicator-idThe unique ID of the data quality certification.
#### Request body ``` ``` #### Attribute Values
content

The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:

  • database
  • table
  • datasource
  • virtualconnection
  • virtualconnectiontable
database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
datasource-id The unique ID of the data source content.
virtualconnection-id The unique ID of the virtual connection.
virtualconnectiontable-id The unique ID of the virtual connection table.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete data quality certifications: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400106Generic data quality certification errorThe data quality certifications could not be deleted for some reason other than those specified in this table.
404404029Content not foundThe content does not exist.
403403004Unauthorized operationInsufficient permissions to perform the operation.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Quality Warning Trigger by ID Permanently remove a quality warning trigger using the quality warning trigger ID. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/dataQualityTriggers/_trigger-id_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
trigger-id

The unique ID of the quality warning trigger.

#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete a quality warning trigger: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 200 #### Response Body None #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400138Generic quality warning trigger errorThe quality warning trigger could not be deleted for some other reason than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404037Quality warning not foundThe requested quality warning trigger was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Quality Warning Triggers by Content Permanently remove all quality warning triggers for one or more data sources or flows, or both. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI **Delete one quality warning trigger** DELETE api/_api-version_/sites/_site-id_/dataQualityTriggers/_content-type_/contentIds?filter=contentId:in:\[_content-luid_\] **Delete multiple quality warning triggers** DELETE api/_api-version_/sites/_site-id_/dataQualityTriggers/_content-type_/contentIds?filter=contentId:in:\[_content-luid1_,_content-luid2_,_content-luid3_,...\] #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content the quality warning trigger has been applied to. In this case, use one of the following values:

  • datasource
  • flow

These values are not case sensitive.

content-luid The unique ID of the asset. This is the same as the content ID.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete quality warning triggers: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 200 #### Response Body None #### Version Version 3.10 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400138Generic quality warning trigger errorThe quality warning trigger could not be deleted for some other reason than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404037Quality warning not foundThe requested quality warning trigger was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Label Deletes a data label by its LUID. You can't delete extract refresh or flow run monitoring warnings (the extract\_refresh\_failure and flow\_run\_failure label values) using this method because those warnings are set and cleared automatically, depending on their triggers. See also "How to set a monitoring quality warning" in the [Tableau Server](https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) and [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) Help and the quality warning trigger methods in [Metadata Methods](#). For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI DELETE api/api-version/sites/site-luid/labels/label-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-luidThe unique LUID of the label asset.
#### Request Body None #### Permissions - To delete a data label other than a certification label, you must have write permission on the associated asset. - To delete a certification label, you must be an administrator, or else you must be a project leader or product owner for the project the asset is in. - To delete a certification label for an external asset _not_ in a project, you must have the change permissions permission on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401400105Generic delete label errorAn unknown error occurred. Confirm that the LUID in the URI is correct.
403403004Operation on resource unauthorizedInsufficient permissions to perform the operation.
409409004Invalid parameterThe URI does not contain a properly-formatted LUID.
## Delete Labels Deletes the data labels on one or more assets. You can optionally limit the data labels to delete by category using a query string. You can't delete extract refresh or flow run monitoring warnings (the extract\_refresh\_failure and flow\_run\_failure label values) using this method because those warnings are set and cleared automatically, depending on their triggers. See also "How to set a monitoring quality warning" in the [Tableau Server](https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) and [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) Help and the quality warning trigger methods in [Metadata Methods](#). For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI DELETE api/api-version/sites/site-luid/labels DELETE api/api-version/sites/site-luid/labels?categories=category-list #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site.
category-list(Optional) A comma-separated list of label value categories used to limit the label deletions to only the listed categories. See Data Labels in the REST API for information on label values and categories.
#### Request Body ``` ``` #### Attribute Values
asset-type

The type of asset. Valid asset types are:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
asset-luid The asset LUID.
#### Permissions - To delete a data label other than a certification label, you must have write permission on the associated asset. - To delete a certification label, you must be an administrator, or else you must be a project leader or product owner for the project the asset is in. - To delete a certification label for an external asset _not_ in a project, you must have the change permissions permission on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401400106Generic delete labels errorAn unknown error occurred.
403403004Operation on resource unauthorizedInsufficient permissions to perform the operation.
404404029Resource not foundThe contentType and contentID attribute combination does not correspond to an asset on the server. This can be caused by an incorrect contentType, an incorrect contentID, or both.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete labelValue Deletes a label value. If you use this method on a built-in label value that was customized, this method reverts the label to its built-in defaults instead of deleting it. (Afterwards, assets with the label that you reverted will reflect the built-in default.) Note that a label value (labelValue) is one property of a label. A label value has its own properties like name, category, and description that determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label values, but one is required to create, update, delete, and see labels on assets. #### URI DELETE api/api-version/sites/site-luid/labelValues/label-value-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-value-nameThe label value name. URL encode the label value name if it has spaces or non-alphanumeric characters in it.
#### Request Body None #### Permissions Only a site or server administrator can create, update, or delete label values. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_values: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 200 #### Version Introduced in Tableau Cloud June 2023 (API 3.20) and Tableau Server 2023.3 (API 3.21). #### Response Body None #### Errors
HTTP status error Code Condition Details
403 403004 Operation on resource unauthorized You must be a site or server administrator to create or update label values.
409 409004 Invalid parameter
  • The label value name in the URI must exist.
  • The label value name can't be one of the built-in labels, unless that label has a customized description (in which case, this method reverts the description to the built-in default).
401 4000173 Generic add labels to content error An unknown error occurred.
## Delete Label Category Deletes a label category. Note that category is one property of a label value (labelValue), which is itself a property of a label on an asset. Other properties of a labelValue include name and description. These properties determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label categories, but one is required to create, update, delete, and see labels on assets. #### URI DELETE api/api-version/sites/site-luid/labelCategories/label-category-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-category-nameThe label category name. URL encode the label category name (as it appears in the Tableau web interface) if it has spaces or non-alphanumeric characters in it.
#### Request Body None #### Permissions Only a site or server administrator can create, update, or delete label categories. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_categories: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 200 #### Version Introduced in Tableau Cloud October 2023 (API 3.21) / Server 2023.3 (API 3.21). #### Response Body None #### Errors
HTTP status error Code Condition Details
400 400191 Generic delete label category error An unknown error occurred.
403 403004 Operation on resource unauthorized

You must be an administrator to create, update, or delete label values.

409 409004 Invalid parameter
  • The category name in the URI must exist.
  • The category name can't be one of the built-in categories.
## Delete Table Permissions Permanently remove the permissions applied to a table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/api-version/sites/site-luid/tables/table-luid/permissions/users/user-luid/capability-name/capability-mode DELETE api/api-version/sites/site-luid/tables/table-luid/permissions/groups/group-luid/capability-name/capability-mode #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
table-luidThe LUID of the table asset.
user-luidThe LUID of the user to remove the permissions for.
group-luidThe LUID of the group to remove the permissions for.
capability-nameThe explicit permissions capability to remove. Capabilities that can be removed are Read, Write, ChangePermissions, or ChangeHierarchy.
capability-modeThe permissions mode to remove. Modes that can be removed are Allow or Deny.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete the permissions on a table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 204 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400120Bad requestPermissions could not be deleted because support for explicit permissions is available for table assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403117Database lockedPermissions for the table asset cannot be deleted because the database asset is locked.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Delete Tag from Column Delete a tag from a column. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI DELETE api/api-version/sites/site-id/columns/column-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
column-idThe unique ID of the column asset.
tag-nameThe keyword text of the tag.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:column_tags: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404007Tag not foundThe tag does not exist.
409409062Generic database tag errorThe tag or tags could not be deleted (or added) for some other reason than those specified in this table.
409409066Column not foundThe column asset does not exist.
## Delete Tag from Database Delete a tag from a database. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI DELETE api/api-version/sites/site-id/databases/database-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
database-idThe unique ID of the database asset.
tag-nameThe keyword text of the tag.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:database_tags: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404007Tag not foundThe tag does not exist.
404404031Database not foundThe database asset does not exist.
409409048Generic database tag errorThe tag or tags could not be deleted (or added) for some other reason than those specified above.
## Delete Tag from Table Delete a tag from a table. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI DELETE api/api-version/sites/site-id/tables/table-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
tag-nameThe keyword text of the tag.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:table_tags: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404007Tag not foundThe tag does not exist.
404404032Table not foundThe table asset does not exist.
409409055Generic database tag errorThe tag or tags could not be deleted (or added) for some other reason than those specified above.
## Batch Delete Tags Delete multiple tags from items that are different content and asset types. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI DELETE api/api-version/sites/site-id/tags:BatchDelete #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to item.

tag-value2

Keyword text you want to add to item.

database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
column-id The unique ID of the column asset.
datasource-id The unique ID of the data source content.
workbook-id The unique ID of the workbook content.
flow-id The unique ID of the flow content.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tags:batch_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 **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
404404031Database not foundThe database asset does not exist.
404404032Table not foundThe table asset does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
409409066Column not foundThe column asset does not exist.
## Delete Tag from Virtual Connection Deletes a tag from a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the View permission for the virtual connection and your site role must be at least Explorer.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connection\_tags:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
tag-nameThe text of the tag.
#### Request Body None #### cURL Request Example `curl --location --request DELETE 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/tags/office' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400077Error deleting tagThere was a problem deleting the tag from the specified virtual connection.
403403004Deleting tags forbiddenThe user doesn't have permissions to add delete tags from the virtual connection.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404004Virtual connection not foundThe virtual connection ID in the URI doesn't correspond to an existing virtual connection.
404404007Tag not foundThe tag in the URI doesn't exist for the specified virtual connection.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Label Gets a data label by its LUID. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI GET api/api-version/sites/site-luid/labels/label-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-luidThe unique LUID of the label asset.
#### Request Body None #### Permissions To view a data label, you must have read permissions on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 ``` ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401400103Generic query label errorAn unknown error occurred.
403403004Operation on resource unauthorizedInsufficient permissions to perform the operation.
404404030Label not foundThe label LUID doesn't correspond to an existing project.
409409004Invalid parameterOne or more values in the request body are invalid.
## Get Labels Displays information about the data labels on one or more assets. You can optionally limit the data labels to show by category using a query string. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI POST api/api-version/sites/site-luid/labels POST api/api-version/sites/site-luid/labels?categories=category-list #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
category-list(Optional) A comma-separated list of label value categories used to limit the labels shown to only the listed categories. See Data Labels in the REST API for information on label values and categories.
#### Request Body ``` ``` #### Attribute Values
asset-type

The type of asset. Valid asset types are:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
asset-luid The asset LUID.
#### Permissions To view a data label, you must have read permissions on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 ```
``` The contentAction element is optional. - If the contentAction element is not included, moving the database will also move its tables. - If the contentAction element is included and the action attribute is set to MoveDatabaseOnly, moving the database will not move its tables. The resourceList element can contain a minimum of 1 and a maximum of 1000 resource elements. #### Attribute Values
project-luid The LUID of the destination project.
location-type

The destination type. Currently, this value must be "PROJECT".

action-type To move a database without moving its tables, this value must be "MoveDatabaseOnly".
database-luid The LUID of the database.
asset-type The type of asset being moved. Currently, this value must be "DATABASE".
#### Permissions If you are moving a database _without_ its tables, you must have read and changeHierarchy permissions for the database, and write permission for the target project. If you are moving both a database and its tables, you must have read and changeHierarchy permissions for both the database and its tables, and write permission for the target project. Note: Currently, you can only set the ChangeHierarchy permission for databases and tables using the REST API. See [Add Database Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_database_perms) and [Add Table Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_table_perms) for information on adding this permission. Setting the required database and table permissions depends on whether the database is in a project or not. - If the database is in a project, the database and table permissions will follow the rules for permissions on content inside of projects. See [Set Permissions](https://help.tableau.com/current/server/en-us/permissions.htm#set-permissions) for information on these rules. - If the database is not in a project, the database and table permissions will follow the rules for permissions on external assets. See [Set permissions on individual external assets](https://help.tableau.com/current/server/en-us/dm_perms_assets.htm#set-permissions-on-individual-external-assets) for information on these rules. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:database_projects: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 **Example response when all elements were moved successfully:** ``` ``` **Example response when not all elements were moved successfully.:** When some database resource elements of a request with multiple database resource elements can’t be moved, the HTTP status 400 is returned, and the response contains additional information about failures. Resource elements from the request body that are not referenced in the response body were successfully moved. A response indicating partial success looks like: ``` Bad Request There was a problem completing one or more requests. ``` #### Version Introduced Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400409100Invalid location typeThe location element's type attribute must be "PROJECT".
400409103Invalid content typeThe resource element's contentType attribute must be "DATABASE".
403403004Operation on resource unauthorizedInsufficient permissions or operation not allowed. Make sure Tableau Catalog is enabled.
403403030Permissions deniedThe user does not have permission to move the database.
403403112Invalid OperationThe database may be embedded, and therefore cannot be moved.
403403156External assets can not be movedThe user does not have appropriate permissions.
404404005Project not foundThe project LUID doesn't correspond to an existing project.
404404031Database not foundThe database LUID doesn't correspond to an existing database. In a case where multiple databases were specified in the request, other database moves could have succeeded.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request POST 'http://MY-SERVER/api/3.16/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/databases' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd' -d @move-database.xml` **Content of move-database.xml:** ``` ``` **Example response:** ``` ``` ## Move Table Moves one or more tables to a project. Note: Starting in Tableau Cloud June 2022 and Tableau Server 2022.3, projects can contain databases and tables, and database and table permissions can be managed at the project level through inheritance. In Tableau Cloud March 2022 and Tableau Server 2022.1 and earlier, projects couldn’t contain databases or tables. The Move Table method can either: - Move a table from one project to another project. - Move a table not in a project to a project. This method can’t remove a table from all projects. (The only way to remove a table from all projects is to delete the project that the table is in.) This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/api-version/sites/site-luid/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the table.
#### Request Body ``` ``` The resourceList element can contain a minimum of 1 and a maximum of 1000 resource elements. #### Attribute Values
project-luid The LUID of the destination project.
location-type

The destination type. Currently, this value must be "PROJECT".

table-luid The LUID of the table.
asset-type The type of asset being moved. Currently, this value must be "TABLE".
#### Permissions You must have read and changeHierarchy permissions for the table, and write permission for the target project. If you are moving both a database and its tables, you must have read and changeHierarchy permissions for both the database and its tables, and write permission for the target project. Note: Currently, you can only set the ChangeHierarchy permission for databases and tables using the REST API. See [Add Database Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_database_perms) and [Add Table Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_table_perms) for information on adding this permission. Setting the required table permissions depends on whether the parent database is in a project or not. - If the table is in a project, the table permissions will follow the rules for permissions on content inside of projects. See [Set Permissions](https://help.tableau.com/current/server/en-us/permissions.htm#set-permissions) for information on these rules. - If the table is not in a project, the table permissions will follow the rules for permissions on external assets. See [Set permissions on individual external assets](https://help.tableau.com/current/server/en-us/dm_perms_assets.htm#set-permissions-on-individual-external-assets) for information on these rules. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:table_projects: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 **Example response when all elements were moved successfully:** ``` ``` **Example response when not all elements were moved successfully.:** When some table resource elements of a request with multiple table resource elements can’t be moved, the HTTP status 400 is returned, and the response contains additional information about failures. Resource elements from the request body that are not referenced in the response body were successfully moved. A response indicating partial success looks like: ``` Bad Request There was a problem completing one or more requests. ``` #### Version Introduced Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400409100Invalid location typeThe location element's type attribute must be "PROJECT".
400409103Invalid content typeThe resource element's contentType attribute must be "TABLE".
403403004Operation on resource unauthorizedInsufficient permissions or operation not allowed. Make sure Tableau Catalog is enabled.
403403030Permissions deniedThe user does not have permission to move the table.
403403112Invalid OperationThe table may belong to an embedded database, and therefore cannot be moved.
403403156External assets can not be movedThe user does not have appropriate permissions.
404404005Project not foundThe project LUID doesn't correspond to an existing project.
404404032Table not foundThe table LUID doesn't correspond to an existing table. In a case where multiple tables were specified in the request, other table moves could have succeeded.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request POST 'http://MY-SERVER/api/3.16/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/tables' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd' -d @move-table.xml` **Content of move-table.xml:** ``` ``` **Example response:** ``` ``` ## Query Column in a Table Get information about a column in a table asset. #### URI GET api/_api-version_/sites/_site-id_/tables/_table-id_/columns/_column-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
column-idThe unique ID of the column asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query a column asset in a table: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:columns: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
409409059Unknown column errorAn unknown column asset error occurred.
409409060Unknown column query errorAn unknown error occurred and the column query could not complete.
409409066Column not foundThe requested column asset could not be found.
## Query Columns in a Table Get information about the columns in a table asset. #### URI GET api/_api-version_/sites/_site-id_/tables/_table-id_/columns #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query column assets in a table: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:columns: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
409409059Unknown column errorAn unknown column asset error occurred.
409409060Unknown column query errorAn unknown error occurred and the column query could not complete.
409409066Column not foundThe requested column assets could not be found.
## Query Database Get information about a database asset. #### URI GET api/_api-version_/sites/_site-luid_/databases/_database-luid_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query a database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:databases: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 **Example response:** ``` ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409046Unknown database query errorAn unknown error occurred and the database query could not complete.
## Query Databases Get information about all database assets for a site. #### URI GET api/_api-version_/sites/_site-luid_/databases #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query database assets: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:databases: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 **Example response:** ``` ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested databases could not be found.
409409045Database errorAn unknown database asset error occurred.
409409046Unknown database query errorAn unknown error occurred and the database query could not complete.
## List Database Permissions Get information about the permissions on a database asset. #### URI GET api/_api-version_/sites/_site-luid_/databases/_database-luid_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users have permissions to query the permissions on the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body **Example response with explicit permissions set on a database asset:** ``` ``` **Example response without explicit permissions set on a database asset:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be returned because support for explicit permissions is available for database assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
400400120Bad requestSupport for explicit permissions is available for database assets associated with published data sources only.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
## List Default Database Permissions Get the default permissions applied to the database asset and its children tables. Note: If a database is in a project, default database permissions are not evaluated to determine table permissions. Use [Query Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_default_permissions) to see default permissions for projects instead. #### URI GET /api/_api-version_/sites/_site-luid_/databases/_database-luid_/default-permissions/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset to set default permissions for.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users set default permissions for the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Response Code 200 #### Response Body **Example response** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be returned because support for explicit permissions is available for database assets associated with published data sources only.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404003Resource not foundThe database LUID in the URI doesn't correspond to a database asset on the site.
## Query Data Quality Warning by ID Get information about a specific data quality warning. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Get Label](#get_label) method instead. #### URI GET api/_api-version_/sites/_site-id_/dataQualityWarnings/_dataqualitywarning-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
dataqualitywarning-idThe unique ID of the data quality warning.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400103Unknown data quality warning query errorAn unknown error occurred and the data quality warning query could not complete.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Query Data Quality Warning by Content Get information about the data quality warning for the database, table, column, published data source, flow, virtual connection, or virtual connection table. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Get Labels](#get_labels_on_assets) method instead. #### URI GET api/_api-version_/sites/_site-id_/dataQualityWarnings/_content-type_/_content-luid_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type The type of asset that the data quality warning is being attached to. To specify the type, use one of the following values:
  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable

These values are not case sensitive.

content-luid The LUID of the content (database, table, column, published data source, flow, virtual connection, or virtual connection table).
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400104Unknown data quality warning query errorAn unknown error occurred and the data quality warning query could not complete.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Query Data Quality Certification by ID Get information about a data quality certification. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Get Label](#get_label) method instead. #### URI GET api/_api-version_/sites/_site-id_/dataQualityCertifications/_certification-luid_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
certification-luidThe unique ID of the data quality certification.
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query a data quality certification: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` id="d5a4006c-0276-4c5a-bb98-712815c91ce7" userDisplayName="Mark Nguyen" contentId="a34884d0-1d80-4505-bf21-c6b7ce10814a" contentType="DATASOURCE" message="Marketing approved" type="CERTIFIED" active="true" createdAt="2021-06-08T17:22:20Z" updatedAt="2021-09-08T17:27:57Z" severe="false"/> siteID="284e2a17-65c8-47bf-b88f-ff96d69c2303" ownerID="f95180e7-0c64-4a58-86da-b9f4d3db2583" ``` #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400103Generic data quality certification errorThe data quality certification could not be queried for some reason other than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404030Data quality indicator not foundThe requested data quality certification was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Query Data Quality Certifications by Content Get all data quality certifications for content or asset items. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Get Labels](#get_labels_on_assets) method instead. #### URI GET api/_api-version_/sites/_site-id_/dataQualityCertifications/_content-type_/_content-luid_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content the data quality certification has been applied to. To specify the type, use one of the following values:

  • database
  • table
  • datasource
  • virtualconnection
  • virtualconnectiontable

These values are not case sensitive.

content-luid The LUID of the content (database, table, published data source, flow, virtual connection, or virtual connection table).
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query data quality certifications: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` id="d5a4006c-0276-4c5a-bb98-712815c91ce7" userDisplayName="Mark Nguyen" contentId="a34884d0-1d80-4505-bf21-c6b7ce10814a" contentType="DATASOURCE" message="Marketing approved" type="CERTIFIED" active="true" createdAt="2021-06-08T17:22:20Z" updatedAt="2021-09-08T17:27:57Z" severe="false"/> siteID="284e2a17-65c8-47bf-b88f-ff96d69c2303" ownerID="f95180e7-0c64-4a58-86da-b9f4d3db2583" ``` #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400104Generic data quality certification errorThe data quality certification could not be queried for some reason other than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Data quality indicator not foundThe requested data quality certification was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Query Quality Warning Trigger Get information about a quality warning trigger. #### URI GET api/_api-version_/sites/_site-id_/dataQualityTriggers/_trigger-id_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content the quality warning trigger has been applied to. To specify the type, use on of the following values:

  • datasource
  • flow

These values are not case sensitive.

trigger-id The unique ID of the quality warning trigger.
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query a quality warning trigger: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400134Generic quality warning trigger errorThe quality warning trigger could not be queried for some reason other than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404037Quality warning not foundThe requested quality warning trigger was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Query All Quality Warning Triggers by Content Get information about all quality warning triggers for a content item. #### URI GET api/_api-version_/sites/_site-id_/dataQualityTriggers/content-type/_content-luid_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content that the quality warning trigger has been applied to. To specify the type, use one of the following values:

  • datasource
  • flow

These values are not case sensitive.

content-luid The unique ID of the asset. This is the same as the content ID.
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query quality warning triggers: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400134Generic quality warning trigger errorThe quality warning triggers could not be queried for some other reason than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404037Quality warning not foundThe requested quality warning trigger was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Query Table Get information about a table asset. #### URI GET api/_api-version_/sites/_site-id_/tables/_table-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query the table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tables: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table could not be found.
409409052Unknown table errorAn unknown table asset error occurred.
409409053Unknown table query errorAn unknown error occurred and the table query could not complete.
## Query Tables Get information about all table assets for a site. #### URI GET api/_api-version_/sites/_site-id_/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query table assets: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tables: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 **Example response:** ```
``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested tables could not be found.
409409052Unknown table errorAn unknown table asset error occurred.
409409053Unknown table query errorAn unknown error occurred and the table query could not complete.
## List Table Permissions Get information about the permissions on a table asset. #### URI GET api/_api-version_/sites/_site-id_/tables/_table-id_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users have permissions to query the permissions on the table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body **Example response with explicit permissions set:** ``` ``` **Example response without explicit permissions set:** ```
``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be returned because support for explicit permissions is available for table assets associated with published data sources (not embedded data sources) only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Table errorAn unknown table asset error occurred.
409409053Unknown table query errorAn unknown error occurred and the table query could not complete.
## Remove Column Permanently remove the column from a table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/tables/_table-id_/columns/_column-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
column-idThe unique ID of the column asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to remove the column: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:columns: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409059Column errorAn unknown column asset error occurred.
409409061Unknown column delete errorAn unknown error occurred and the column could not be deleted.
409409066Column not foundThe requested column asset could not be found.
## Remove Database Permanently remove the database asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/databases/_database-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
database-idThe unique ID of the database asset.
#### Request Body None #### Permissions Server or site administrators only. If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to remove the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:databases: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409047Database delete errorAn unknown error occurred and the database asset could not be deleted.
## Remove Table Permanently remove the table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/tables/_table-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to remove the table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tables: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Table errorAn unknown table asset error occurred.
409409054Unknown table delete errorAn unknown error occurred and the table could not be deleted.
## Update Column Update the description of the column. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-id_/tables/_table-id_/columns/_column-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
column-idThe unique ID of the column asset.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid. Only the attributes and child elements that are included result in updates to the table. If no attributes or nested elements are included, no update is made.
new-description-value(Optional) Custom text to describe the column.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update the column: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:columns: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Column errorAn unknown table asset error occurred.
409409057Column update errorAn unknown error occurred and the table asset could not be updated.
409409058Column update forbiddenA user without "write" permissions to the table asset attempted an update.
409409066Column not foundThe requested column asset could not be found.
## Update Database Update the database description, certify a database, set database permissions, or assign a Tableau Cloud or Server user as the database contact. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-luid_/databases/_database-luid_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid. Only the attributes and child elements that are included result in updates to the database asset. If no attributes or nested elements are included, no update is made.
certification-status

(Optional) Certify or remove certification by using the following:

  • True
  • False
certification-note (Optional) Custom text to accompany the certification status.
new-description-value (Optional) Custom text to describe the database asset.
new-content-permissions

(Optional) The new permissions setting for the database. You can specify one of the following:

  • LockedToDatabase to lock permissions so that users cannot overwrite the default permissions set for the database asset.
  • ManagedByOwner to allow users to manage permissions for the database asset used by the content that they own.

The default permissions setting is ManagedByOwner. These values are case sensitive.

new-contact-luid (Optional) The LUID of the Tableau Server or Tableau Cloud user to associate with the database asset.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:databases: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409050Database update errorAn unknown error occurred and the database asset could not be updated.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Update Data Quality Warning Update the warning type, status, and message of a data quality warning. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Update Label](#update_label) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-id_/dataQualityWarnings/_dataqualitywarning-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
dataqualitywarning-idThe unique ID of the data quality warning.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid, but the data quality warning type is required. If the data quality warning type is not included, an error is thrown.
type

Type of data quality warning to apply to the asset. To specify the type, use one of the following values:

  • DEPRECATED
  • WARNING
  • STALE
  • MAINTENANCE

Note: In Tableau Server 2023.1 and earlier, SENSITIVE_DATA is another type of data quality warning. Starting in Tableau Cloud June 2023 and Tableau Server 2023.3, it's a sensitivity label instead.

These values are not case sensitive.

status

(Optional) Controls whether the data quality warning displays. Value can be "true" or "false". If the state is not specified, the data quality warning is set to "true" and is visible by default.

message

(Optional. Was required in Tableau Server 2023.3 and earlier.)

A custom message to accompany the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.

severity (Optional) Enables high visibility for the data quality warning when set to "true". Values can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400109Bad requestThe request body can't be empty.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Update Monitoring Quality Warning Update a monitoring quality warning. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-id_/dataQualityTriggers/_trigger-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
trigger-idThe unique ID of the monitoring quality warning.
#### Request Body ``` ``` #### Attribute Values
type

Type of monitoring quality warning. To specify the type, use one of the following values:

  • EXTRACT_REFRESH
  • FLOW_RUN

These values are not case sensitive.

status

Monitoring status. Values can be "true" or "false". If set to "true", the data source is monitored for extract refresh failures or the flow is monitored for flow run failures).

If an extract refresh or flow run failure occurs, the specified data quality warning is attached to the data source or flow (depending on type). The data quality warning is removed when the extract refresh or flow run is successful.

For more information about monitoring quality warnings, see the monitoring quality warning section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.

message (Optional) A custom message for the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
severity High visibility status of the data quality warning. Values can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update a monitoring quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400137Generic quality warning trigger errorThe monitoring quality warning could not be updated for some other reason than those specified below.
403403004Unauthorized operation.Insufficient permissions to perform the operation.
409409004Invalid parameterOne or more values in the request body are invalid.
## Update Label Updates a label by its LUID. This method can update the label value, message, active flag, and elevated flag. You can't update the label category. If you choose a label value name that's associated with a different category, you get an error. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. You can't update extract refresh or flow run monitoring warnings (the extract\_refresh\_failure and flow\_run\_failure label values) using this method because those warnings are set and cleared automatically, depending on their triggers. See also "How to set a monitoring quality warning" in the [Tableau Server](https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) and [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) Help and the quality warning trigger methods in [Metadata Methods](#). All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI PUT api/api-version/sites/site-luid/labels/label-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-luidThe unique LUID of the label asset.
#### Request Body ``` ``` #### Attribute Values
label-value-name

(Optional) The label value name.

You cannot change the category when updating a label. Choosing a label value name that's associated with a different category causes an error. See Data Labels in the REST API for a list of built-in label values and categories.

Choosing a monitoring quality warning value (extract_refresh_failure or flow_run_failure) causes an error.

label-message (Optional) The message text for the label. In the web interface, this is reflected as a certification note or a data quality warning message. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
active-flag (Optional) Boolean. If set to true, the label becomes active. If set to false, the label becomes inactive.  If omitted, the default is true.
elevated-flag (Optional) Boolean. If set to true, the label becomes elevated. If set to false, the label becomes not elevated.  If omitted, the default is false.
#### Permissions - To add or update a data label other than a certification label, you must have write permission on the associated asset. - To add or update a certification label, you must be an administrator, or else you must be a project leader or product owner for the project the asset is in. - To add or update a certification label for an external asset _not_ in a project, you must have the change permissions permission on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 ``` ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400103Generic query label errorAn unknown error occurred.
400400109Missing payloadThe request body is missing a label element.
403403004Invalid parameterOperation on resource unauthorized
404404030Label not foundThe label LUID doesn't correspond to an existing project.
409409004Invalid parameterOne or more values in the request body are invalid, or you are trying to change the label value to one from a different category. This error can also occur if you try to create or change a monitoring quality warning (label values extract_refresh_failure and flow_run_failure).
## Update Labels Creates or updates labels on one or more assets. Each asset listed in the request body is updated to have a label with the specified value, message, active flag, and elevated flag. If the request body specifies a label value that is already on the asset, the label on the asset is updated to match the request body. Otherwise, a label is created and attached to the asset. **Note:** On Tableau Server 2023.3 and earlier, only one label of a category is allowed on an asset. If the request body specifies a label value with _the same category_ as a label already on the asset, the label on the asset is updated to match the request body. Otherwise, a label is created and attached to the asset. Note that the label category is not an attribute in the request body, because you do not set it explicitly. Instead you implicitly set the category by using the label value name. For example, choosing a label value name of stale means that the label value category will be warning. Also, you can't update the label category on an existing label. If you set the label value to one that's in a different category, you get an error. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. You can't update extract refresh or flow run monitoring warnings (the extract\_refresh\_failure and flow\_run\_failure label values) using this method because those warnings are set and cleared automatically, depending on their triggers. See also "How to set a monitoring quality warning" in the [Tableau Server](https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) and [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) Help and the quality warning trigger methods in [Metadata Methods](#). All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI PUT api/api-version/sites/site-luid/labels #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
#### Request Body ``` ``` #### Attribute Values
asset-type

The type of asset. Valid asset types are:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
asset-luid The asset LUID.
label-value-name

The label value name.

The built-in label value names are:

  • certification
  • warning
  • deprecated
  • stale
  • maintenance
  • sensitive _data

You can also use custom label value names that an administrator creates. (Custom label values were released with Tableau Cloud June 2023 and Tableau Server 2023.3.)

If the request body specifies a label value that is already on the asset, the label on the asset is updated to match the request body. Otherwise, a label is created and attached to the asset.

Note: On Tableau Server 2023.3 and earlier, only one label of a category is allowed on an asset. If the request body specifies a label value with the same category as a label already on the asset, the label on the asset is updated to match the request body. Otherwise, a label is created and attached to the asset.

See Data Labels in the REST API for a list of built-in label values and categories.

Choosing a monitoring quality warning value (extract_refresh_failure or flow_run_failure) causes an error.

label-message

(Optional. Was required in Tableau Server 2023.3 and earlier.)

The message text for the label. In the web interface, this is reflected as a certification note or a data quality warning message. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.

active-flag (Optional) Boolean. If set to true, the label becomes active. If set to false, the label becomes inactive.  If omitted, the default is true.
elevated-flag (Optional) Boolean. If set to true, the label becomes elevated. If set to false, the label becomes not elevated.  If omitted, the default is false.
#### Permissions - To add or update a data label other than a certification label, you must have write permission on the associated asset. - To add or update a certification label, you must be an administrator, or else you must be a project leader or product owner for the project the asset is in. - To add or update a certification label for an external asset _not_ in a project, you must have the change permissions permission on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Response Body ``` [Skip to main content](#main-content) # Metrics Methods - Retired **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Using the metrics methods of the Tableau REST API you can: - List all metrics configured for a site - Get the details of a specific metric - Get the data of a specific metric as CSV - Update the name, containing project, suspended status, and owner of a specific metric - Delete a specific metric This functionality relates to the UI elements and concepts described at: [Create and Troubleshoot Metrics](https://help.tableau.com/current/server/en-us/metrics_create.htm). ## 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: Metrics - Retired in API 3.22](https://www.postman.com/salesforce-developers/salesforce-developers/folder/tlutrsb/metrics-retired-in-api-3-22) ## Delete Metric - Retired in API 3.22 **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Deletes a specified metric from a site. #### URI DELETE /api/api-version/sites/site-id/metrics/metric-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the metric.
metric-luidThe unique ID of the metric to remove.
#### Request Body None #### Permissions Users who are not administrators can delete a metric for which they have explicit or implicit Read (view) and Delete permission. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:metrics: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Metric not foundThe metric ID in the URI doesn't correspond to an existing metric.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.9/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/metrics/6561daa3-20e8-407f-ba09-709b178c0b4a" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. ## Get Metric - Retired in API 3.22 **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Returns the details of the specified metric. #### URI GET /api/api-version/sites/site-id/metrics/metric-luid; #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site that contains the metric.>
metric-luidThe unique ID of the metric.
#### Request Body None #### Permissions This method can be called by any user, but those without administrator permissions will only be able to view responses for metrics they own. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ` ` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Permissions issueThe user does not have permissions to read the specified metric.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Metric not foundThe metric ID in the URI doesn't correspond to an existing metric.
#### Example `curl "http://MY-SERVER/api/3.9/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/metrics/6561daa3-20e8-407f-ba09-709b178c0b4a" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Response Body** ` ` ## Get Metric Data - Retired in API 3.22 **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Returns the data for the specified metric as comma separated (CSV) format. The maximum number of rows returned is 10,000. #### URI GET /api/api-version/sites/site-luid/metrics/metric-luid/data #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source to get revisions for.
metric-luidThe LUID of the metric whose data should be returned.
#### Request Body None #### Permissions Tableau administrators, and non-administrator and users with Read capability for a metric, will be able to get its data. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:metrics:download ``` 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 ``` your_timestamp_column_name,your_measure_column_nametimestamp_1,measure_1timestamp_2,measure_1 ``` #### Version Introduced Tableau Cloud June 2022 (API 3.16). Not currently available for Tableau Server. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
40040000Bad requestThe LUID of the site or metric was malformed.
40140100Not authorizedThe authentication token provided in the request header was invalid or has expired.
403403054Not authorizedA non-administrator user attempted to get metric data, but does not have sufficient permissions.
404404000Site not foundThe site LUIID in the URI doesn't correspond to an existing site.
404Metric not foundThe metric LUID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not GET.
429405000Too many requestsThe concurrent request limit for the site was exceeded. Retry after a pause.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example Request command line: `curl "http://MY-SERVER/api/3.16/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/metrics/2474164d-8d37-4a4c-abc7-c2070fd25fd5/data" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` Response: ``` Timestamp,Measure 2021-12-31:11:59:57-0800,3 2021-12-31:11:59:58-0800,2 2021-12-31:11:59:59-0800,1 ``` ## List Metrics for Site - Retired in API 3.22 **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Returns the metrics configured for a site. If the user is not an administrator, the method returns just the metrics for which the user has permissions. #### URI GET /api/api-version/sites/site-id/metrics GET /api/api-version/sites/site-id/metrics?filter=filter-expression GET /api/api-version/sites/site-id/metrics?sort=sort-expression GET /api/api-version/sites/site-id/metrics?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/metrics?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the metrics.
filter-expression(Optional) An expression that lets you specify a subset of metrics to return. You can filter on predefined fields such as metric name, or attributes of the associated owner or project. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which metric information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the metrics or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the REST API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand (**`&`**). #### Request Body None #### Permissions Users who are not administrators can get only the metrics for which they have implicit or explicit Read (view) permissions. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). `tableau:content: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 ` ... additional tags ... ... additional metrics ... ` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size exceeds upper limitThe page size parameter exceeds the system-wide upper limit of 1000.
403403018Read forbiddenA non-administrator user attempted to query metrics for the site, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Metrics not foundNo metrics are configured for this site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/metrics" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response body:** ` underlyingView="29dae0cd-1862-4a20-a638-e2c2dfa682d4" ` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400123Unkown errorThe metric could not be updated for an unknown reason.
403403119Owner update forbiddenThe user does not have administrator permissions to change the owner for the metric.
403403120Project update forbiddenThe user doesn't have Write permission for the project they are trying to move the metric to.
403403118Name update forbiddenThe user does not have administrator permissions to change the name for the metric.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002Owner not foundThe owner ID in the request body doesn't correspond to an existing owner.
404404004Metric not foundThe metrice ID in the URI doesn't correspond to an existing metric.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not PUT.
409409015Metric name conflictThe metric name in the request already belongs to the specified site. For the purpose of uniqueness checks, metric names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/metrics/6561daa3-20e8-407f-ba09-709b178c0b4a" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-metric.xml` **Content of update-metric.xml** ` ` **Example response body:** ` underlyingView="29dae0cd-1862-4a20-a638-e2c2dfa682d4" ` [Skip to main content](#main-content) # Mobile Settings Methods Using the mobile settings methods of the Tableau REST API you can: - List the mobile security settings for a site or server. - Update the mobile security settings for a site or server. ### About mobile device security settings Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1) and later. These settings include detecting the following conditions: - Jailbreak Detection - for Android and iOS devices. - Maximum offline time before security policy update - for Android and iOS devices. _Available in API 3.19 (Tableau Cloud March 2023 / Server 2023.1) and later._ - Screenshot protection - for Android devices. - Malware Detection - for Android devices. > [!IMPORTANT] > > In September 2025, Tableau Mobile retired support for the malware detection setting. The malware detection setting was removed from the Tableau Cloud settings in September 2025 and from the Tableau Server settings in Tableau Server version 2025.2.3. Any configuration of the malware detection setting on previous versions of Tableau Server has no effect on the Tableau Mobile app. ## 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: Mobile Settings](https://www.postman.com/salesforce-developers/salesforce-developers/folder/xet1ze3/mobile-settings) ## Get Mobile Security Settings for Server Gets the mobile security settings for the server. **Version:** Available in API 3.19 (Tableau Cloud December 2022 / Server 2023.1) 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:** Only Tableau server and site administrators can get mobile security settings for the server.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:mobile\_security\_site\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/settings/mobilesecuritysettings #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### cURL Request Example `curl -L -X GET "https://qa-server.tsi.lan/api/3.18/settings/mobilesecuritysettings" -H "Accept: application/json" -H "X-Tableau-Auth: ejET2rVmS2e81XiZ9G4lzQ|Iz71DR2lu3r0zHpcOAH2OoRQZlPfxACC|a905dbfd-6550-4546-908b-3e055fcc026d" --data-raw ""` #### Response Code 200 #### Response Body Copy ```                                         true                                        false                                                        14                                        14                                                        true                         ``` Copy ``` {    "mobileSecuritySettingsList": {        "mobileSecuritySettings": [            {                "name": "mobile.security.jailbroken_device",                "enabled": true,                "iosConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                },                "androidConfig": {                    "valueList": [                        "false"                    ],                    "enabled": true,                    "severity": "critical"                }            },            {                "name": "mobile.security.max_offline",                "enabled": true                "iosConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },                "androidConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },            },            {                "name": "mobile.security.screenshot",                "enabled": false,                "androidConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                }            }        ]    }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe request is incomplete is malformed.
400400174Mobile security settings errorAn uknown mobile security settings error has occurred.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user does not have the required administrtor permissions.
403403157ForbiddenMobile security settings are not enabled on the server.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Mobile Security Settings for Site Gets the mobile security settings for the specified site. **Version:** Available in API 3.18 (Tableau Cloud December 2022) 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:** Only Tableauserver and site administrators can get mobile security settings.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:mobile\_security\_site\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-luid/settings/mobilesecuritysettings #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### 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 ```                                         true                                        false                                                        14                                        14                                                        true                         ``` Copy ``` {    "mobileSecuritySettingsList": {        "mobileSecuritySettings": [            {                "name": "mobile.security.jailbroken_device",                "enabled": true,                "iosConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                },                "androidConfig": {                    "valueList": [                        "false"                    ],                    "enabled": true,                    "severity": "critical"                }            },            {                "name": "mobile.security.max_offline",                "enabled": true                "iosConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },                "androidConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },            },            {                "name": "mobile.security.screenshot",                "enabled": false,                "androidConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                }            }        ]    }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe request is incomplete is malformed.
400400174Mobile security settings errorAn uknown mobile security settings error has occurred.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user does not have the required administrtor permissions.
403403157ForbiddenMobile security settings are not enabled on the server.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Mobile Security Settings for Site Updates the mobile security sections for a specified site. **Version:** Available in API 3.18 (Tableau Cloud December 2022) 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:** Only Tableau server administrators can update mobile security settings for the server.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:mobile\_security\_site\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/settings/mobilesecuritysettings #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body Copy ``` {    "mobileSecuritySettingsList": {        "mobileSecuritySettings": [            {                "name": "mobile.security.jailbroken_device",                "enabled": true,                "iosConfig": {                    "valueList": [                        "true"                    ],                    "severity": "warn"                },                "androidConfig": {                    "valueList": [                        "false"                    ],                    "severity": "critical"                }            },            {                "name": "mobile.security.max_offline",                "enabled": true                "iosConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },                "androidConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },            },                    {                "name": "mobile.security.screenshot",                "enabled": false,                "androidConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                }            }        ]    }} ``` #### Request Attributes
mobileSecuritySettings name

(Optional)Enum. The device condition addressed by a security setting element. Supported values are:

  • mobile.security.jailbreak_detection
  • mobile.security.max_offline
    Available in API 3.19 (Tableau Cloud March 2023 / Server 2023.1) and later.
  • mobile.security.screenshot
mobileSecuritySettings enabled (Optional) Boolean. If true, enables the Tableau mobile client to detect and respond to the condition described in the setting's name. The enabled attribute for the Android or iOS configuration element of the setting must also be true for detection on that type of device. If mobileSecuritySettings enabled = false, the Android and iOS configuration element attribute settings will be ignored.
mobileSecuritySettings androidConfig / iosConfig

(Optional)Element. Security settings specific to the platform of the mobile device hosting the Tableau client for the setting being configured. Required attributes of this element are:

  • valueList -

    In the case of mobile.security.max_offline String - whole number. The number of days a device can be offline without requiring a security policy refresh. Minimum value is 1, default value is 14.

    In other cases String - true or false. Determines if the condition of the setting is detected for the specified platform.

  • severity - Enum. Defines the response of the Tableau mobile client when the condition of the setting is detected.
  • enabled - String -true or false. On the device type being configured, if true, enables detection of the containing setting's security condition, as long as that setting's enabled attribute value is also true.

    Severity level can be set for the jailbreak detection setting. The levels and the actions the Tableau client will take are as follows:

    • Warn: If a detection occurs, show a dismissible blocking screen.
    • Error: If a detection occurs, show a blocking screen until the issue is resolved.
    • Critical: If a detection occurs, shows a blocking screen, log the user out, and close the session.

    If screenshot protection is enabled a severity level is required, but regardless of which level you select the behavior of the app will be: If a screenshot is attempted, show a temporary toast without blocking the app.

    Default settings for a Tableau Cloud site are:

    • Jailbreak detection enabled with critical severity.
    • Maximum offline time for security policy update set at 14 days with critical severity.
    • Screenshot protection is enabled with warn level.
#### cURL Request Example `curl -L -X PUT "https://qa-server.tsi.lan/api/3.18/settings/mobilesecuritysettings" -H "Accept: application/json" -H "X-Tableau-Auth: ejET2rVmS2e81XiZ9G4lzQ|Iz71DR2lu3r0zHpcOAH2OoRQZlPfxACC|a905dbfd-6550-4546-908b-3e055fcc026d" --data-raw ""` #### Response Code 200 #### Response Body Copy ``` {    "mobileSecuritySettingsList": {        "mobileSecuritySettings": [            {                "name": "mobile.security.jailbroken_device",                "enabled": true,                "iosConfig": {                    "valueList": [                        "true"                    ],                    "severity": "warn"                },                "androidConfig": {                    "valueList": [                        "false"                    ],                    "severity": "critical"                }            },            {                "name": "mobile.security.max_offline",                "enabled": true                "iosConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },                "androidConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },            },                    {                "name": "mobile.security.screenshot",                "enabled": false,                "androidConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                }            }        ]    }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing, incomplete, or is malformed XML. Invalid values for enabled, iosConfig, androidConfig, severity, or enabled attributes are possible causes.
400400174Mobile security settings errorAn uknown mobile security settings error has occurred.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user does not have the required administrtor permissions.
403403157ForbiddenMobile security settings are not enabled on the server.
409409004Invalid settingA mobile security setting enabled, name or other value is missing or malformed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the specified data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
**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 ``` ``` #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
403403004Write forbiddenA user called this method who does not have the required permissions.
403409028Adding recipient to data-driven alert forbiddenThe user is not authorized to add the recipient to the data-driven alert.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002Resource Not FoundThe user ID specified in the request body is invalid.
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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:** ``` ``` **Example response:** ``` ``` ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body Copy ```    -->  />  ``` 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
dataAlertCreateAlert alertCondition

(Required) Enumeration: 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:

  • above
  • above-equal
  • below
  • below-equal
  • equal
dataAlertCreateAlert alertThreshold (Required) Int: The data value where an alert should be triggered when that value drops below or rises above the alert threshold value.
dataAlertCreateAlert subject (Required) String: The name of the data driven alert.
dataAlertCreateAlert frequency

(Required) Enumeration: The time period between attempts by Tableau to assess whether the alert threshold has been crossed. The value can be one of:

  • once Sends the alert only the first time the alert threshold is crossed.
  • freguently As frequently as possible given server conditions.
  • hourly
  • daily
  • weekly
dataAlertCreateAlert visibility (Required) Enumeration: Determines whether the alert can be seen by only its creator (private), or by any user with permissions to the worksheet where the alert resides (public) . The value can be one of:
  • private
  • public
dataAlertCreateAlert device

(Optional) Enumeration: The type of device the alert is formatted for. If no device is provided then the default device setting of the underlying view is used. Values can be one of:

  • desktop
  • phone
  • tablet
dataAlertCreateAlert worksheetName

(Required) String: The name of the worksheet that the DDA will be created on.

For dashboards, 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.

For custom views, the name of the original view that was used to form the custom view.

dataAlertCreateAlert viewId

OR

dataAlertCreateAlert customViewId

(Required) LUID: The LUID of either the viewId or customViewId that contains the data that can trigger an alert.
#### 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 ```    -->  />  ``` 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
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400403165DDA creation failedA data driven alert could not be created because there is a missing value in the request body.
401401002Unauthorized AccessThe 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.
403403164DDA not enabledData driven alerts are not enabled for the site, or the user visibility site setting is configured as limited.
404404011View not foundThe view specified in the request could not be found.
404409004Request is malformedA data driven alert could not be created because there is an unexpected value in the request body.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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//webhooks #### Parameter Values
site-idThe ID of the site in which you want to create the webhook.
#### Request Body #### Attribute Values
webhook-name This is required. A name for the webhook.
api-event-name | webhook-source-api-event-name

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. 

Recommended: 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.

url Required. The destination URL for the webhook. The webhook destination URL must be https and have a valid certificate.
webhook-enabled-flag (Optional) Boolean. If true (default), the newly created webhook is enabled. If false then the webhook will be disabled.  
#### 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 #### Response Headers Location: /api/3.29/sites/site-id/webhooks/ ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the specified data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
**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
HTTP statuserror CodeConditionDetails
403403004Delete forbiddenA user called this method who does not have the required permissions
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the specified data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
user-idThe ID (not name) of the user to remove from the data-driven alert.
**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
HTTP statuserror CodeConditionDetails
403403004Delete forbiddenA user called this method who does not have the required permissions.
403409029Deleting recipient from data-driven alert forbiddenThe user is not authorized to remove the recipient from the data-driven alert.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002Resource Not FoundThe user ID specified in the request body is invalid.
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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//webhooks/ #### Parameter Values
site-idThe ID of the site that contains the workbook to be deleted.  
webhook-idThe ID of the webhook.  
#### 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
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the users.
filter-expression

(Optional) An expression that lets you specify a subset of notification preferences to return. You can filter on the following fields and corresponding options:

  • channel: email, in_app, and slack
  • notificationType: comments, webhooks, prepflow, share, dataalerts,and extractrefresh

You can include multiple filter expressions. For more information, see Filtering and Sorting.

#### 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 ``` ``` #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400409109Invalid requestInvalid notification type.
400409100Invalid requestInvalid channel.
403403004Invalid permissionsInvalid permission to update site user notification settings.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodThe request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example **Example response:** ``` ``` ## Get a Webhook Returns information about the specified webhook. #### URI GET /api/3.6/sites//webhooks/ #### Parameter Values
site-idThe ID of the site that contains the webhook.
webhook-idThe ID of the webhook.
#### 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 ## List Webhooks Returns a list of all the webhooks on the specified site. #### URI GET /api/3.6/sites//webhooks #### Parameter Values
site-idThe ID of the site that contains the webhooks.   
#### 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 ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains data-driven alerts.
**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 ``` ``` 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/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe 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.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403004Read forbiddenA user queried this method who does not have the required permissions
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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:** ``` ``` ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the specified data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
**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 ``` ``` The **createdAt** and **updatedAt** values are dates and times in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA user queried this method who does not have the required permissions
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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:** ``` ``` ## 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//webhooks//test #### Parameter Values
site-idThe ID of the site that contains the webhook.  
webhook-idThe ID of the webhook.  
#### 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 ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
**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 ``` ``` #### Attribute Values
data-alert-subject(Optional) The string to set as the new subject of the alert.
data-alert-frequency(Optional) The frequency of the data-driven alert: once, frequently, hourly, daily, or weekly.
data-alert-owner-id(Optional) The ID of the user to assign as owner of the data-driven alert.
is-public-flag(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.
#### Response Code 200 #### Response Body ``` ``` The createdAt and updatedAt attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Errors
HTTP statuserror CodeConditionDetails
403403004Write forbiddenA user called this method who does not have the required permissions.
403409030Updating data-driven alert forbiddenThe user is not authorized to update the data-driven alert.
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002Resource Not FoundThe user ID specified in the request body is invalid.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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:** ``` ``` **Example response:** ``` ``` ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
#### Request Body ``` ``` #### Attribute Values
enabled-flag (Required, boolean) If true, the specified site notifications will be on. If false, the specified site notifications will be off.
channel (Required, string) Specifies the channel that the notification preferences are to be updated (turned on or off). Valid channels are: email, in_app, and slack.
notification-type

Specifies the notification type for which the notification preferences are to be updated (turned on or off). Valid notification types are: comments, webhooks, prepflow, share, dataalerts,and extractrefresh.

#### 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 ``` Success Success ``` #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Invalid PermissionsInvalid permission to update site user notification settings.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodThe request type was not PATCH.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example response ``` Success Success ``` ## Update a Webhook Modify the properties of an existing webhook. #### URI PUT /api/3.8/sites//webhooks/ #### Parameter Values
site-idThe ID of the site that contains the webhook to be updated.  
webhook-idThe ID of the webhook.  
#### Request Body #### Attribute Values
webhook-name This is required. A name for the webhook.
api-event-name | webhook-source-api-event-name

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. 

Recommended: 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.

url (Optional) The destination URL for the webhook. The webhook destination URL must be https and have a valid certificate.
webhook-enabled-flag (Optional) Boolean. If true (default), the newly created webhook is enabled. If false then the webhook will be disabled.  
reason-for-disablement

The reason a webhook is disabled.

  • If isEnabled set to true, omit this parameter from your request to create a webhook, or set the value of statusChangeReason to an empty string. Providing a reason value when creating an enabled webhook will result in an error (400127).
  • If isEnabled set to false, then unless you provide a value for statusChangeReason it will default to "Webhook disabled by user".
#### 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 #### Errors
HTTP statuserror CodeConditionDetails
400400127Bad requeststatusChangeReason was provided with isEnabled = true
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Response Headers ``` Location: /api/3.29/sites/site-id/webhooks/new-webhook-id ``` [Skip to main content](#main-content) # OpenID Connect Methods Using the OpenID Connect (OIDC) methods of the Tableau REST API you can: - Set your Tableau Cloud site to use OIDC authentication to authenticate users  - Configure OIDC authentication when your identity provider (IdP) does not provide a configuration URL (in other words, a URL that ends with `.well-known/openid-configuration`) - Configure client authentication, custom scope, prompt, essential ACR Values, or voluntary ACR values that the Tableau Cloud's OIDC configuration UI does not support - Get details about the OIDC configuration - Update your OIDC configuration - Remove your OIDC configuration The above functionality relates to OIDC elements described at: [OpenID Connect](https://help.tableau.com/current/online/en-us/openid_auth.htm). ## Create OpenID Connect Configuration Create the Tableau Cloud site's OpenID Connect (OIDC) configuration. After you've configured OIDC authentication, you can use the Tableau Cloud's UI to [test the configuration](https://help.tableau.com/current/online/en-us/openid_auth_server_config.htm#test) and [add users](https://help.tableau.com/current/online/en-us/openid_auth_server_config.htm#test). For more information about OIDC authentication in Tableau Cloud, see [OpenID Connect](https://help.tableau.com/current/online/en-us/openid_auth.htm) in the Tableau Cloud Help. **Version:** Available in API 3.22 (Tableau Cloud February 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI PUT /api/api-version/sites/site-luid/site-oidc-configuration #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body Copy ```    ``` Copy ``` {  "siteOIDCConfiguration": {    "idpConfigurationName": "idpConfigurationName",    "enabled": "enabled",    "clientId": "clientId",    "clientSecret": "clientSecret",    "authorizationEndpoint": "authorizationEndpoint",    "tokenEndpoint": "tokenEndpoint",    "userinfoEndpoint": "userinfoEndpoint",    "jwksUri": "jwksUri",    "endSessionEndpoint": "endSessionEndpoint",    "allowEmbeddedAuthentication": "allowEmbeddedAuthentication",    "prompt":"prompt",    "customScope":"customScope",    "clientAuthentication": "clientAuthentication",    "essentialAcrValues": "essentialAcrValues",    "voluntaryAcrValues": "voluntaryAcrValues",    "emailMapping": "emailMapping",    "firstNameMapping": "firstNameMapping",    "lastNameMapping": "lastNameMapping",    "fullNameMapping": "fullNameMapping",    "useFullName": "useFullName"    }} ``` #### Request Attributes
idpConfigurationName

(Required) The name of the configuration.

Starting in API 3.24, you can create and enable multiple authentication configurations. For more information, see Authentication in the Tableau Cloud Help.

enabled (Required) Controls whether the configuration is enabled or not. Value can be "true" or "false". For example "true".
clientId (Required) The client ID from your IdP. For example, "0oa111usf1gpUkVUt0h1".
clientSecret (Required) The client secret from your IdP.
authorizationEndpoint (Required) Use the authorization endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the user information endpoint (authorization_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/authorize".
tokenEndpoint (Required) Use the token endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the token endpoint (token_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/token".
userinfoEndpoint (Required) Use the user information endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the user information endpoint (userinfo_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/userinfo".
jwksUri (Required) Use the JWK set URI from your IdP. To find the value, enter the configuration URL in a browser and obtain the JWK set URI endpoint (jwks_uri) from the details that are returned. For example, "https://myidp.com/oauth2/v1/keys".
endSessionEndpoint (Optional) If single logout (SLO) is enabled for the site, which is done through Tableau Cloud site UI, you can specify the configuration URL or the end session endpoint from your IdP. For example, "https://myidp.com/oauth2/v1/logout".
allowEmbeddedAuthentication (Optional) Controls how users authenticate when accessing embedded views. Value can be "true" or "false". Default value is "false", which authenticates users in a separate pop-up window. When set to "true", users authenticate using an inline frame (IFrame), which is less secure.
customScope (Optional) Specifies a custom scope user-related value that you can use to query the IdP. For example, "openid, email, profile".
prompt (Optional) Specifies whether the user is prompted for re-authentication and consent. For example, "login, consent".
clientAuthentication (Optional) Token endpoint authentication method. Value can be "client_secret_basic" or "client_secret_post". Default value is "client_secret_basic".
essentialAcrValues (Optional) List of essential Authentication Context Reference Class values used for authentication. For example, "phr".
voluntaryAcrValues (Optional) List of voluntary Authentication Context Reference Class values used for authentication.
emailMapping (Optional) Claim for retrieving email from the OIDC token. Default value is "email".
firstNameMapping (Optional) Claim for retrieving first name from the OIDC token. Default value is "given_name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "false".
lastNameMapping (Optional) Claim for retrieving last name from the OIDC token. Default value is "family_name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "false".
fullNameMapping (Optional) Claim for retrieving name from the OIDC token. Default value is "name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "true".
useFullName (Optional) Controls what is used as the display name. Value can be "true" or "false". Default value is "false", which uses first name (firstNameMapping attribute) and last name (lastNameMapping attribute) as the user display name. When set to "true", full name (fullNameMapping attribute) is used as the user display name.
#### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/site-oidc-configuration" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-update-oidc-config.xml` **Content of create-update-oidc-config.xml:** Copy ```    ``` #### Response Code 200 #### Response Body Copy ```   "    authorizationEndpoint="https://myidp.com/oauth2/v1/authorize"    tokenEndpoint="https://myidp.com/oauth2/v1/token"    userinfoEndpoint="https://myidp.com/oauth2/v1/userinfo"    jwksUri="https://myidp.com/oauth2/v1/keys"    endSessionEndpoint="https://myidp.com/oauth2/v1/logout"    customScope="openid, email, profile"    prompt="login,consent"    clientAuthentication="client_secret_basic"    essentialAcrValues="phr"    emailMapping="email"    firstNameMapping="given_name"    lastNameMapping="family_name"    fullNameMapping="name"    useFullName="false" /> ``` Copy ``` {"siteOIDCConfiguration": {    "idpConfigurationName":"Auth_External_OIDC",    "enabled":"true",     "testLoginUrl":"https://sso.online.tableau.com/public/testLogin?alias=080bca2d-578b-49cc-b40d-3781b36b30ee&authSetting=OIDC",    "allowEmbeddedAuthentication":"false",    "clientId":"0oa111usf1gpUkVUt0h1",     "clientSecret":"<omit>",    "authorizationEndpoint":"https://myidp.com/oauth2/v1/authorize",    "tokenEndpoint":"https://myidp.com/oauth2/v1/token",    "userinfoEndpoint":"https://myidp.com/oauth2/v1/userinfo",    "jwksUri":"https://myidp.com/oauth2/v1/keys",    "endSessionEndpoint":"https://myidp.com/oauth2/v1/logout",    "customScope":"openid, email, profile",    "prompt":"login,consent",    "clientAuthentication":"client_secret_basic",    "essentialAcrValues":"phr",    "emailMapping":"email",    "firstNameMapping":"given_name",    "lastNameMapping":"family_name",    "fullNameMapping":"name",    "useFullName":"false"    }} ``` **Notes:** - The response hides the client secret and replaces it with `<omit>`. - You can use the testloginURL attribute to validate the OIDC configuration. When you enter the URL in a browser, details about the configuration displays. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get OpenID Connect Configuration Get details about the Tableau Cloud site's OpenID Connect (OIDC) configuration. **Version:** Available in API 3.22 (Tableau Cloud February 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI GET /api/api-version/sites/site-luid/site-oidc-configuration?idpConfigurationId=idp-configuration-id **Note:** The resource, GET /api/api-version/sites/site-luid/site-oidc-configuration?idpConfigurationId=idpConfigurationId, was added in version 3.24. The original resource, PUT /api/api-version/sites/site-luid/site-oidc-configuration, continues to be a supported resource if your site is configured with only one OIDC authentication configuration. If you don’t specify an `idpConfigurationId` value starting in API 3.24, the initial OIDC configuration on the site is removed. If there is no initial OIDC configuration on the site, then no OIDC configuration is removed. #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
idp-configuration-idThe ID of the configuration. To get the idpConfigurationId value, use the List Authentication Configurations for Site method.
#### Request Body None #### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/site-oidc-configuration?idpConfigurationId=00000000-0000-0000-0000-0000000000" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body Copy ```   "    authorizationEndpoint="https://myidp.com/oauth2/v1/authorize"    tokenEndpoint="https://myidp.com/oauth2/v1/token"    userinfoEndpoint="https://myidp.com/oauth2/v1/userinfo"    jwksUri="https://myidp.com/oauth2/v1/keys"    idpConfigurationName="Initial OIDC"    endSessionEndpoint="https://myidp.com/oauth2/v1/logout"    customScope="openid, email, profile"    prompt="login,consent"    clientAuthentication="client_secret_basic"    essentialAcrValues="phr"    emailMapping="email"    firstNameMapping="given_name"    lastNameMapping="family_name"    fullNameMapping="name"    useFullName="false"    idpConfigurationId="00000000-0000-0000-0000-000000000000" /> ``` Copy ``` { "siteOIDCConfiguration": {    "enabled":"true",    "testLoginUrl":"https://sso.online.tableau.com/public/testLogin?alias=080bca2d-578b-49cc-b40d-3781b36b30ee&authSetting=OIDC",    "allowEmbeddedAuthentication":"false",    "clientId":"0oa111usf1gpUkVUt0h1",    "clientSecret":"<omit>",    "authorizationEndpoint":"https://myidp.com/oauth2/v1/authorize",    "tokenEndpoint":"https://myidp.com/oauth2/v1/token",    "userinfoEndpoint":"https://myidp.com/oauth2/v1/userinfo",    "jwksUri":"https://myidp.com/oauth2/v1/keys",    "idpConfigurationName":"Initial OIDC"    "endSessionEndpoint":"https://myidp.com/oauth2/v1/logout",    "customScope":"openid, email, profile",    "prompt":"login,consent",    "clientAuthentication":"client_secret_basic",    "essentialAcrValues":"phr",    "emailMapping":"email",    "firstNameMapping":"given_name",    "lastNameMapping":"family_name",    "fullNameMapping":"name",    "useFullName":"false",    "idpConfigurationId":"00000000-0000-0000-0000-000000000000"    }} ``` **Notes:** - The response hides the client secret and replaces it with `<omit>`. - You can use the `testloginURL` to validate the OIDC configuration. When you enter the URL in a browser, details about the configuration displays. - You can use the `idpConfigurationId` to assign the authentication method to a user using the [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove OpenID Connect Configuration Disable and clear the Tableau Cloud site's OpenID Connect (OIDC) configuration. **Important:** Before removing the OIDC configuration, make sure that users who are set to authenticate with OIDC are set to use a different authentication type. Users who are not set with a different authentication type before removing the OIDC configuration will not be able to sign in to Tableau Cloud. **Version:** Available in API 3.22 (Tableau Cloud February 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI PUT /api/api-version/sites/site-luid/disable-site-oidc-configuration?idpConfigurationId=idp-configuration-id **Note:** The resource, PUT /api/api-version/sites/site-luid/disable-site-oidc-configuration?idpConfigurationId=idpConfigurationId, was added in version 3.24. The original resource, PUT /api/api-version/sites/site-luid/disable-site-oidc-configuration, continues to be a supported resource if your site is configured with only one OIDC authentication configuration. If you don’t specify an `idpConfigurationId` value starting in API 3.24, the initial (default) OIDC configuration on the site is removed. If there is no initial OIDC configuration on the site, then no OIDC configuration is removed. #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
idp-configuration-idThe ID of the configuration. To get the idpConfigurationId value, use the List Authentication Configurations for Site method.
#### Request Body None #### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/disable-site-oidc-configuration?idpConfigurationId=b2207590-024c-4a6e-ac4a-eca6eefabb2e" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update OpenID Connect Configuration Update the Tableau Cloud site's OpenID Connect (OIDC) configuration. **Version:** Available in API 3.22 (Tableau Cloud February 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI PUT /api/api-version/sites/site-luid/site-oidc-configuration #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body Copy ```    ``` Copy ``` {  "siteOIDCConfiguration": {    "idpConfigurationId": "idpConfigurationId",    "enabled": "enabled",    "clientId": "clientId",    "clientSecret": "clientSecret",    "authorizationEndpoint": "authorizationEndpoint",    "tokenEndpoint": "tokenEndpoint",    "userinfoEndpoint": "userinfoEndpoint",    "jwksUri": "jwksUri",    "idpConfigurationName": "idPConfigurationName",    "endSessionEndpoint": "endSessionEndpoint",    "allowEmbeddedAuthentication": "allowEmbeddedAuthentication",    "prompt":"prompt",    "customScope":"customScope",    "clientAuthentication": "clientAuthentication",    "essentialAcrValues": "essentialAcrValues",    "voluntaryAcrValues": "voluntaryAcrValues",    "emailMapping": "emailMapping",    "firstNameMapping": "firstNameMapping",    "lastNameMapping": "lastNameMapping",    "fullNameMapping": "fullNameMapping",    "useFullName": "useFullName"    }} ``` #### Request Attributes **Note:** Because partial updates are not supported therefore, you must include all the needed attributes in your request to ensure the configuration update is completed successfully.
idpConfigurationId (Required) Starting in API 3.24, multiple authentication configurations can be created and enabled at the same time. Include the idpConfigurationId to identify which configuration to update. If no IdPConfigurationId is specified, the initial (default) OIDC configuration is updated if it exists.

To get the idpConfigurationId value, use the List Authentication Configurations for Site method.

For more information, see Authentication in the Tableau Cloud Help.

enabled (Required) Controls whether the configuration is enabled or not. Value can be "true" or "false". For example "true".
clientId (Required) The client ID from your IdP. For example, "0oa111usf1gpUkVUt0h1".
clientSecret (Required) The client secret from your IdP.
authorizationEndpoint (Required) Use the authorization endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the user information endpoint (authorization_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/authorize".
tokenEndpoint (Required) Use the token endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the token endpoint (token_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/token".
userinfoEndpoint (Required) Use the user information endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the user information endpoint (userinfo_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/userinfo".
jwksUri (Required) Use the JWK set URI from your IdP. To find the value, enter the configuration URL in a browser and obtain the JWK set URI endpoint (jwks_uri) from the details that are returned. For example, "https://myidp.com/oauth2/v1/keys".
idpConfigurationName

(Optional) The name of the configuration.

Starting in API 3.24, you can create and enable multiple authentication configurations. Authentication configurations that were enabled before API 3.24 are given a name and its name can't be updated. For example, "Initial OIDC". If this configuration was created after API 3.23 and no name is provided for the update, the name will stay the same. For more information, see Authentication in the Tableau Cloud Help.

endSessionEndpoint (Optional) If single logout (SLO) is enabled for the site, which is done through Tableau Cloud site UI, you can specify the configuration URL or the end session endpoint from your IdP. For example, "https://myidp.com/oauth2/v1/logout".
allowEmbeddedAuthentication (Optional) Controls how users authenticate when accessing embedded views. Value can be "true" or "false". Default value is "false", which authenticates users in a separate pop-up window. When set to "true", users authenticate using an inline frame (IFrame), which is less secure.
customScope (Optional) Specifies a custom scope user-related value that you can use to query the IdP. For example, "openid, email, profile".
prompt (Optional) Specifies whether the user is prompted for re-authentication and consent. For example, "login, consent".
clientAuthentication (Optional) Token endpoint authentication method. Value can be "client_secret_basic" or "client_secret_post". Default value is "client_secret_basic".
essentialAcrValues (Optional) List of essential Authentication Context Reference Class values used for authentication. For example, "phr".
voluntaryAcrValues (Optional) List of voluntary Authentication Context Reference Class values used for authentication.
emailMapping (Optional) Claim for retrieving email from the OIDC token. Default value is "email".
firstNameMapping (Optional) Claim for retrieving first name from the OIDC token. Default value is "given_name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "false".
lastNameMapping (Optional) Claim for retrieving last name from the OIDC token. Default value is "family_name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "false".
fullNameMapping (Optional) Claim for retrieving name from the OIDC token. Default value is "name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "true".
useFullName (Optional) Controls what is used as the display name. Value can be "true" or "false". Default value is "false", which uses first name (firstNameMapping attribute) and last name (lastNameMapping attribute) as the user display name. When set to "true", full name (fullNameMapping attribute) is used as the user display name.
#### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/site-oidc-configuratioin" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-update-oidc-config.xml` **Content of create-update-oidc-config.xml:** Copy ```     "    authorizationEndpoint="https://myidp.com/oauth2/v1/authorize"    tokenEndpoint="https://myidp.com/oauth2/v1/token"    userinfoEndpoint="https://myidp.com/oauth2/v1/userinfo"    jwksUri="https://myidp.com/oauth2/v1/keys"    idPConfigurationName="Initial OIDC"    endSessionEndpoint="https://myidp.com/oauth2/v1/logout"    customScope="openid, email, profile"    prompt="login,consent"    clientAuthentication="client_secret_basic"    essentialAcrValues="phr"    emailMapping="email"    firstNameMapping="given_name"    lastNameMapping="family_name"    fullNameMapping="name"    useFullName="false" />
``` Copy ``` {  "siteOIDCConfiguration": {    "idpConfigurationId":"00000000-0000-0000-0000-000000000000",    "enabled":"true",    "testLoginUrl="https://sso.online.tableau.com/public/testLogin?alias=080bca2d-578b-49cc-b40d-3781b36b30ee&authSetting=OIDC",    "allowEmbeddedAuthentication":"false",    "clientId":"0oa111usf1gpUkVUt0h1",    "clientSecret":"<omit>",    "authorizationEndpoint":"https://myidp.com/oauth2/v1/authorize",    "tokenEndpoint":"https://myidp.com/oauth2/v1/token",    "userinfoEndpoint":"https://myidp.com/oauth2/v1/userinfo",    "jwksUri":"https://myidp.com/oauth2/v1/keys",    "idPConfigurationName":"Initial OIDC",    "endSessionEndpoint":"https://myidp.com/oauth2/v1/logout",    "customScope":"openid, email, profile",    "prompt":"login,consent",    "clientAuthentication":"client_secret_basic",    "essentialAcrValues":"phr",    "emailMapping":"email",    "firstNameMapping":"given_name",    "lastNameMapping":"family_name",    "fullNameMapping":"name",    "useFullName":"false"     }} ``` **Notes:** - The response hides the client secret and replaces it with `<omit>`. - You can use the testloginURL to validate the OIDC configuration. When you enter the URL in a browser, details about the configuration displays. - You can use the idpConfigurationId to assign authentication to a user using the [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Paginating Results REST API methods that might return a large number of individual elements support pagination. Some examples of these methods include [Query Datasources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_datasources) and [Get Users in Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_in_site). When you call these methods, the response includes a element that has pageNumber, pageSize, and totalAvailable attributes whose values you can use to implement paging. The following example shows what the response body might look like for a **Get Users in Site** request where there are a total of 158 users in the site: ``` ... Another 90 elements here ... ``` If a method supports pagination, you can pass two parameters as part of the request: the page size (that is, the number of elements to return per call) and the page number. The default page size for an individual call is 100, but you can specify a page size that’s any positive integer. The page number is a 1-based (not zero-based) value. The default page number is 1, meaning that if you do not include a page number, Tableau Server returns the first page of elements. You pass page number and page size parameters using the query string on the URI, as in this example: ``` http://myserver/api/3.29/sites/site-id/users?pageSize=20&pageNumber=2 ``` The page number is multiplied by the current page size to determine which elements to return. For example, if the page size is 20 and the page number is 2, the call returns items 21 through 40 of all available elements. To use pagination, you typically perform a series of requests in a loop. Each iteration of the loop gets another page of elements until you have received all available elements. ## How Elements are Ordered To maintain consistency, if no explicit sort order is specified (see [Filtering and Sorting in the Tableau REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm)) the elements returned are indexed and sorted internally. For example, if a method returns 158 elements, those items will be sorted and listed in the same order in subsequent method calls. The sorting is done on an internal index, and not on the locally unique identifier (LUID) for the resource (for example, not on the user `id`). Note that the REST methods are not synchronized, so if another method removes an item from the list, between paging calls, it is possible that some items might be missed if they fall on a page boundary. The effect is temporary, as no data is lost, and further requests sort and index the elements correctly. ## Python Example for Paging The following example in Python shows how to use paging to get a list of users on the site. Note the following about this example: - The example is not complete. It assumes that you previously called the **Sign In** method and got back an authentication token that you've stored the token in the variable named `token`. It also assumes that you got back the site ID and have stored it in the variable named `site_id`. For more information, see [Signing In and Signing Out (Authentication)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm). - The code makes HTTP requests using the **Request** library that's built into Python. - The code parses the XML block in the response body using the **xml.etree.ElementTree** method that's built into Python. For details, see the [ElementTree XML API](https://docs.python.org/2/library/xml.etree.elementtree.html) documentation on the Python website. ``` try: # Python 3 from urllib.request import urlopen, request except: # Python 2 from urllib2 import urlopen, Request import xml.etree.ElementTree as ET # For parsing XML responses # ... Code here to sign in ... # Note: A Sign In request has already been made and the authentication token is # in the variable named "token" headers = {'X-tableau-auth': token} page_size = 50 page_number = 1 # 1-based, not zero based total_returned = 0 done = False user_name_list = [] while not(done): request_url = 'http://{server}/api/3.29/sites/{site_id}/users'.format( server=server, site_id=site_id) paging_parameters = '?pageSize={page_size}&pageNumber={page_number}'.format( page_size=page_size, page_number=page_number) full_url = request_url + paging_parameters print(full_url) # Make request req = Request(full_url, headers=headers) req = urlopen(req) server_response = req.read().decode("utf8") response_xml = ET.fromstring(server_response) # Get total number of records from the element total_available = response_xml.find('.//t:pagination', namespaces={'t': "http://tableau.com/api"}).attrib['totalAvailable'] # Note! Need to convert "total_available" to integer total_available = int(total_available) page_number += 1 total_returned += page_size # Get user details from element user_element = response_xml.findall('.//t:user', namespaces={'t': "http://tableau.com/api"}) # Display individual user names for user in user_element: print (user.attrib['name']) if(total_returned >= total_available): done = True # ... Code here to sign out ... ``` [Skip to main content](#main-content) # Permissions Methods Using the permissions methods of the Tableau REST API you can: - List, add, and delete granular default permissions that apply to new content created in a project - List, add, and delete granular permissions for existing projects, workbooks, views, flows, metrics, Ask data lenses, and data sources This functionality relates to the UI elements and concepts described at: [Permissions Reference](https://help.tableau.com/current/server/en-us/permissions.htm). ## 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: Permissions](https://www.postman.com/salesforce-developers/salesforce-developers/folder/qs14seb/permissions) ## Add Ask Data Lens Permissions - Retired in API 3.22 > > [!WARNING] > > > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau AI and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-ai). Adds permissions to the specified ask data lens for a user or group. You can specify multiple sets of permissions using one request. If a specified permission has already been granted or denied for a given user or group, the system ignores it. #### URI PUT /api/api-version/sites/site-luid/lenses/lens-luid/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
lens-luidThe LUID of the data source to set permissions for.
#### Request Body ` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ` #### Attribute Values
lens-luid Required. The LUID of the ask data lens permissions are being configured for.
user-luid Optional (at least one user or group must be specified). The LUID of the user to add permissions for.
group-luid Optional. The LUID of the group to add permissions for.
capability-name The capability to assign. For valid capabilities for a data source project are ChangePermissions, Delete, Move, Read, Write.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users with server or site administrator permissions, and non-administrators that have ChangePermissions permission for the lens (either explicitly or implicitly), can add ask data lens permissions. #### Response Code 200 #### Response Body ``` ``` #### Version Introduced Tableau Cloud June 2022 (API 3.16). Not currently available for Tableau Server. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe specified capability is invalid for a data source. Valid capabilities for a data source are ChangePermissions, Delete, Move, Read, and Write.
403403004No permissions to set permissions.A user attempted to add permissions to a data source, but the caller doesn't have permission to set permissions on the data source.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404006Lens not foundThe specified lens doesn't correspond to an existing data source.
404404012Group not foundThe group specified in the request body doesn't correspond to an existing group.
404404013Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Collection Permissions Adds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call. If a specified permission has already been granted or denied for a given user or group, the system ignores it. #### URI PUT /api/api-version/sites/site-id/collections/collection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the collection.
collection-idThe ID of the collection to set permissions for.
#### Request Body ``` ``` #### Attribute Values
user-id The ID of the user to add permissions for.
group-id The ID of the group to add permissions for.
capability-name

The capability to assign. The only valid capability for a collection is Read.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it.
#### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
403 403004 No permissions to set permissions. A user attempted to add permissions to a collection, but the caller doesn't have permission to set permissions on the collection.
404 404000 Resource not found The site ID in the URI wasn't found.
404 404002 User not found The user in the request body wasn't found.
404 404012 Group not found The group in the request body wasn't found.
404 404013 Resource not found

The capability to remove the permission for. The only valid capability name for a collection is Read. The only valid capability mode is Allow or Deny.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Data Source Permissions Adds permissions to the specified data source for a user or group. You can specify multiple sets of permissions using one call. If a specified permission has already been granted or denied for a given user or group, the system ignores it. If the request body includes a child workbook or element, the request is invalid. #### URI PUT /api/api-version/sites/site-id/datasources/datasource-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to set permissions for.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
datasource-id The <datasource> element is not required, but can be included for compatibility with earlier versions of the REST API. If the <datasource> element is included, the datasource-id value must match the data source ID in the URI. Any other attributes in the <datasource> element are ignored.
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name The capability to assign. For valid capabilities for a data source project are PulseMetricDefine, ChangePermissions, Connect, Delete, ExportXml, ExtractRefresh,Read (view), Write, and SaveAs.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users who are not server administrators or site administrators can add permissions only to a data source for which they have ChangePermissions permission (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe specified capability is invalid for a data source. Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, Read, and Write.
403403004No permissions to set permissions.A user attempted to add permissions to a data source, but the caller doesn't have permission to set permissions on the data source.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404004Data source not foundThe specified data source doesn't correspond to an existing data source.
404404012Group not foundThe group specified in the request body doesn't correspond to an existing group.
404404013Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Default Permissions Adds default permission rules for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, also adds default permission rules for database or table resources in a project for a user or group. After adding default permission rules, new resources of the type you specify that are added to the project will have those permission rules. If permissions are [locked to the project](https://help.tableau.com/current/server/en-us/permissions.htm#LockProject), then the same is true for all existing child content of the project. For more information, see [Permissions](https://help.tableau.com/current/server/en-us/permissions.htm). Content owners can override default permissions for their content, but only if project permissions have not been locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/permissions.htm#LockProject). #### URI Workbooks: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks Data sources: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources Data roles: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles Lenses: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/lenses Metrics: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/metrics Flows: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows Virtual Connections _(endpoint introduced in [API version](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm#rest_and_tableau_version_table) 3.23)_: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/virtualconnections Databases: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases Tables: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the project.
project-luidThe LUID of the project to set default permissions for.
#### Request Body ``` < !-- ... additional capabilities ... --> < !-- ... additional capabilities ... --> < !-- ... additional grantee capability sets ... --> ``` #### Attribute Values
user-luid The LUID of the user to add default permissions for.
group-luid The LUID of the group to add permissions for.
capability-name

The capability to assign. Valid capabilities for a workbook are

  • AddComment
  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • ExportData
  • ExportImage
  • ExportXml
  • Filter
  • Read (view)
  • ShareView
  • ViewComments
  • ViewUnderlyingData
  • WebAuthoring
  • Write
  • RunExplainData
  • CreateRefreshMetrics

Valid capabilities for a data source are

  • ChangePermissions
  • Connect
  • Delete
  • ExportXml
  • SaveAs
  • Read (view)
  • Write

Valid capabilities for a flow are

  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • ExportXml (download)
  • Execute
  • Read (view)
  • WebAuthoringForFlows
  • Write

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users who are not server administrators can add permissions defaults for a project only if they have the ProjectLeader permission for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` #### Version - Version 2.1 and later. - Version 3.23 and later for the virtual connection default permissions methods. - For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400009 Invalid capability The capability in the URI is invalid for a data source.

Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, CreateRefreshMetrics, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, Read (view), and Write.

400 400042 Malformed permissions qualifier The request body includes a <workbook> or <datasource> element.
403 403004 Permissions setting forbidden A non-administrator user called this method but doesn't have permission to add permissions on the project.
404 404000 Site not found The site LUID in the URI doesn't correspond to an existing site.
404 404002 User not found A user LUID in the request body as the grantee doesn't correspond to an existing user.
404 404005 Project not found The project LUID in the URI doesn't correspond to an existing project.
404 404009 Project ID mismatch A project LUID specified in the URI does not match the project ID specified in the request body. (You do not have to specify a project ID in the request body.)
404 404012 Group not found A group LUID in the request body doesn't correspond to an existing group.
404 404013 Capability not found The capability in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Project Permissions Adds permissions to the specified project for a user or group. You can specify multiple sets of permissions using one call. If the request body includes a child datasource or element, the request is invalid. #### URI PUT /api/api-version/sites/site-id/projects/project-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
project-idThe ID of the project to set permissions for.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name The capability to assign permissions to. In Tableau Server 10.0, the valid capabilities for a project are ProjectLeader, Read (view), and Write.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users who are not server administrators or site administrators can add permissions for a project only if they have ChangePermissions (version `2.0`) or ProjectLeader (version `2.1`) permission for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400009 Invalid capability

The capability specified in the request is not in the list of valid capability names for this method.

The mode of the capability for ProjectLeader cannot be set to Deny.

403 403004 Permissions setting forbidden A non-administrator user called this method but doesn't have permission to add permissions on the project.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found A user ID in the request body as the grantee doesn't correspond to an existing user.
404 404005 Project not found The project ID in the URI doesn't correspond to an existing project.
404 404009 Project ID mismatch A project ID specified in the URI does not match the project ID specified in the request body. (You do not have to specify a project ID in the request body.)
404 404012 Group not found A group ID in the request body doesn't correspond to an existing group.
404 404013 Capability not found The capability in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add View Permissions Adds permissions to the specified view (also known as a sheet) for a user or group. You can specify multiple sets of permissions using one call. #### URI PUT /api/_api-version_/sites/_site-id_/views/_view-id_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook view.
view-idThe ID of the view to set permissions for. You can obtain this ID by calling Query Views for Site.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
view-id The view-id value must match the view ID in the URI.
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name The capability to assign. If any capability has already been granted or denied for a specified user or group, that capability is ignored. For valid capabilities for a view are AddComment, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions This method can only be called by server and site administrators, and user who have permission to set permissions on the workbook (either explicitly or implicitly). To use this method, the parent workbook that contains the specified view must have its **showTabs** attribute set to **Hide**. You can configure this setting by using the [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook) method. #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` 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/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe capability in the URI is invalid for a view.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the view.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or an invalid capability value (other than Allow or Deny).
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/views/e5a4b73e-5cbb-412d-907e-f31cc31684f7" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-view-permissions.xml` **Example of add-view-permissions.xml:** ``` ``` **Example response:** ``` ``` ## Add Virtual Connection Permissions Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call. If a specified permission has already been granted or denied for a given user or group, the system ignores it. #### URI PUT /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the virtual connection.
virtualconnection-idThe ID of the virtual connection to set permissions for.
#### Request Body ``` ``` #### Attribute Values
user-id The LUID of the user to add permissions for. A request does not need to include both a user and a group grantee.
group-id The LUID of the group to add permissions for. A request does not need to include both a user and a group grantee.
capability-name

The capability to assign. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it.
#### Permissions You must be an administrator or have the ChangePermissions permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe specified capability is invalid for a virtual connection. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.
403403004Permissions setting forbiddenThe user tried to change permissions for a virtual connection but doesn't have the permission to change them.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404012Group not foundThe group specified in the request body doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
404404014Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not PUT.
400409004Invalid LUIDThe virtual connection LUID in the URI was not found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data ' '` ## Add Workbook Permissions Adds permissions to the specified workbook for a user or group. You can specify multiple sets of permissions using one call. #### URI PUT /api/api-version/sites/site-id/workbooks/workbook-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to set permissions for.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
workbook-id The <workbook> element is not required, but can be included for compatibility with earlier versions of the REST API. If the <workbook> element is included, the workbook-id value must match the workbook ID in the URI. Any other attributes in the <workbook> element are ignored.
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name

The capability to assign. If any capability has already been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, CreateRefreshMetrics, Delete, ExportData, ExportImage, ExportXml, ExtractRefresh, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users who are not server administrators or site administrators can call this method only if the have permission to set permissions on the workbook (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, CreateRefreshMetrics, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundA user ID in the request body doesn't correspond to an existing user.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Workbook to Server Schedule Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server. The task type must match the schedule type. For a list of schedule types, see [Create a Schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_schedule). _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task)._ **Note:** This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI PUT /api/api-version/sites/site-id/schedules/schedule-id/workbooks #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
schedule-idThe ID of the schedule that you are associating with the workbook.
#### Request Body ``` ``` #### Attribute Values
workbook-idThe ID of the workbook to add to the schedule.
#### Permissions Only Tableau Server users who are server administrators or site administrators can add a workbook to a data acceleration schedule. Tableau Server users who are not server administrators or site administrators can only add a workbook to other types of schedules if they own the workbook, or are the project leader for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 ``` ``` #### Version Starting in Tableau Server 10.5 (API 2.8) you can add a task to refresh a workbook extract. In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15), you can add a task to add data acceleration to a workbook. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user called this method, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404006Resource not foundThe workbook ID in the request body is unknown.
405405000Invalid request methodRequest type was not PUT.
500500000Internal Server ErrorThe schedule ID in the URI is unknown.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/ 1edc53ac-e247-4870-9fd3-6fad0ce5f84d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/workbooks" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @add-to-schedule.xml"` **Content of add-to-schedule.xml:** ``` ``` **Example response:** ``` ``` ## Delete Ask Data Lens Permission - Retired in API 3.22 > > [!WARNING] > > > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau AI and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-ai). Deletes the specified permissions to the specified ask data lens for a user or group. #### URI DELETE /api/api-version/sites/site-luid/lenses/lens-luid/permissions/groups/group-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/lenses/lens-luid/permissions/users/user-luid/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid Required. The LUID of the site that contains the view.
lens-luid Required. The LUID of the lens to delete permissions for.
group-luid Optional (one user or group must be specified). The LUID of the group to remove the permission for.
user-luid Optional. The LUID of the user to remove the permission for.
capability-name

The capability to remove the permission for.

The valid capabilities for a view are ChangePermissions, Delete, Move, Read, Write.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions Users with server or site administrator permissions, and non-administrators that have Delete or ChangePermissions permission (either explicitly or implicitly) for the lens, can delete ask data lens permissions. #### Response Code 204 #### Response Body None #### Version Introduced Tableau Cloud June 2022 (API 3.16). Not currently available for Tableau Server. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for an ask data lense. Valid capabilities for a lens are ChangePermissions, Delete, Move, Read, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to delete permissions on the view.
403403039Project permissions lockedThe parent project that contains the specified ask data lens has its permissions locked.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn’t correspond to an existing user.
404404046Lens not foundThe ask data lens LUID in the URI doesn't correspond to an existing view.
404404012Group not foundA group LUID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or an invalid capability value (other than Allow or Deny).
404404014Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Collection Permission Removes the specified collection permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/collections/collection-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/collections/collection-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the collection.
collection-id The ID of the collection to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for. The only valid capability for a collection is Read. The only valid capability mode is Allow or Deny.

For more information, see Permissions.

capability-mode Allow to delete an allow permission, or Deny to delete a deny permission. This value is case sensitive.
#### Request Body None #### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a collection. The only valid capability for a collection is Read.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the collection.
404404000Resource not foundThe site ID in the URI wasn't found.
404404002Resource not foundThe user ID in the URI wasn't found.
404404012Resource not foundThe group ID in the URI wasn't found.
404404013Resource not foundThe capability in the URI isn't recognized.
404404014Resource not foundThe user or group permission wasn't found on the collection. Check the permissions on the collection that you're trying to remove and try again.
404404038Resource not foundThe collection ID in the URI wasn't found.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Data Source Permission Removes the specified data source permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/datasources/datasource-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the data source.
datasource-id The ID of the data source to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for. Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, ExtractRefresh, Read (view), Write, and SaveAs.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can call this method only if they have permission to delete permissions from the data source (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a data source. Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, Read, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the data source.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Default Permission Removes default permission rules for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, also removes default permission rules for database or table resources in a project for a user or group. After removing default permission rules, new resources of the type you specify that are added to the project will no longer have those permission rules. If permissions are [locked to the project](https://help.tableau.com/current/server/en-us/permissions.htm#LockProject), then the same is true for all existing child content of the project. #### URI Workbooks: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks/groups/group-luid/capability-name/capability-mode Data sources: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources/groups/group-luid/capability-name/capability-mode Data roles: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles/groups/group-luid/capability-name/capability-mode Lenses: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/lenses/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/lenses/groups/group-luid/capability-name/capability-mode Metrics: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/metrics/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/metrics/groups/group-luid/capability-name/capability-mode Flows: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows/groups/group-luid/capability-name/capability-mode Virtual Connections _(endpoints introduced in [API version](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm#rest_and_tableau_version_table) 3.23)_: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/virtualconnections/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/virtualconnections/groups/group-luid/capability-name/capability-mode Databases: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases/groups/group-luid/capability-name/capability-mode Tables: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables/groups/group-luid/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The LUID of the site that contains the project.
project-id The LUID of the project to remove the default permission for.
group-id The LUID of the group to remove the default permission for.
user-id The LUID of the user to remove default permission for.
capability-name

The capability to remove the permissions for.

Valid capabilities for a workbook are

  • AddComment
  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • ExportData
  • ExportImage
  • ExportXml
  • Filter
  • Read (view)
  • ShareView
  • ViewComments
  • ViewUnderlyingData
  • WebAuthoring
  • Write
  • RunExplainData
  • CreateRefreshMetrics

Valid capabilities for a data source are

  • ChangePermissions
  • Connect
  • Delete
  • ExportXml
  • SaveAs
  • Read (view)
  • Write

Valid capabilities for a flow are

  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • ExportXml (download)
  • Execute
  • Read (view)
  • WebAuthoringForFlows
  • Write

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Users who are not server administrators can remove permissions for a project only if they have ProjectLeader permissions for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version - Version 2.1 and later. - Version 3.23 and later for the virtual connection default permissions methods. - For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permissions to remove permissions for the project.
403403095Delete permissions for flows forbiddenA non-administrator user called this method but doesn't have permissions to remove permissions for the project where the flow is located.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404002User not foundA user LUID in the URI doesn't correspond to an existing user.
404404005Project not foundThe project LUID in the URI doesn't correspond to an existing project.
404404012Group not foundA group LUID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI isn't assigned to the specified user or group.
404404013Capability not foundThe capability in the URI doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
404404027Flow not foundThe flow LUID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Project Permission Removes the specified project permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/projects/project-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/projects/project-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the project.
project-id The ID of the project to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove project the permission for.
capability-name The capability to remove the permission for. In Tableau Server 10.0, valid capabilities for a project are ProjectLeader, Read (view), and Write.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can remove permissions for a project only if they have ChangePermissions (version `2.0`) or ProjectLeader (version `2.1`) permissions for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a project. For a list of valid capabilities, see the capability-name attribute earlier.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permissions to remove default permissions for the project.
403403004Delete forbiddenA non-administrative user tried to update the project, but does not have permissions to the project.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundA user ID in the URI doesn't correspond to an existing user.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
404404012Group not foundA group ID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI isn't assigned to the specified user or group.
404404013Capability not foundThe capability in the URI doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete View Permission Deletes permission to the specified view (also known as a sheet) for a Tableau Server user or group. #### URI DELETE /api/api-version/sites/site-id/views/view-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/views/view-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the view.
view-id The ID of the view to delete permissions for. You can obtain this ID by calling Query Views for Site.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for.

The valid capabilities for a view are AddComment, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can delete permissions from a view only if they have ChangePermissions permissions on the view (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 3.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a view.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to delete permissions on the view.
403403039Project permissions lockedThe parent project that contains the specified view has its permissions locked.
403403096Parent workbook tabs enabledThe specified view currently has permissions inherited from its parent workbook. View permission can be deleted if the parent workbook has its tabs disabled.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn’t correspond to an existing user.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or an invalid capability value (other than Allow or Deny).
404404014Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/fbfa6f03-982c-4930-8ec1-d5949a19125d/views/0524c7ce-250b-45b1-adf2-d08f1648643c/permissions/users/ff43cb47-f208-4d2f-9a22-0fbb6d29f7f1/AddComment/Allow" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Delete Virtual Connection Permission Removes the specified virtual connection permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the virtual connection.
virtualconnection-id The ID of the virtual connection to remove the permission for.
group-id The LUID of the group to remove the permission for. A request does not need to include both a user and a group grantee.
user-id The LUID of the user to remove the permission for. A request does not need to include both a user and a group grantee.
capability-name

The capability to remove the permission for. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions You must be an administrator or have the Delete permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe specified capability is invalid for a virtual connection. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.
403403004Permissions setting forbiddenThe user tried to change permissions for a virtual connection but doesn't have the permission to change them.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
404404014Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not DELETE.
400409004Invalid LUIDThe virtual connection LUID in the URI was not found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request DELETE 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/read/allow' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` ## Delete Workbook Permission Deletes the specified permission from the specified workbook for a group or user. #### URI DELETE /api/api-version/sites/site-id/workbooks/workbook-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/workbooks/workbook-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the workbook.
workbook-id The ID of the workbook to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, ExtractRefresh, Filter, Read (view), ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, Write, RunExplainData, and CreateRefreshMetrics.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can delete permissions from a workbook only if they have ChangePermissions permission for workbook (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read, Share_view, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to delete permissions from the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not foundThe capability in the URI doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny at the end of the URI.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Ask Data Lens Permissions > > [!WARNING] > > > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau AI and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-ai). List all permissions configured for the specified ask data lens that the user has read capability for. #### URI GET /api/api-version/sites/site-luid/lens/lens-Luid/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the metrics.
lens-luidThe LUID of the ask data lens whose permissions are being listed.
#### Request Body None #### Permissions Users with server or site administrator permissions, and non-administrators that have **Read** permission (either explicitly or implicitly), can list permissions for an ask data lens. lu #### Response Code 200 #### Response Body ``` <-- ... additional capabilities ... --> <-- ... additional capabilities ... --> <-- ... additional grantee capability sets ... --> ``` **Note:** The parent element is included in the response only if the lens' permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call Create Project or for an existing project by calling Update Project. For more information, see Lock Content Permissions to the Project. #### Version Introduced Tableau Cloud June 2022 (API 3.16). Not currently available for Tableau Server. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403018Read forbiddenA non-administrator user attempted to query metrics for the site, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404046Lens not foundA lens with the requested LUID could be found.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Collection Permissions Returns a list of permissions for a specific collection. #### URI GET /api/api-version/sites/site-id/collections/collection-luid/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the collection.
collection-idThe ID of the collection to get permissions for.
#### Request Body None #### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404038Resource not foundThe collection ID in the URI wasn't found.
404404000Resource not foundThe site ID in the URI wasn't found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Data Source Permissions Returns a list of permissions for a specific data source. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to get permissions for.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can view a data source only if they have Read (view) permission for the data source (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List Default Permissions Returns details of default permission rules granted to users and groups for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, this method can also return details of default permission rules granted to users and groups for database or table resources in a project. #### URI Workbooks: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks Data sources: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources Data roles: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles Lenses: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/lenses Metrics: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/metrics Flows: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows Virtual Connections _(endpoint introduced in [API version](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm#rest_and_tableau_version_table) 3.23)_: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/virtualconnections Databases: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases Tables: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the project.
project-luidThe LUID of the project to get default permissions for.
#### Request Body None #### Permissions Users who are not server administrators can query default permissions for a project only if they have the ProjectLeader permission for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. **Note:** The following scope applies to data sources, workbooks, and metrics only. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` <... additional capabilities ...> <... additional grantee capabilities ...> ``` #### Version - Version 2.1 and later. - Version 3.23 and later for the virtual connection default permissions methods. - For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403035Querying data source permissions forbiddenThe caller doesn't have permissions to query the project's default permissions for data sources.
403403036Querying workbook permissions forbiddenThe caller doesn't have permissions to query the project's default permissions for workbooks.
403403035Querying flow permissions forbiddenThe caller doesn't have permissions to query the project's default permissions for flows.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404005Project not foundThe project LUID in the URI doesn't correspond to an existing project.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Project Permissions Returns information about the set of permissions allowed or denied for groups and users in a project. #### URI GET /api/api-version/sites/site-id/projects/project-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
project-idThe project to get permissions for.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capabilities ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/projects/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List View Permissions Returns a list of permissions for the specific view. #### URI GET /api/api-version/sites/site-id/views/view-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
view-idThe ID of the view to get permissions for.
#### Request Body None #### Permissions This method can only be called by server and site administrators, and users who have Read (view) permission for the specific view. #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional capabilities ... ``` **Note**: The parent element is included in the response only if the view's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 3.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the view.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/views/0524c7ce-250b-45b1-adf2-d08f1648643c/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List Virtual Connection Permissions Returns a list of permissions for a specific virtual connection. #### URI GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the virtual connection.
virtualconnection-idThe ID of the virtual connection to get permissions for.
#### Request Body None #### Permissions You must be an administrator or have the Read (View) permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Virtual Connection not foundThe virtual connection ID in the URI doesn't correspond to an existing virtual connection.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` ## List Workbook Permissions Returns a list of permissions for the specific workbook. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to get permissions for.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ... additional capabilities for users ... ... additional capabilities for groups ... ... additional grantee capability sets ... ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Replace Project's Default Permissions Replaces default permissions in the specified content. If Tableau Catalog is enabled, it also adds default permission rules for database or table resources in a project. After adding default permission rules, new resources of the type you specify that are added to the project will have those permission rules. If permissions are [locked to the project](https://help.tableau.com/current/server/en-us/permissions.htm#LockProject), then the same is true for all existing child content of the project. For more information, see [Permissions](https://help.tableau.com/current/server/en-us/permissions.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) 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:** Users who are not server administrators, project owners, or project leaders can replace permissions defaults for a project only if they have effective **ChangePermissions** permission.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:permissions: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). #### URI POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid

The LUID for the site.

project-luid

The LUID for the project.

#### Request Body Copy ```                                                                                              ``` Copy ``` {  "permissions": [    {      "user": {        "id": "user-luid"      },      "capabilities": [        {          "name": "capability-name",          "mode": "capability-mode"        }      ]    },    {      "group": {        "id": "group-luid"      },      "capabilities": [        {          "name": "capability-name",          "mode": "capability-mode"        }      ]    }  ]} ``` #### Request Attributes
user-luid The LUID of the user to add default permissions for.
group-luid The LUID of the group to add permissions for.
capability-name

The capability to assign. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, SaveAs, Read (view), and Write.

For more information, see Permissions.

#### cURL Request Example `curl --location "http://MY-SERVER/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/default-permissions/dataroles" --header "Content-Type: application/xml" --data @replace-default-permissions-workbook.xml` #### Response Code 200 #### Response Body None #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400009 Invalid capability The capability in the URI is invalid for a data source.

Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, Read (view), and Write.

For detailed information about capabilities for each content type, see Capabilities.

400 400042 Malformed permissions qualifier The request body includes a <workbook> or <datasource> element.
403 403004 Permissions setting forbidden A non-administrator user called this method but doesn't have permission to add permissions on the project.
404 404000 Site not found The site LUID in the URI doesn't correspond to an existing site.
404 404002 User not found A user LUID in the request body as the grantee doesn't correspond to an existing user.
404 404005 Project not found The project LUID in the URI doesn't correspond to an existing project.
404 404009 Project ID mismatch A project LUID specified in the URI doesn’t match the project ID specified in the request body. (You don’t have to specify a project ID in the request body.)
404 404012 Group not found A group LUID in the request body doesn't correspond to an existing group.
404 404013 Capability not found The capability in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405 405000 Invalid request method The request type wasn’t POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Replace Content Permissions Replaces existing permissions in the specified content. You can specify multiple sets of permissions using one call. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) 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:** Users who are not server administrators or site administrators can add permissions only to content for which they have **ChangePermissions** permission.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:permissions: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). #### URI POST /api/api-version/sites/site-luid/datasources/datasource-luid/permissions POST /api/api-version/sites/site-luid/flows/flow-luid/permissions POST /api/api-version/sites/site-luid/projects/project-luid/permissions POST /api/api-version/sites/site-luid/views/view-luid/permissions POST /api/api-version/sites/site-luid/workbooks/workbook-luid/permissions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
datasourc-luidThe LUID for the data source.
flow-luidThe LUID for the flow.
project-luidThe LUID for the project.
view-luidThe LUID for the view.
workbook-luidThe LUID for the workbook.
(Optional, but can be included for compatibility with older versions.)
#### Request Body Copy ```                                                                                              ``` Copy ``` {  "permissions": {    "granteeCapabilities": [      {        "user": {          "@id": "user-luid"        },        "capabilities": {          "capability": {            "@name": "capability-name",            "@mode": "capability-mode"          },          "#text": "... additional capabilities ..."        }      },      {        "group": {          "@id": "group-luid"        },        "capabilities": {          "capability": {            "@name": "capability-name",            "@mode": "capability-mode"          },          "#text": "... additional capabilities ..."        }      }    ],    "#text": "... additional grantee capability sets ..."  }} ``` #### Request Attributes
workbook-idThe <workbook> element is not required, but can be included for compatibility with earlier versions of the REST API. If the <workbook> element is included, the workbook-id value must match the workbook ID in the URI. Any other attributes in the <workbook> element are ignored.
user-idThe ID (not name) of the user to add permissions for.
group-idThe ID (not name) of the group to add permissions for.
#### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/datasources/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @replace-view-permissions.xml` #### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, CreateRefreshMetrics, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundA user ID in the request body doesn't correspond to an existing user.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404011View not foundThe view ID in the ID doesn't correspond to an existing view.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodThe request type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Permissions Users who call REST API methods must have permission to perform the task represented by each method that they call. A user's set of permissions is determined by the user's identity—that is, by the credentials that the user passes when calling [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in). Many methods, such as adding or removing users from the server, require the user to be a server administrator. Other methods can be called by any user who has been granted appropriate permissions to perform the task that is represented by the method. The documentation for individual methods indicates the permissions that are required in order to call that method. **Note**: The documentation occasionally refers to _explicit_ and _implicit_ permissions. For example, the **Permissions** section for the Download Datasource method indicates that the users can call the method "only if they have ExportXml permission for the data source (either explicitly or implicitly)." Explicit permissions are those that have been assigned to the user. If you query a user's permissions, explicit permissions are listed in the display. In contrast, implicit permissions are those that the user has because the user is a server administrator, or the owner of an entity. Administrators do not have to be explicitly granted any permissions, and owners do not have to be granted permissions for content that they own (including projects under parent projects that they own). The term _implicit_ is used because if you query the user's permissions, the user's implicit permissions are not listed. ## Using the REST API to assign permissions You can use methods in the REST API to assign or edit permissions for projects, workbooks, and data sources. For example, you might call [Create Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_project) to create a new project and then call [Add Project Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_project_permissions) to assign appropriate permissions to the new project. When you add permissions to an entity like a project, you specify the following information: - The grantee, that is, the user, group, or group set that you are assigning the permission to. (A grantee is sometimes referred to as a _principal_.) Grantees are identified by ID (LUID), not name. - The capability that you're assigning permissions to. You specify the capability using a reserved name that's defined in the REST API XML schema, such as Read, Write, ExportData, or WebAuthoring. (These reserved names correspond to names that are used in the server environment, as listed later in this topic.) - The mode for the permission, which is either Allow or Deny. Individual entities (project, workbook, and data source) support different capabilities. For example, for a data source, you can assign permissions only for the ChangePermissions, Connect, Delete, ExportXml, Read, and Write capabilities. In contrast, for a workbook, you can assign permissions for the AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write capabilities. The documentation for an individual API (such as [Add Workbook Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_workbook_permissions) or [Add Project Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_project_permissions)) specifies the capabilities that you can pass for that API. The following example shows what the body of an Add Project Permissions request might look like. This example assigns the Allow permission to the Read and Write capabilities of the project for the user whose ID is `9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d`. ``` ``` ## Project default permissions and permissions locking Starting in Tableau Server 9.2 (REST API version 2.1), server administrators, site administrators, and project leaders can define default permissions for a project. These permissions are then assigned by default to content that's published to the server. You can use the following REST API methods to work with project default permissions: - [Add Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_default_permissions) - [Query Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_default_permissions) - [Delete Default Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_default_permission) Administrators and project leaders can also "lock" these default permissions. In that case, the project default permissions are assigned to content when it's published, and the permissions for that content cannot be changed, even by the content owner. To lock permissions to the project, you include the contentPermissions attribute in the [Create Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_project) or [Update Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_project) method and set the attribute's value to LockedToProject. (The default value for this attribute is ManagedByOwner.) **Note**: Starting in Tableau Server 9.2, you can set permissions for only these capabilities in a project: Read (view), Write (save), and ProjectLeader. (In Tableau Server 9.1 and earlier, you could set capabilities that could apply to all content in the project.) This is a change in the permissions model for Tableau Server itself, not just in the API. In Tableau Server 9.2, you cannot set permissions for any project capability except the ones listed here, even if you specify a previous version of the REST API in the URI. For more information, see these topics in the Tableau Server documentation: - [Set Default Permissions for a Project, and its Workbooks and Data Sources](https://help.tableau.com/current/server/en-us/permissions.htm#project-permission) - Lock Content Permissions to the Project [Windows](https://help.tableau.com/current/server/en-us/permissions.htm#lock-project-permissions) | [Linux](https://help.tableau.com/current/server-linux/en-us/permissions.htm#lock-project-permissions) ### Inherited permissions for nested projects When a user has **Project Leader** permissions for a project in a hierarchy, they will have the **InheritedProjectLeader** permission for any child projects under that project in the hierarchy, even if **Project Leader** permissions are explicitly denied for that user in a child project. To learn more, see [Manage Permissions with Projects](https://help.tableau.com/current/server/en-us/permissions_projects.htm). ## Mapping capability names in the REST API to names in the server environment When you call a method that lets you assign permissions to an entity, such as Add Datasource Permissions, you refer to the permissions using a set of capabilities whose names are defined in the [REST API XML Schema](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_schema.htm). The names of the capabilities defined in the schema don't always correspond exactly to how the capabilities are presented in the Tableau Server environment. The following table shows permission names as they are used in the REST API and as they appear in the server environment.
REST API permission nameServer environment permission name
AddCommentAdd Comment
ChangeHierarchyMove
ChangePermissionsSet Permissions
ConnectConnect
DeleteDelete
ExecuteRun Flow
ExportDataView Summary Data
ExportImageExport Image
ExportXmlDownload
ExtractRefreshRefresh Extracts
FilterFilter
InheritedProjectLeaderProject Leader
ProjectLeaderProject Leader
ReadView
ShareViewShare Customized
ViewCommentsView Comments
ViewUnderlyingDataView Underlying Data
VizqlDataApiAccessAPI Access
WebAuthoringWeb Edit
WriteSave
## More Information For more information about permissions and capabilities, see [Permissions](https://help.tableau.com/current/server/en-us/permissions.htm) topic in the Tableau Server Help. [Skip to main content](#main-content) # Projects Methods **[Projects](https://help.tableau.com/current/server/en-us/projects.htm)** are sets of workbooks, data sources, and flows whose members inherit the project's permissions. Using the projects methods of the Tableau Server REST API you can: - Get a filtered, sorted list of projects on a server - Create, update, and delete projects on a server This functionality relates to the UI elements and concepts described at: [Use Projects to Manage Content Access](https://help.tableau.com/current/server/en-us/projects.htm). ## 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: Projects](https://www.postman.com/salesforce-developers/salesforce-developers/folder/nxpwgqs/projects) ## Create Project Creates a project on the specified site. You can also create project hierarchies by creating a project under the specified parent project on the site. To make changes to an existing project, call [Update Project](#update_project). **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version:** Available in API 1.0 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:** Only Tableau Administrators can update a project.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:projects: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-id/projects POST /api/api-version/sites/site-id/projects?publishSamples=publish-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to create the project in.
publish-value(Optional) A Boolean value that specifies whether to publish the sample workbooks provided by Tableau to the project. When the publish-value is not specified in the request, or the publishSamples parameter is missing, no samples will be published. To publish the sample workbooks, set publishSamples parameter to true. This option is equivalent to the tabcmd command-line utility option, publishsamples. For more information, see tabcmd.
#### Request Body Copy ```           
``` Copy ``` {  "project": {    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }} ``` #### Attribute Values
project name (Required) The new name for the project.
project description (Optional) The new description for the project.
project parentProjectId

(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.

To create a project as a stand alone or at the top of a project hierarchy, omit the parentProjectId attribute.

For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults.

project contentPermissions

(Optional) This value controls user permissions in a project, however, if the project is nested within a project with more restrictive policies, it will inherit those permissions and these settings will have no effect. The functional permissions of a project, including those it inherits, are available in value of contentPermission in the response body from a request to create, update, or query a project.

  • LockedToProject to lock permissions so that users cannot overwrite the default permissions set for the project
  • ManagedByOwner to allow users to manage permissions for content that they own
  • LockedToProjectWithoutNested to lock the permissions of a parent project, but not those of its child projects.

The default is ManagedByOwner. For more information, see Lock Content Permissions.

owner id The LUID of the user that owns the project.
#### cURL Example `curl --request PUT "https://myServer/api/3.21/sites/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e/projects/xz2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e3w" --header "Content-Type: application/xml" --header "X-Tableau-Auth;" --data " "` #### Response Code 201 #### Response Body Copy ```            ``` Copy ``` {  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }} ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400008 Bad request The request cannot set content permissions to LockedToProjectWithoutNested for a REST API version lower than 3.8.
403 403008 Insufficient storage on site The samples could not be published because there is not enough storage space remaining on the server to accommodate the samples.
404 404000 Site not found

The site ID in the URI doesn't correspond to an existing site.

405 405000 Invalid request method Request type was not POST.
409 409006 Project name conflict The project name in the request already belongs to the specified site. For the purpose of uniqueness checks, project names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Project Deletes the specified project on a specific site. When a project is deleted, all Tableau assets inside of it are also deleted, including assets like associated workbooks, data sources, project view options, and rights. External assets, such as databases and tables, are not deleted. Starting in Tableau Cloud December 2022 / Server 2023.1, external assets from deleted projects are moved to the External Assets Default Project, and can also be found in External Assets. In Tableau Cloud October 2022 / Server 2022.3 and earlier, external assets are not moved to any other project, but can be found in External Assets. Use this method with caution. #### URI DELETE /api/api-version/sites/site-luid/projects/project-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the project.
project-luidThe LUID of the project to delete.
#### Request Body None #### Permissions Only server administrators and site administrators can call this method. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:projects: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403003Deletion forbiddenYou attempted to delete a default project that cannot be deleted.
404404000Site not foundThe site LUID or URL namespace in the URI doesn't correspond to an existing site.
404404005Project not foundThe project LUID in the URI doesn't correspond to an existing project or the project is not found on this site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/projects/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. ## Query Projects Returns a list of projects on the specified site, with optional parameters for specifying the paging of large results. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/projects GET /api/api-version/sites/site-id/projects?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/projects?filter=filter-expression GET /api/api-version/sites/site-id/projects?sort=sort-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the projects.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) An expression that lets you specify a subset of data sources to return. You can filter on predefined fields such as name, ownerName, and parentProjectId. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can call this method only if they have Read (view) permission for the project (either implicitly or explicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` ... additional attributes and projects ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example: Filter query by project ID `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects?filter=parentProjectId:eq:711d4c5d-60b7-4f77-a9a6-bbf05021b6ec" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` #### Example: Show all fields in the first ten query results `curl "https://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects?pageSize=10&fields=_all_" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Update Project Updates the name, description, or project hierarchy of the specified project. You can create or update project hierarchies by specifying a parent project for the project that you are updating using this method. **Version:** Available in API 1.0 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:** Only Tableau Administrators can update a project.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:projects: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). #### URI PUT /api/api-version/sites/site-id/projects/project-id PUT /api/api-version/sites/site-id/projects/project-id?publishSamples=publish-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
project-idThe ID of the project to update.
publish-value(Optional) A Boolean value that specifies whether to publish the sample workbooks provided by Tableau to the project when you update the project. When the publish-value is not specified in the request, or the publishSamples parameter is missing, no samples will be published. To publish the sample workbooks, set publishSamples parameter to true. This option is equivalent to the tabcmd command-line utility option, publishsamples. For more information, see tabcmd.
#### Request Body Copy ```            ``` Copy ``` {  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }} ``` #### Attribute Values
project id

(Required) The LUID of the project being updated.

For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults Windows | Linux.

project name (Optional) The new name for the project.
project description (Optional) The new description for the project.
project parentProjectId

(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.

To update a project without changing its placement in the project hierarchy, omit the parentProjectId attribute. To move a project to the top of the project hierarchy, provide an empty string ("") for the parentProjectId attribute.

For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults.

project contentPermissions

(Optional) This value controls user permissions in a project, however, if the project is nested within a project with more restrictive policies, it will inherit those permissions and these settings will have no effect. The functional permissions of a project, including those it inherits, are available in value of contentPermission in the response body from a request to create, update, or query a project.

  • LockedToProject to lock permissions so that users cannot overwrite the default permissions set for the project
  • ManagedByOwner to allow users to manage permissions for content that they own
  • LockedToProjectWithoutNested to lock the permissions of a parent project, but not those of its child projects.

The default is ManagedByOwner. For more information, see Lock Content Permissions.

project parentProjectId

(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.

To update a project without changing its placement in the project hierarchy, omit the parentProjectId attribute. To move a project to the top of the project hierarchy, provide an empty string ("") for the parentProjectId attribute.

For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults.

owner id The LUID of the user that owns the project.
#### cURL Example `curl --request PUT "https://myServer/api/3.21/sites/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e/projects/ds2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e70" --header "Content-Type: application/xml" --header "X-Tableau-Auth;" --data " "` #### Response Code 200 #### Response Body Copy ```            ``` Copy ``` {  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400008Bad requestThe request cannot set content permissions to LockedToProjectWithoutNested for a REST API version lower than 3.8.
403403005Update forbiddenAttempt to rename the default project, which cannot be renamed.
403403008Insufficient storage on siteThe samples could not be published because there is not enough storage space remaining on the server to accommodate the samples.
403403004Update forbiddenA non-administrative user tried to update the project, but does not have permissions to update the project.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404009Project ID mismatchThe request body contains a project ID (which is optional) and it doesn't match the ID in the URI.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not PUT.
409409006Project name conflictThe project name in the request already belongs to the specified site. For the purpose of uniqueness checks, project names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Publishing Methods Using the publishing methods of the Tableau Server REST API you can: - Publish a small workbook, data source, or flow file to a site in a single call - Publish a larger workbook, data source, or flow file to a site in multiple calls This functionality relates to the UI elements and concepts described at: [Publishing Workbooks and Data Sources](https://help.tableau.com/current/pro/desktop/en-us/publish_overview.htm). ## 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: Publishing](https://www.postman.com/salesforce-developers/salesforce-developers/folder/4yekwgx/publishing) ## Append to File Upload Uploads a block of data and appends it to the data that is already uploaded. Call this method after an upload has been initiated using [Initiate File Upload](#initiate_file_upload), as many times as needed to upload all the blocks and complete the file. (A file is limited to 10,000 blocks.) You can safely make multiple simultaneous calls to this method as long as you use the sequenceID parameter in the URI querystring. Doing so will upload the blocks in parallel and decrease the time needed to complete the file, provided there is enough available bandwidth. When the final block of data has been uploaded, you call [Publish Data Source](#publish_data_source), [Publish Flow](#publish_flow), or [Publish Workbook](#publish_workbook) to commit the file. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI PUT /api/api-version/sites/site-id/fileUploads/upload-session-id?sequenceID=sequence-id #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site to upload the file to.
upload-session-id The ID of the upload session. You get this value when you start an upload session using Initiate File Upload.

sequence-id

(Optional) A long integer that you choose, indicative of the block's order in the complete sequence.

After you append all the blocks and call the Publish Data Source, Publish Flow, or Publish Workbook method, the sequenceID is used to order the blocks, low sequenceID to high sequenceID, and the combined blocks are written as the file. Therefore, the sequenceID should be incremented for each block (though it doesn't have to incremented by 1).

If you don't include sequenceID in the URI querystring, the uploaded blocks are processed in the order they arrive. Network conditions can cause blocks to arrive out of order, which could result in a corrupted file if sequenceID isn't used.

Note: The sequenceID parameter is available starting in API version 3.27 (Tableau Cloud December 2025 / Server 2025.3). If you're using API version 3.26 (Tableau Cloud June 2025 / Server 2025.1) or earlier, the file is assembled using each block's arrival time.

#### Request Body The content of the file to be uploaded is included in a MIME multipart message. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### Permissions Users who are not server administrators or site administrators can call this method only if they have publishing rights on the site. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:file_uploads: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 200 #### Response Body ``` ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400016File size too largeThe attached file exceeds the configured maximum attachment size for a single append call. The maximum allowable size will be reported in the error response.
400400019Malformed request bodyThe XML content in the MIME multipart request is not empty.
400400020Missing file dataThere is no attachment in the request with the file data to be appended to the upload.
403403007Not a publisherA non-administrator user attempted to initiate a file upload, but the caller doesn't have publishing rights on the site.
403403016Upload failureThe file could not be uploaded for some other reason than those specified earlier.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404015File upload not foundThe file upload ID in the URI doesn't correspond to an existing file upload.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Initiate File Upload Initiates the upload process for a file. After the upload has been initiated, you call [Append to File Upload](#append_to_file_upload) to send individual blocks of the file to the server. When the complete file has been sent to the server, you call [Publish Data Source](#publish_data_source), [Publish Flow](#publish_flow), or [Publish Workbook](#publish_workbook) to commit the upload. Initiate File Upload returns an upload session ID that you pass to [Append to File Upload](#append_to_file_upload) or one of the publishing methods in order to identify the upload session. The file size that is returned in the response is initialized to zero (0) megabytes, because no data has yet been loaded. Subsequent calls to [Append to File Upload](#append_to_file_upload) or the publishing APIs update this value. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-id/fileUploads #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to upload the file to.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can initiate a file upload only if they have publishing rights on the site. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:file_uploads: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 ``` ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403015Access to Favorites forbiddenA non-administrator user attempted to initiate a file upload, but the caller doesn't have publishing rights on the site.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Data Source Publishes a data source on the specified site, or appends data to an existing data source. To make other changes to a published data source, call [Update Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source) or [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection). **Version**: Available in API 2.0 and later. **License**: Available for Tableau Server and Tableau Cloud. **Permissions**: You can publish a data source if you have implicit or explicit Publish permissions for the data source, or are a Tableau administrator. Note: The `queryTaggingEnabled` attribute is returned only for administrator users. **Access Scope**: `tableau:datasources:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This method is used in two ways. You can call it to publish a data source in a single request. To do that, you include the content of the data source file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. If you want to avoid having the publishing process time out, you can use the _asJob_ parameter to make data source publication asynchronous. Alternatively, you can publish a data source in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](#initiate_file_upload), send portions of the file to the server using [Append to File Upload](#append_to_file_upload), and then commit the upload by calling Publish Data Source. In this case, Publish Data Source doesn't contain the file to publish. **Extracts with multiple table options** Starting in v2021.4, you can publish multi table Hyper extract files created using the [Hyper API](https://help.tableau.com/current/api/hyper_api/en-us/docs/hyper_api_create_update.html). The data must include a single [fact table](https://en.wikipedia.org/wiki/Fact_table) containing the foreign keys that relate the tables to each other. The Hyper API infers the data object model, but does not perform any validation, such as referential integrity checking. If the Hyper API can’t infer the data object model of a Hyper extract, for instance, because there is more than one fact table, then attempting to publish the extract will fail. Prior to v2021.4, there was no way to append data to an extract with multiple tables using the REST API. **Data Sources stored locally** When you publish a data source from your local computer to the server, you must make sure that the server has all the components that are required in order for other users to see and interact with the data source. For example, if the data source is based on an Excel spreadsheet, you typically publish a packaged data source (`.tdsx` file) that contains all the components for that data source. **Replace data source** Starting in version 2025.1, you can use the replace parameter. You can include `overwrite`, `append`, and `replace` in a single request, but only one of these parameters can be set to true. If more than one is set to true, the request returns an HTTP 400 error. **Working with Parquet files** \- When publishing a Parquet file to a data source through a live-to-Hyper connection, the files are converted to Hyper files. You may want to publish a copy of your original Parquet file to retain that data in its native format. \- A data source with a live-to-Hyper connection to data in a Hyper file converted from Parquet can only have a single connection. \- When incrementally updating that data from that connection, using the Update Hyper in Data Source method, the Parquet file is not converted to Hyper. **Composed data sources and extended data sources** Starting in REST API version 3.29 (Cloud 262 and Server 2026.2), you can publish composed and extended data sources. When you publish a composed data source, you must include a `parentDataSourceUrls` element in addition to the `.tds` file so the composed data source is correctly linked to its parents. Include one entry for every published data source that is a direct parent of the composed data source. These correspond to the `datasource-url` tags serialized in the `.tds` file's data source tree. Include only the immediate parent data sources that the data source you are publishing depends on. When you publish an extended data source, include the `.tds` file as usual; no `parentDataSourceUrls` element is required. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-luid/datasources POST /api/api-version/sites/site-luid/datasources?overwrite=overwrite-flag&asJob=asJob-value POST /api/api-version/sites/site-luid/datasources?append=append-flag POST /api/api-version/sites/site-luid/datasources?uploadSessionId=upload-session-id&datasourceType=datasource-file-type&overwrite=overwrite-flag&append=append-flag&replace=replace-flag #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The LUID of the site to publish to.
overwrite-flag true to overwrite a data source that has the same name, or false to fail if the specified data source already exists. The default is false. If overwrite-flag is set to true but the data source doesn't already exist, the operation succeeds.

You can include both the overwrite and append parameters in a request, but they cannot both be true.

replace-flag (New in 2025.1) A boolean value (true or false). Set to true to replace the data in an existing data source. The default is false.
asJob-value A Boolean value that is used to publish data sources asynchronously. If you set this value to false (the default), the publishing process runs as a synchronous process. If a data source is very large, the process might time out before it finishes. If you set this value to true, the process runs asynchronously, and a job will start to perform the publishing process and return the job ID. You can check the status of the import job by calling Query Job.
append-flag true to append the data being published to an existing data source that has the same name. The default is false. If append-flag is set to true but the data source doesn't already exist, the operation fails.

In order to append data to a published data source on Tableau Server, both the source file and the published file must be an extract with the file extension .hyper or .tde. The schema of the source and the published extract must match.

If an extract was stored using the multiple tables option, you can't append data to it.

You can include both the overwrite and append parameters in a request, but they cannot both be true.

upload-session-luid If you are calling this method to commit a file that was uploaded in parts, this value contains the upload session LUID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
datasource-file-type hyper, tds, tdsx, or tde the kind of file that you are uploading. This value is required if you are calling Publish Data Source in order to commit a file that was previously uploaded using Append to File Upload. The value is not used if you upload a file in the body of the request.
#### Request Body The content type in the header of requests to publish a data source must use the mixed multipart content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml parent-datasource-url --boundary-string Content-Disposition: name="tableau_datasource"; filename="SALES.TDSX" Content-Type: application/octet-stream content-of-datasource-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml parent-datasource-url --boundary-string-- ``` **Publishing a file in the request body** ``` Content-Length: 16301 Content-Type: multipart/form-data; boundary=----------------------my_boundary_string ----------------------my_boundary_string Content-Disposition: form-data; name="part1.json" Content-Type: application/json { "datasource": { "name": "datasource-name", "useRemoteQueryAgent": "remote-query-agent-flag", "description": "datasource-description", "connectionCredentials": { "name": "connection-username", "password": "connection-password", "embed": "embed-flag", "oAuth": "oauth-flag" }, "project": { "id": "project-id" }, "parentDataSourceUrls": [ "parent-datasource-url" ] } } ----------------------my_boundary_string Content-Disposition: form-data; name="datasource.tdsx" Content-Type: application/octet-stream content-of-datasource-file ----------------------my_boundary_string-- ``` **Committing a file previously uploaded** ``` Content-Length: 16301 Content-Type: multipart/form-data; boundary=----------------------my_boundary_string ----------------------my_boundary_string Content-Disposition: form-data; name="part1.json" Content-Type: application/json { "datasource": { "name": "datasource-name", "connectionCredentials": { "name": "connection-username", "password": "connection-password", "embed": "embed-flag", "oAuth": "oauth-flag" }, "project": { "id": "project-id" }, "parentDataSourceUrls": [ "parent-datasource-url" ] } } ----------------------my_boundary_string-- ``` #### Request Attributes
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

datasource-name (Required) The name to assign to the data source when it is saved on the server.
remote-query-agent-flag (Optional) When true, this flag will allow your Tableau Cloud site to use Tableau Bridge clients. Bridge allows you to maintain data sources with live connections to supported on-premises data sources.
datasource-description (Optional) A description of the data source.
connection-username (Optional) If the data source connection requires credentials, the <connectionCredentials> elements is included and this attribute specifies the connection username. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

connection-password (Optional) If the data source connection requires credentials, the <connectionCredentials> elements is included and this attribute specifies the connection password. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

embed-flag (Optional) If the data source connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials.
oauth-flag (Optional) If the data source connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the connectionCredentials element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the data source.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

project-id The LUID of the project to assign the data source to. If the project is not specified, the data source will be published to the default project.
datasource-file-name The file name (including extension) of the data source file to upload. This attribute is used in the request body only if the request also includes the content of the data source file; it is not used if you are committing a file uploaded using previous requests.
content-of-datasource-file The content of the data source file, if the request includes the file. The maximum size of a file that can be uploaded in one call is 64 MB.
askDataEnablement This attribute is not available in API 3.12 and later (Tableau Cloud September 2021 / Server 2021.3).
parentDataSourceUrls The name (URL) of the immediately referenced published data source that the data source being published depends on. For a composed data source, you must include one entry for each top-level parent data source in the data model.
#### cURL Example `curl "http://MY_SERVER/api/3.4/sites/ff2a8360-3c2b-4b05-a793-7607c602e1fb/datasources" -X POST -H "X-Tableau-Auth:6fSulU7ET8yjpHteQj56MQ|LrkEdTHcmPkWFcD8wOEy29hlVXm8iPo4" -H "Content-Type: multipart/mixed;" -F "request_payload=@publish-datasource.xml" -F "tableau_datasource=@data-source.tds"` **Content of publish-datasource.xml**: ``` ``` #### Response Code 201 #### Response Body ``` ``` ``` { "datasource": { "id": "75b71d2f-e8d3-42af-b654-d953659326ee", "name": "Sales", "contentUrl": "mySite", "description": "Sales Data Source", "useRemoteQueryAgent": "True", "webpageUrl": "https://my_server/#/datasources/222", "type": "excel-direct", "createdAt": "2016-02-12T23:36:09Z", "updatedAt": "2020-12-16T15:33:03Z", "isCertified": "False", "certificationNote": "This is a certification note.", "encryptExtracts": "True", "project": { "id": "56c86f04-b834-4a08-a561-86497bb4b2df", "name": "Visualization" }, "owner": { "id": "20148c74-7818-4eb8-b2a1-9f3f5f582613" }, "tags": [] } } ``` The `createdAt` and `updatedAt` attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Response Headers `Location: /api/3.29/sites/site-id/datasources/id-from-server` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe request message is missing or incomplete, or contains malformed XML. Make sure that the Content-Length value is set.
400400000Missing data sourceThere is no attachment in the request for the data source.
400400008Invalid overwrite valueThe overwrite parameter must be set to true or false.
400400008Invalid append valueThe append parameter must be set to true or false.
400400008Invalid embed valueThe request body contains a <connectionCredentials> element and it has an embed attribute whose value is not true or false.
400400010Invalid data source filenameThe name of the data source file did not end with the suffix .hyper, .tds, .tdsx, or .tde.
400400010Missing or invalid file typeThe request included an uploadSessionId parameter but no file type, or the file type was something other than hyper, tds, tdsx, or tde.
400400010Unexpected attachmentsThe message had both a uploadSessionId parameter and an attachment, or the message contained more than one attachment.
400400011Publishing errorThe data source could not be published for some other reason than those specified earlier.
400400011Bad RequestThe request is invalid. This can occur if more than one of the conflict resolution parameters (overwrite, append, or replace) is set to true. Only one of these parameters can be true in a single request.
400400019Malformed request bodyThe request message is missing or incomplete, or contains malformed XML. Make sure that the Content-Length value is set.
400400055Incompatible overwrite and append valuesThe overwrite and append parameter cannot both be set to true.
400400129Invalid Ask Data enablementThe enablement setting in the request body is not valid for the current server configuration.
403403007Insufficient publishing permissionA non-administrator user attempted to publish a data source, but the caller doesn't have sufficient project permissions.
403403007Unlicensed publishing forbiddenA non-administrator user who is unlicensed attempted to publish a data source. This is disallowed for all projects (including the default project).
403403007Overwrite forbiddenA data source with the specified name already exists and the overwrite parameter was not set to true.
403403007Problem connecting to data sourceThere was a problem connecting to a data source. This can be due to missing or invalid connection credentials or because the referenced data source is not available on the server.
403403008Insufficient storage quotaThe data source could not be published because there is not enough storage remaining on the server to accommodate its size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe append parameter is true but the data source name specified in the request body does not correspond to an existing data source.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404015File upload not foundThe file upload session ID in the request body doesn't correspond to an existing file upload on the site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Flow Publishes a flow on the specified site. To make other changes to a published flow, call [Update Flow](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow) or [Update Flow Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow_connection). **Version**: Available in API 3.3 and later. **License**: No additional license required. **Permissions**: Users who are not server administrators or site administrators can publish a flow only if the flow belongs to a project that they have permissions to publish to, have a site role that allows publishing and have write permissions on the flow if overwriting. **Access Scope**: `tableau:flows:create` - Scope added in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). You can publish a flow in a single request or in multiple parts. To publish a flow in a single request you include the content of the workbook file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. To publish a flow in multiple parts, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload), and then commit the upload by calling Publish Flow. In this case, Publish Flow doesn't contain the file to publish but the `uploadSessionId` and the `flowType` parameters are required. #### URI POST /api/api-version/sites/site-id/flows POST /api/api-version/sites/site-id/flows?overwrite=overwrite-flag POST /api/api-version/sites/site-id/flows?overwrite=overwrite-flag&uploadSessionId=upload-session-id&flowType=flow-file-type #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to publish to.
overwrite-flag(Optional) true to overwrite a flow that has the same name, or false to fail if the specified flow already exists. The default is false. If overwrite-flag is set to true but the flow doesn't already exist, the operation succeeds.
upload-session-idIf you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
flow-file-typetfl or tflx to indicate whether you have uploaded a flow file (tfl) or a packaged flow file (tflx). This value is only necessary and required if you upload a file in multiple parts. In the Publish Flow call after completing file upload, specify the file type.
#### Publishing a file in the Request Body ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_flow"; filename="flow-file-name" Content-Type: application/octet-stream content-of-flow-file --boundary-string-- ``` #### Attribute Values
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

name The name to assign to the flow when it is saved on the server.
description The description of the flow.
server-address Specify the server address for an input connections.
port-number Specify the port number for input connections.
connection-username (Optional) If the flow input connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection username. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

connection-password (Optional) If the flow input connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection password. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

embed-flag (Optional) If the flow input connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials.
oauth-flag

(Optional) If the flow input connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the connectionCredentials element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the data source.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

project-id The ID of the project to assign the flow to.
content-of-flow-file The file itself if you are including it in the request body.
#### Response Code 201 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Malformed request bodyThe XML content in the MIME multipart request is not empty.
400400089Missing flow nameFlow name is required and was not specified.
403403007Invalid permissionsThe caller does not have the necessary permissions to publish the flow. 
400400090Missing flow payloadThe flow information (the structure containing the flow description, flow project) was not included in the request body.
400400086Invalid flow attachmentThe name of the flow doesn't end in .tfl or .tflx.
400400087Generic flow publishing errorThe flow could not be published for some other reason than those specified earlier.
409409041Flow already found in destinationThe flow name should be unique, or the overwrite flag parameter should be set to true.
403403008Insufficient storage quotaThe flow could not be published because there is not enough storage remaining on the server to accommodate its size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Virtual Connection Publishes a virtual connection on the specified site, either from a packaged virtual connection file (`.tvcx`) or from a downloaded JSON representation. If the virtual connection does not exist, it is published as a new virtual connection. If it already exists and you choose to overwrite it, the virtual connection is published as a revision of the existing virtual connection. You can publish in either of these ways: - **`.tvcx` file**. Send a packaged virtual connection file, as returned by [Download Virtual Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection). A `.tvcx` file can include extracts. - **JSON representation**. Send the virtual connection schema, as returned by [Download Virtual Connection as JSON](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json), inline in the request body. **Version**: Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. Support for publishing a `.tvcx` file added in API 3.30. **License**: Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions**: You must have the Overwrite permission for the virtual connection and your site role must be at least Creator, or you must be a Tableau administrator. **Access Scope**: `tableau:virtual_connections:create`. Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). To publish a `.tvcx` file, you can call this method in two ways. You can publish a virtual connection in a single request. To do that, you include the content of the `.tvcx` file in the body of the request. The maximum size of a file that can be published in a single request is about 64 MB. Alternatively, you can publish a `.tvcx` file in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](#initiate_file_upload), send portions of the file to the server using [Append to File Upload](#append_to_file_upload), and then commit the upload by calling Publish Virtual Connection. In this case, Publish Virtual Connection doesn't contain the file to publish. We recommend this approach for files larger than about 64 MB, such as files that include large extracts. **Virtual connections with extracts** A `.tvcx` file for a virtual connection that uses extracts contains the Hyper extract files, in addition to the virtual connection schema. A `.tvcx` file for a live virtual connection contains only the schema. This method accepts both kinds of file. **Draft or active** When you publish a JSON representation, the virtual connection can be published as a draft or as an active virtual connection, as set by the `publishAsDraft` parameter. A virtual connection that you publish from a `.tvcx` file is always published as an active virtual connection, whether or not the file includes extracts. The `publishAsDraft` parameter does not apply to a `.tvcx` file. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-id/virtualconnections POST /api/api-version/sites/site-id/virtualconnections?publishAsDraft=publish-as-draft-flag POST /api/api-version/sites/site-id/virtualconnections?overwrite=overwrite-flag POST /api/api-version/sites/site-id/virtualconnections?uploadSessionId=upload-session-id&overwrite=overwrite-flag #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The LUID of the site to publish to.
publish-as-draft-flag (Optional) true to publish the virtual connection as a draft, or false to publish it as an active virtual connection. The default is true. This parameter applies only when you publish a JSON representation. The parameter is case sensitive.

If the virtual connection contains an extract, the publishAsDraft parameter value is ignored and the virtual connection is published as a draft.

Note: If you are using the REST API to publish a virtual connection as a draft, note the virtual connection's LUID (virtualconnection id) in the response body. Use that LUID to build a URL to further edit, create extracts for, or publish the virtual connection using the virtual connection editor in the regular web interface. For more information, see "Draft in Progress" in the Tableau Cloud Product Help and Tableau Server Product Help.

overwrite-flag true to overwrite a virtual connection that has the same name in the target project, or false to fail if the specified virtual connection already exists. The default is false. If overwrite-flag is set to true but the virtual connection doesn't already exist, the operation succeeds.
upload-session-id (Optional, .tvcx files only) If you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
#### Request Body The request body depends on whether you publish a `.tvcx` file or a JSON representation. **Publishing a .tvcx file** The content type in the header of requests to publish a `.tvcx` file must use the mixed multipart content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. The server uses this content type to tell a `.tvcx` request from a JSON request. A request with any other content type, such as `application/octet-stream` or `multipart/form-data`, is handled as a request to publish a JSON representation and fails. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_virtual_connection"; filename="virtualconnection-name.tvcx" Content-Type: application/octet-stream content-of-virtualconnection-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` **Publishing a JSON representation** ``` virtualconnection-as-json ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "owner": { "id": "owner-id" }, "content": "virtualconnection-as-json", "name": "virtualconnection-name" } } ``` #### Request Attributes **For a .tvcx file**
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

virtualconnection-name (Required) The name to assign to the virtual connection when it is saved on the server. This is typically derived from the file name.
project-id (Optional) The LUID of the project to publish to. If you omit it, the virtual connection is published to the default project.
owner-id (Optional) The LUID of the owner of the virtual connection. If you omit it, the authenticated user becomes the owner.
tableau_virtual_connection file part The .tvcx file. Include it when you publish in a single request. Omit it when you commit a file that was uploaded in parts. If you include both a file part and the uploadSessionId parameter, or if you include neither, the request fails.
**For a JSON representation**
virtualconnection-name The name of the virtual connection you are publishing. If publishing an existing virtual connection as a revision, the virtual connection name is ignored.
project-id The LUID of the project you are publishing to.
owner-id This attribute is required, but is ignored.
virtualconnection-as-json

The virtual connection schema rendered as JSON, as obtained using the Download Virtual Connection as JSON or Download Virtual Connection Revision as JSON method. The schema appears in the content element (for XML output) or content property (for JSON output).

Note: Changing the downloaded schema and then using it with this method isn't supported.

When using the Publish Virtual Connection method, we recommend using the virtual connection schema format that matches the format you used for downloading it. This is important because the virtual connection schema returned by the download methods has escape characters in it if the output was JSON. If you download and publish using different formats, you will have to make changes to the JSON representation of the virtual connection.

In other words:

  • If the output of the Download Virtual Connection as JSON method was XML (except for the content element, which is always a form of JSON), use XML when using this Publish Virtual Connection method.
  • If the output of the Download Virtual Connection as JSON method was JSON (in which case it will have escape characters in the content property), use JSON when using this Publish Virtual Connection method.
  • Alternatively, you can escape or unescape the schema yourself if you are downloading and publishing using different formats.

For more information on the difference between using XML and using JSON with the REST API, see Fundamentals of the Tableau Server REST API.

#### cURL Example **Publishing a .tvcx file** `curl "http://MY_SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections?overwrite=false" -X POST -H "X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3" -H "Content-Type: multipart/mixed; boundary=----TabBoundary" --data-binary @publish-vconn-request.txt` The file `publish-vconn-request.txt` contains the multipart request body shown above in **Publishing a file in the request body**. **Publishing a JSON representation** `curl --location 'http://MY_SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections?overwrite=true&publishAsDraft=false' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data @data.xml` **Content of data.xml**: ``` virtualconnection-as-json ``` Replace virtualconnection-as-json in this example with the virtual connection schema you downloaded using the [Download Virtual Connection as JSON](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json) method. #### Response Code 201 #### Response Body The response is the same whether you publish a JSON representation or a `.tvcx` file. ``` ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "id": "virtualconnection-id", "name": "virtualconnection-name" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request

When you publish a .tvcx file, the request is not valid for one of these reasons:

  • The request does not include request_payload or the virtualConnection element.
  • The virtualConnection element does not include a name.
  • The request includes both the .tvcx file and uploadSessionId, or it includes neither. Include only one.
  • The file for the uploadSessionId is no longer available.
  • The .tvcx file is not valid.
  • The virtual connection could not be published with the extract in the .tvcx file.
400 400201 Publish virtual connection error The virtual connection could not be published. This includes content that is not valid virtual connection JSON, or a .tvcx file or its contents that could not be read.
403 403008 Insufficient site storage The content would exceed the site's storage quota. Applies when publishing a .tvcx file.
403 403175 Publish virtual connection forbidden The user does not have permission to publish the virtual connection.
404 404015 File upload not found The uploadSessionId does not match an upload owned by the user. Applies when publishing a .tvcx file.
404 404049 Virtual connection not found The virtual connection could not be found while publishing it with the extract in the .tvcx file.
405 405000 Invalid request method Request type was not POST.
409 409123 Virtual connection exists A virtual connection with the same name already exists in the project and overwrite is false. Applies when publishing a .tvcx file.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Workbook Publishes a workbook on the specified site. To make changes to a published workbook, call [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook) or [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection). **Version**: Available in API 2.0 and later. **License**: No additional license required. **Permissions**: Users who are not server administrators or site administrators can publish a workbook only if the workbook belongs to a project that they have permissions to publish to. **Access Scope**: `tableau:workbooks:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This method is used in two ways. You can call it to publish a workbook in a single request. To do that, you include the content of the workbook file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. If you want to avoid having the publishing process time out, you can use the _asJob_ parameter to make workbook publication asynchronous. Alternatively, you can publish a workbook in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](#initiate_file_upload), send portions of the file to the server using [Append to File Upload](#append_to_file_upload), and then commit the upload by calling Publish Workbook. In this case, Publish Workbook doesn't contain the file to publish. **Hiding views in a published workbook** To exclude certain sheets (also known as views) when you publish a workbook, configure them in the request as `hidden`. You cannot publish a workbook if all sheets are hidden. **Extracts with multiple table options** If an extract was stored using the multiple tables option, you can't append data to it. **Workbooks that rely on external local resources** When you publish a workbook from your local computer to the server, the publish process will fail if the workbook relies on resources (such as an Excel file or other data file) that are on your local computer but are not available on the server. (Unlike the publish process that is used in Tableau Desktop, the REST API publish process cannot automatically include extracts or other resources that the workbook uses.) If you are publishing a workbook that gets its data from a source on your computer, save the workbook as a packaged workbook (`.twbx` file) and publish the package so that workbook has all the resources it needs on the server. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-id/workbooks POST /api/api-version/sites/site-id/workbooks?overwrite=overwrite-flag POST /api/api-version/sites/site-id/workbooks?skipConnectionCheck=skip-connection-check-flag POST /api/api-version/sites/site-id/workbooks?uploadSessionId=upload-session-id&workbookType=workbook-file-type&overwrite=bool&asJob=asJob-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to publish to.
overwrite-flag(Optional) true to overwrite a workbook that has the same name, or false to fail if the specified workbook already exists. The default is false. If overwrite-flag is set to true but the workbook doesn't already exist, the operation succeeds.
asJob-value(Optional, boolean) If false, the workbook publishing process runs as a synchronous process. If a workbook is very large, the process might time out before it finishes. If you set this value to true, the process runs asynchronously, and a job will start to perform the publishing process and return the job ID. You can check the status of the import job by calling Query Job. Default value is false.
skip-connection-check-flag(Optional, boolean) If true, then the Tableau server will not check if a non-published connection of a workbook is reachable. Publishing will succeed but unchecked connection issues may result in a non-functioning workbook. If you encounter this issue, follow Keep Data Fresh guidelines. Default value is false.
upload-session-idIf you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
workbook-file-typetwb or twbx to indicate whether you have uploaded a workbook file (twb) or a packaged workbook file (twbx). This value is required if you are calling Publish Workbook in order to commit a file that was previously uploaded using Append to File Upload. The value is not used if you upload a file in the body of the request.
#### Request Body The content type in the header of requests to publish a workbook must use the mixed multi-part content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_workbook"; filename="workbook-file-name" Content-Type: application/octet-stream content-of-workbook-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` **Hiding a view when publishing a workbook** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` #### Attribute Values
boundary-string A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

workbook-name The name to assign to the workbook when it is saved on the server.
workbook-description (Optional) Starting in API 3.20, the description for the workbook.
show-tabs-flag (Optional) Specify true to have the published workbook show views in tabs; otherwise, false. The default is false.
user-luid (Optional) The LUID of the user to generate thumbnails as. You can get the user LUID by calling Get Users on Site.
server-address (Optional) Specify the server address for a data source connection if that data source does not use OAuth.
port-number (Optional) Specify the port number for a data source connection if that data source does not use OAuth.
connection-username (Optional) If the workbook's data source connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection username. If the element is included but is not required (for example, if the data source uses OAuth), the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

Note: Even if credentials are embedded in a workbook, you must still provide credentials when connecting to a data source that requires credentials, unless that data source uses OAuth.

connection-password (Optional) If the workbook's data source connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection password. If the element is included but is not required (for example, if the data source uses OAuth), the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

Note: Even if credentials are embedded in a workbook, you must still provide credentials when connecting to a data source that requires credentials, unless that data source uses OAuth.

embed-flag (Optional) If the workbook's data source connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials for when the data source is used.
oauth-flag (Optional) If the workbook's data source connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the <connectionCredentials> element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the workbook, and the server address and port number are not required.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

hide-view-flag Setting this flag to true will cause the named view to be hidden in the published workbook. The default value is false. You can specify any number of views to hide. If all views in a workbook are hidden the server will not perform a publish.
project-id The ID of the project to assign the workbook to. If the project is not specified, the workbook will be published to the default project.
workbook-file-name The file name (including extension) of the workbook file to upload. This attribute is used in the request body only if the request also includes the content of the workbook file; it is not used if you are committing a file uploaded using previous requests.
content-of-workbook-file The content of the workbook file, if the request includes the file. The maximum size of a file that can be uploaded in one call is 64 MB.
encryptExtracts (Optional) true to encrypt the extracts or false to not encrypt extracts. For more information, see Extract and Encryption Methods.
#### Response Code 201 #### Response Body ``` ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### cURL Request Example ``` curl "http://MY_SERVER/api/3.4/sites/ff2a8360-3c2b-4b05-a793-7607c602e1fb/workbooks" -X POST -H "X-Tableau-Auth:7T_33sOfS8Ks_0cht4tYxw|8tsTYQyyOZXfOgxZEHWQ4jUTCQ08GhRr" -H "Content-Type: multipart/mixed;" -F "request_payload=@publish-workbook.xml" -F "tableau_workbook=@MY_WORKBOOK.twbx" ``` **Content of publish-workbook.xml** (publish the Test1 workbook, hide the Test Sheet 1 view): ``` ``` **Example response:** ``` ``` #### Response Headers Location: /api/3.29/sites/site-id/workbooks/workbook-id #### Errors
HTTP statuserror CodeConditionDetails
400400000Malformed request bodyThe XML content in the MIME multipart request is not empty.
400400000Missing workbookThere is no attachment in the request and no uploadSessionID parameter.
400400000Unexpected attachmentsThe message had both an uploadSessionId parameter and an attachment, or the request body contained more than one attachment.
400400008Invalid embed valueThe request body contains a <connectionCredentials> element and it has an embed attribute whose value is not true or false.
400400008Invalid overwrite valueThe overwrite parameter must be true or false.
400400011Publishing errorThe workbook could not be published for some other reason than those specified earlier.
400400020Invalid workbook file nameThe name of the workbook doesn't end in .twb or .twbx.
400400035Missing or invalid file typeThe request included an uploadSessionId parameter but no file type, or the file type was something other than .twb or .twbx.
403403007Insufficient publishing permissionA non-administrator user attempted to publish a workbook, but the caller doesn't have sufficient project permissions.
403403007Unlicensed publishing forbiddenA non-administrator user attempted to publish a workbook. This is disallowed for all projects (including the default project).
403403007Overwrite forbiddenA workbook with the specified name already exists and the overwrite parameter was not set to true.
403403007Problem connecting to data sourceThere was a problem connecting to a data source used by the workbook. This can be due to missing or invalid connection credentials or because the referenced data source is not available on the server.
403403008Insufficient storage quotaThe workbook could not be published because there is not enough storage remaining on the server to accommodate its size.
403403130Publishing overwriteA workbook with the same name already exists.
403403131Concurrent updateThe workbook is already being published in another process.
403403132Failed connection checkOne or more data sources used by the workbook could not be reached.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404006Workbook not foundThe user specified overwrite as true but no workbook with the specified name exists on the site.
404404015File upload not foundThe file upload session ID in the uploadSessionId parameter doesn't correspond to an existing file upload on the site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Publishing Resources You can use the REST API to programmatically publish (upload) workbooks and data sources to the server. You can publish workbooks and data sources in two ways: - Using a single call, in which the complete file to publish is sent in the body of the request. - Using a multi-part upload, in which you send the file to the server in pieces. You should do this if the file you want to publish is very large, so that the upload process doesn't time out as you're publishing. When you publish a workbook to the server, you must make sure that the server has all the information it needs to allow people to use the workbook. If the workbook uses a local data source, such as an Excel spreadsheet, you must publish a packaged workbook (a `.twbx` file), which includes the workbook and any external resources that it references, including data sources and background images. If you publish a workbook as a `.twb` file and the workbook uses a local data source, the publish process will fail. (Unlike the publish process that is used in Tableau Desktop, the REST API publish process cannot automatically include extracts or other resources that the workbook uses.) Similarly, when you publish a data source, if the underlying data (such as an Excel spreadsheet) is available only on your local computer, you must publish a packaged data source (a .tdsx file). For more information, see [Publishing Data Sources](https://help.tableau.com/current/pro/desktop/en-us/publish_datasources.htm). **Tip:** The Python and Java samples include code that illustrates how to publish a workbook to Tableau Server. For more information, see [REST API Samples](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_samples.htm). ## Publishing a resource by using a single call You can publish a file by using a single request, as long as the file is not too large. If the file is too large, you should publish it in parts, as described under [Publishing Flow for Multi-Part Upload](#multi_part) later in this topic. To publish using a single call, call [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook) or [Publish Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook). These are POST requests that have the following format: ``` http://my-server/api/3.29/sites/site-id/workbooks http://my-server/api/3.29/sites/site-id/datasources ``` In addition to the X-Tableau-auth header that you set for all requests, you must make sure that two other headers are set: Content-Length and Content-Type. The Content-Type header for the request must be set to `multipart/mixed; boundary=_boundary-string_`. The boundary string is used to separate parts of the request body. The value of _boundary-string_ can be any string up to 70 characters long that will not otherwise appear in the body of the request. One approach to managing boundary strings is to create a globally unique ID (GUID) and use that as the boundary string. **Note:** Many programming frameworks automatically generate appropriate headers for Content-Length and Content-Type. For example, many frameworks generate a boundary string when you create a request whose content type is multipart/mixed. The body of the request includes two sections, delimited with "--" (two hyphens) followed by the boundary string. The final boundary string consists of two hyphens, the boundary string itself, and two trailing hyphens. Each section of the request body begins with a Content-Disposition header and a Content-Type header that describes the type of data in that section. The following example shows the request body for a Publish Workbook request. For this example, the boundary string has been set in the header to `6691a87289ac461bab2c945741f136e6`. ``` --6691a87289ac461bab2c945741f136e6 Content-Disposition: name="request_payload" Content-Type: text/xml --6691a87289ac461bab2c945741f136e6 Content-Disposition: name="tableau_workbook"; filename="usps-rates.twbx" Content-Type: application/octet-stream --6691a87289ac461bab2c945741f136e6-- ``` In the first section, Content-Disposition is set to name="request\_payload", and Content-Type is set to text/xml. These values are correct for data that consists of XML. Notice that some values, like request\_payload and tableau\_workbook, are literals. In the second section, the two headers are set to values that are correct for data (including binary data) that represents the content of the file being published. Notice that the filename value for **Content-Disposition** indicates the name of the file being published. **Note:** The content being published should _not_ be encoded (for example, using Base-64 or UTF-8). If the file is published successfully, the body of the response includes XML that provides information about the published document. For example, if you publish a workbook, the server responds with a workbook ID, name, and content URL, project information, and a list of the views that have been published. The following example shows a typical response for a workbook named Postal-rates that has been published to the default site. ``` ``` ## Publishing flow for multi-part upload If the file you want to publish is large, you should publish it in multiple parts (or, for workbooks, [publish asynchronously](#async)) . If the file is larger than 64 MB, you must publish it in multiple parts. Publishing in parts prevents a request from timing out. To perform a multi-part upload, send a succession of requests to the server, consisting of these methods: - [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload). Call this method to prepare the server to receive a file. - [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload). Call this method multiple times, passing a part of the file with each call. - [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook) or [_Publish Data Source_](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_data_source). Call one of these methods to commit the file upload and to assign a name and project to the resource you're publishing. The first two parts of the upload process (initiating and appending) are the same whether you're publishing a workbook or a data source. It's only when you're ready to commit your upload that you call a method that is specific to a workbook or a data source. ### Initiating the file upload You begin a multi-part upload by calling the Initiate File Upload method. This is a POST request that has the following format: ``` http://my-server/api/3.29/sites/site-id/fileUploads ``` The response for this request is HTTP code 201 (Created). The response body includes a element that includes an upload session ID: ``` ``` ### Uploading the file in parts To actually upload the file, you call the [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload) method. Each call to Append to File Upload includes a part of the file, also referred to as a block. You call the method as many times as necessary to send the complete file. (A file is limited to 1000 blocks.) You can safely make multiple simultaneous calls to the [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload) method as long as you use the sequenceID parameter in the URI querystring. Doing so will upload the blocks in parallel and decrease the time needed to complete the file, provided there is enough available bandwidth. This method is a PUT request that has the following format: `http://my-server/api/3.29/sites/_site-id_/fileUploads/_upload-session-id_?sequenceID=_sequence-id_` Note: The querystring parameter sequenceID is not available in API version 3.26 (Tableau Cloud June 2025 / Server 2025.1) and earlier. Instead, the file is assembled in the order the blocks arrive. For example, the URI for the upload file ID that was returned in the previous example might look like this: `http://my-server/api/3.29/sites/_site-id_/b4126fe9-d7ee-4083-88f9-a5eea1f40416/fileUploads/13253:73A6B41AAE1D462B82B6914B7CAD55BF-0:0?sequenceID=1` The format of the body for the PUT request is similar to the format of a POST request for publishing a file in one request, as described earlier. The request header must include a boundary string that is used to delimit sections of the request body. The following example shows an example of the request body for an Append to File Upload request. For this example, the boundary string has been set in the header to `12f71d3d4ae441caa0b38a5d4e0bde5e`. ``` --12f71d3d4ae441caa0b38a5d4e0bde5e Content-Disposition: name="request_payload" Content-Type: text/xml --12f71d3d4ae441caa0b38a5d4e0bde5e Content-Disposition: name="tableau_file"; filename="FILE-NAME" Content-Type: application/octet-stream --12f71d3d4ae441caa0b38a5d4e0bde5e-- ``` The first part of the multi-part payload is effectively blank; it contains only headers. **Note:** A blank payload requires two blank lines to conform to the RFC specification for multi-part payloads. If the request contains only one line for a blank payload, Tableau Server returns a 500-level error. In the second section, the Content-Disposition line contains a filename header. The section of the example that begins with "` ``` The minimum size that is reported in the **fileSize** attribute is 1, even if the size so far is less than 1 MB. ### Finishing the upload When you have finished making PUT requests to upload the contents of the file, you call Publish Workbook or Publish Data Source to commit the upload. As part of this call, you indicate what type of file you've uploaded and what project to store the file in. For a multi-part upload, the Publish Workbook or Publish Data Source calls have different content than they do for publishing the file in one request. These methods are POST requests. For Publish Workbook, the format is this: `http://my-server/api/3.29/sites/_site-id_/workbooks?uploadSessionId=_upload-session-id_&workbookType=_file-type_&overwrite=_bool_` For Publish Data Source, the format is this: `http://my-server/api/3.29/sites/_site-id_/datasources?uploadSessionId=_upload-session-id_&datasourceType=_file-type_&overwrite=_bool_` The workbookType or datasourceType parameters in the URI must be set to one of the allowed file types for the file that you're uploading: twb or twbx for workbooks, and hyper, tds, tdsx, or tde for data sources. For example, the URI to finish the multi-part workbook upload for the preceding examples might look like this: `http://my-server/api/3.29/sites/b4126fe9-d7ee-4083-88f9-a5eea1f40416/workbooks?uploadSessionId=13253:73A6B41AAE1D462B82B6914B7CAD55BF-0:0&workbookType=twbx` The body of the requests includes a single section delimited with boundary strings. The body has a element that includes the name of the workbook or data source and the ID of the project to save the uploaded file with. The following example shows the body of a request for the Publish Workbook method that finishes a multi-part workbook update. For this example, the boundary string has been set in the header to `f3dd83af28284d9fb28e20665ed49c86`. The workbook will be saved under the name CPI-historical in the project whose ID is `1f2f3e4e5-d6d7-c8c9-b0b1-a2a3f4f5e6e`. ``` --f3dd83af28284d9fb28e20665ed49c86 Content-Disposition: name="request_payload" Content-Type: text/xml --f3dd83af28284d9fb28e20665ed49c86-- ``` The server responds with a workbook ID, name, and content URL, project information, and a list of the views that have been published. The following example shows a typical response for a workbook named CPI-historical that has been published to the default site. ``` ``` ## Overwriting an existing file You can add the overwrite parameter to the URI for the Publish Workbook or Publish Data Source methods. If you set the flag to true, the server saves the file that you've uploaded under the name you specify, even if the workbook or data source with that name already exists. If the resource doesn't already exist and you set overwrite to true, a new workbook or data source is created with the name you specify. If you set overwrite to false (or don't include the parameter, since the default is false), the server checks first to see whether a resource already exists with the name that you specify. In that case, if the resource already exists, the method fails. The following example shows a request that calls the Publish Workbook method. The request specifies that the workbook that is being published should overwrite any existing workbook whose name is included in the request body. `http://my-server/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks?uploadSessionId=13253:6744F321974F4E8B8EC1424A3D56E0EA-0:0&workbookType=twbx&overwrite=true` ## Appending data to an existing data source If a data source already exists on the server, you can append data to it by calling the Publish Data Source method and specifying the append parameter. In effect, the append process adds rows to the data that's already in the data source. You can append data to an existing data source under these conditions: - The data source on the server is an extract (.hyper or .tde file). - The data source that you're publishing is also an extract (.hyper or .tde file). - The data that you're appending has the same schema as the data that already exists in the data source. Note: If an extract is stored using the multiple tables option, you can't append data to it. ## Publishing workbooks and data sources asynchronously The maximum size of a workbook or data source that can be published in a single request is 64 MB, but requests sometimes timeout with smaller file sizes, depending on the overall load on your Tableau Server installation. To avoid having the workbook or data source publishing process time out, you can use the _asJob_ parameter to make publication asynchronous. To make workbook publication asynchronous, add the _asJob_ parameter to the [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook) POST request, as shown in the following example: ``` POST /api/api-version/sites/site-id/workbooks&asJob=true ``` To make the data source publication asynchronous, add the _asJob_ parameter to the [Publish Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_data_source) POST request, as shown in the following example: ``` POST /api/api-version/sites/site-id/datasources&asJob=true ``` When you set the _asJob_ value to **true**, a job will start to perform the publishing process and return the `` element inside of a `` element, using the following format: ``` ``` The `` element contains the following attributes: - _job-id_ is a unique identifier for the job. You can use the value of this attribute to check the status of the publishing job by passing it to [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_job). - _job-mode_ has the value of **Asynchronous** when you set the _asJob_ parameter to **true** in the POST request. - _type_ has the value of **PublishWorkbook** or **PublishDatasource**. - _progress_ is set to **0** when the asynchronous publishing job is created, and then changes to **100** when the job is complete. - _createdAt_ provides a complete date and time that indicates when asynchronous publishing was initiated. - _finishCode_ is set to **1** when the asynchronous publishing job is created, and then changes to **0** when the job is complete. ## Troubleshooting Because REST API requests that involve publishing can have more complex request body content than other requests, you might experience errors when you test them. Here are some troubleshooting tips: - Examine code in the Python and Java samples as a model for how to use the REST API for publishing. For more information, see [REST API Samples](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_samples.htm). - Use a tool to examine the requests and responses as they go back and forth between your code and the server. (If you are using Windows, a useful tool for this purpose is [Fiddler](http://www.telerik.com/fiddler).) Make sure that the format of the request is correct. - Be sure that the Content-Length header is set. - An HTTP response of 400 (Bad Request) can mean that the request body is not formatted correctly. [Skip to main content](#main-content) # Pulse Methods With Tableau Pulse, Tableau Cloud users can follow metrics and use guided exploration to understand more about their data. In addition to viewing metrics from the Tableau Pulse home page, users can receive digests via Slack or email that include insights into important changes in their data so users can stay up to date. ### Tableau Pulse Overview - A **metric definition** specifies the metadata for all related metrics created using the definition. This includes the data source, measure, time dimension, and which data source dimensions can be filtered by users or programmatically to create related metrics. - Example: A metric definition might specify that the data source is the Superstore sales database, and that the measure to focus on is the aggregation "sum of sales". It could define the filterable dimensions as region and product line, that the time dimension for analysis is order date, and that the favorable direction is for the metric to increase. - A **metric** is the interactive object that users follow and receive updates on. It specifies the values to give the filterable dimensions of the metric's definition and the measurement time period of the metric. - Example: A user or REST request could filter the metric, and its automatically generated insights, based on the West region and product line sold. The insight provided might call out that discounted sales have risen sharply in a region between last quarter and the current one. - A user who follows (has a **subscription** to) a metric can receive digests via email or Slack. Digests can also be viewed in the Metrics home page in the Tableau UI. - A digest provides summary visualizations and text describing the top **insight**s for a metric. It also displays links to further metric details and to suggested follow up questions based on the metric's data and insights. - An **insight** is a data-driven observation about a metric. Tableau automatically generates and ranks insights by usefulness. - An **insight bundle** is a collection of insights for a metric That can be configured to include various elements. For more information and to learn about the UI features related to these methods, see [Create Pulse Metrics](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm). ### Configuring Pulse insights for a metric You can use Pulse REST API methods to generate an insight bundle for a metric. An insight bundle request specifies the metric being analyzed, the output format (text or HTML), time frame, and additional filters for the insights in the bundle. #### Standard bundle types In the request, you configure the type of insight **bundle** that should be provided for a metric. Types include: - `ban` - Shows the current aggregated value for a metric, period over period change, and the highest ranked insight for each filterable dimension of the metric. - `springboard` - Shows the current value, period over period change, and the highest ranked insight for the metric. - `basic` - Similar to a springboard insight, but data is focused on the dimensions of a metric that are low bandwidth because they have small value sets. It shows the current value, period over period change, and the highest ranked insight for the metric for that data. - `exploration` - Focuses on performance trends. Provides insights into the metric’s behavior over time, including summary visualizations of highs, lows, and trends, plus follow-up insights based on top-ranked data. - `breakdown` - Focuses on attribution. Provides detailed breakdowns of the top contributors for each filterable dimension of the metric. #### Legacy bundle type - `detail` - Shows insights on performance over time of the metric, a summary visualization of metric highs and lows and trends, breakdowns of top contributors for each filterable dimension of the metric, and followup insights based on the top ranked insights not already presented. While the `detail` type remains supported, we recommend using a combination of `exploration` and `breakdown` bundles instead. > **Process suggestion:** Bundles are rich and complex objects that can be challenging to build manually. One approach to efficiently create the JSON for a bundle is to use the Tableau user interface to create the form of metric definition and metrics you want to produce programmatically. Then you can navigate to a metric and use your browsers' inspector to view and copy the JSON response for the insight bundle. You can use the JSON directly or as a template in your code. ### Insight types Depending on the type of insight bundle you request and the shape of your data source, some or all of the following types of insights will be returned. | Name | Description | | --- | --- | | Period over Period Change | Shows how a metric has changed between two periods. Highlights the change between a metric value for a recent time range compared to an equivalent time range in a prior period or the past. | | Forecast (Tableau+ license edition required) | `INSIGHT_TYPE_METRIC_FORECAST` Shows the expected values for a metric for the remainder of the period, along with a forecast confidence range. Forecasts are calculated based on historical metric data and appear on the overview chart for a metric only if Tableau Pulse is confident in the forecast. Forecast confidence is affected by data quality, variance, and recency and the number of date periods to be forecast. You can see a low-confidence forecast by using the Ask button on a metric's insights exploration page. | | Concentrated Contribution Alert (Risky Monopoly) | `INSIGHT_TYPE_RISKY_MONOPOLY` Shows when a small number of dimension members make up a majority (50% or more) of the contribution to a metric. Shows dimensions with a concentration of very high values. A risky monopoly is a situation when a small number of dimension members make up a majority (50% or more) of the contribution to a metric. | | Correlated Metrics | `INSIGHT_TYPE_CORRELATED_METRIC` Shows a relationship between two metrics based on candidates that are considered for correlation. | | Top Contributors | `INSIGHT_TYPE_TOP_DIMENSION_MEMBER_MOVERS` Shows the highest values in a dimension for a metric within a given time range. A top contributor is a dimension member that ranks in the top N in contribution to the scoped metric’s value, aggregated on a specified time range. | | Bottom Contributors | `INSIGHT_TYPE_BOTTOM_CONTRIBUTORS` Shows the lowest values in a dimension for a metric within a given time range. A bottom contributor is a dimension member that ranks in the bottom N in contribution to the scoped metric’s value, aggregated on a specified time range. | | Top Drivers | `INSIGHT_TYPE_TOP_DRIVERS` Shows values for dimension members that changed the most in the same direction as the observed change in the metric. Shows the values for a metric that increased the most across a specified time offset. A top driver is a dimension member that ranks in the top N in driving a change in a metric value between two separate but equivalent time ranges. Top drivers are analyzed using metric values from two separate but equivalent time ranges (such as Sales for day of October 2 versus Sales for day of October 3) to look for changes to the contributions in the same direction of the change made by dimension members. | | Top Detractors | `INSIGHT_TYPE_TOP_DETRACTORS` Shows values for dimension members that changed the most in the opposite direction to the observed change in the metric. Shows values for a metric that are most opposed to top drivers decreased the most across a specified time offset. A top detractor is a dimension member that ranks in the bottom N in driving a change in a metric value between two separate but equivalent time ranges. This insight's values oppose the observed change the most. Top detractors are analyzed using metric values from two separate but equivalent time ranges (such as Sales for day of October 2 versus Sales for day of October 3) to look for changes to the contributions in the same direction of the change made by dimension members. | | Unusually High/Low Metric value | `INSIGHT_TYPE_UNUSUAL_CHANGE` Shows unexpected changes in a metric value. Shows when the value of a metric for a given time range is higher or lower than the expected range based on historic observations of the metric. This insight highlights when the value of a metric for a given time range is higher or lower than the expected range based on historic observations of the metric. | | New Trend Detected | `INSIGHT_TYPE_NEW_TREND` Shows new trends that vary significantly from the current trend. This insight communicates the rate of change, direction, and fluctuations for the metric value. | | Outliers | `INSIGHT_TYPE_RECORD_LEVEL_OUTLIERS` Shows values that fell outside of the range of most of the rest of the values for a metric. | | Goal and Threshold Breakdown | `INSIGHT_TYPE_BREAKDOWN_BENCHMARK` Shows the progress to goal or threshold on the breakdown chart for a metric. | | Pace to Goal (Tableau+ license edition required) | `INSIGHT_TYPE_PACE_TO_GOAL` Shows whether a metric with a sum or count aggregation is on track to reach its goal by the end of the period. Requires Forecast insight to be on. Can be turned on or off in the Insights tab in metric definition settings. If you turn off the Forecast insight, the Pace to Goal insight is also turned off. | For more detailed information on the types of insights, see [The Insights Platform and Insight Types in Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_insights_platform_insight_types.htm). ### What do Pulse REST API methods enable? > Metric definitions > > - Create, update, and delete metric definitions > - Get a list of metric definitions for a site > - Get a list of metrics for a metric definition > - Get a specified batch of metric definitions > > Metrics > > - Get the details of a metric > - Get a metric if it exists or create it if it doesn't > - Create, update, and delete a metric > - Get a specified batch of metrics > > Metric Insights > > - Generate a basic insight bundle for a metric > - Generate a springboard insight bundle for a metric > - Generate a detail insight bundle for a metric > > Metric Subscriptions > > - Get the details of a subscription to a metric > - Get a list of subscriptions to a metric for a user > - Create or delete a subscription to a metric > - Update the followers of a metric > - Get a specified batch of subscriptions to a metric > - Create subscriptions for a batch of users or groups to a metric > - Get a count of followers for a specified batch of subscriptions to a metric ## 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: [Pulse Methods](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-055c50d6-043e-46e4-96ea-ad3351f70778) ## List site alerts List the alerts for the authorized user user on a specified site. **Version:** Available in API 3.25 (Tableau Cloud March 2025 / Server 2025.1) 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) **Permissions:** Any users can list the alerts for sites that they administer. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights\_alerts:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/alerts [view details](#) ## Generate insight brief Generates an insight brief based on a user utterance by gathering insights for the specified metrics. For supplemental information, see **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_brief:create\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/brief [view details](#) ## Generate metric card image Generates a PNG image of a Pulse metric card with full visual parity to the web UI homepage. **Version:** Available in API 3.29 (Tableau Cloud June 2026) 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) **Permissions:** Can be called by any user. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/images/metricCard [view details](#) ## Batch list metric definitions (few) Gets the details of a batch of metric definitions and metrics on a site, specified in a brief comma delimited list of LUIDs. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/definitions:batchGet [view details](#) ## Batch list metric definitions (many) Gets the details of a batch of definitions specified in a comma delimited list of LUIDs. This method is optimized for batches with large numbers of definitions. **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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) **Permissions:** Any user can make this request but users will see results only for metrics they have permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/definitions:batchGet [view details](#) ## Batch list metrics (few) Gets a batch of metrics from a definition, specified in a comma delimited list. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can get a batch of metrics as long as the user has read or connect access to the data source used in the definition that contains them. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\` Access Scopes Overview: [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/metrics:batchGet [view details](#) ## Batch list metrics (many) Gets batches of metrics available on a server. Only metrics a user has privileges to view will be visible. This endpoint uses POST as an alternative to GET, where long lists of URL parameters could be problematic. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can get a batch of metrics as long as the user has read or connect access to the data source used in the definition that contains them. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\` Access Scopes Overview: [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/metrics:batchGet [view details](#) ## Create metric definition Creates a metric definition. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions:create\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/definitions [view details](#) ## Create metric Creates a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:create\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/metrics [view details](#) ## Create metric tag for user Creates a tag for the specified metric, for the signed in user. **Version:** Available in API 3.25 (Tableau Cloud March 2025) 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) **Permissions:** Anyone can make this request but users will see results only for metrics they have permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/metrics/{metric\_id}/tag [view details](#) ## Delete metric definition Deletes a metric definition. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can delete a metric definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions:delete\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/pulse/definitions/{definition\_id} [view details](#) ## Delete metric Deletes a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can delete a metric from a definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:delete\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/pulse/metrics/{metric\_id} [view details](#) ## Delete metric tag Deletes the specified metric tag. **Version:** Available in API 3.25 (Tableau Cloud March 2025) 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) **Permissions:** Anyone can make this request but users will see results only for metrics they have permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/pulse/metrics/{metric\_id}/tag/{tag\_id} [view details](#) ## Get metric definition Gets a metric definition and optionally metrics it contains. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/definitions/{definition\_id} [view details](#) ## Get site entitlements Returns entitlements available for a site. If entitlements are True, then Pulse premium features are enabled for the site. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Can be called by any user, but only details about sited the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:entitlements:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/entitlements [view details](#) ## Get metric Gets the details of the specified metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can update a metric if they have both write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/metrics/{metric\_id} [view details](#) ## Get or create metric Returns the details of a metric in a definition if it exists, or creates a new metric if it does not. Also returns 'true' if a new metric was created, or 'false' if it already existed. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:create\` Access Scopes Overview: [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/metrics:getOrCreate [view details](#) ## List metric definitions Lists the metric definitions configured for a site or, optionally, the details and definition for a specific metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:insight\_definitions\_metrics:read Access [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/definitions [view details](#) ## Lists all definition tags for the site. Lists all definition tags for the site. Results can be filtered by tag value, definition name, or datasource ID. Each result includes the tag value and a count of how many definitions use it. **Version:** Available in API 3.29 (Tableau Cloud August 2026) 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) **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/definitions/tags [view details](#) ## List metrics in definition Lists the metrics contained in a metric definition. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/definitions/{definition\_id}/metrics [view details](#) ## Update metric definition Updates a metric definition. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can update a metric definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions:update\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/-/pulse/definitions/{definition\_id} [view details](#) ## Update metric Updates the specification of a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:update\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/-/pulse/metrics/{metric\_id} [view details](#) ## Generate basic insight bundle Generates a basic insight bundle. **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/basic [view details](#) ## Generate breakdown insight bundle Generates a breakdown insight bundle. This provides the BAN and breakdown groups of insights. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/breakdown [view details](#) ## Generate current metric value insight bundle Generates a bundle the current aggregated value for each metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/ban [view details](#) ## Generate detail insight bundle Generates a detail insight bundle. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. For the [usage-based licensing model](https://help.tableau.com/current/online/en-us/license_product_keys.htm#usagebased-license-model), each call to this method counts as an analytical impression. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/detail [view details](#) ## Generate exploration insight bundle Generates an exploration insight bundle. This provides the BAN, anchor, and followup groups of insights. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/exploration [view details](#) ## Generate springboard insight bundle Generates a springboard insight bundle. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/springboard [view details](#) ## List metric definition measurement periods Gets the measurement periods for the specified metric definition. **Version:** Available in API 3.25 (Tableau Cloud March 2025 / Server 2025.1) 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) **Permissions:** Can only be called by users with site or server administrator permissions.[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:content:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/measurementPeriods [view details](#) ## Batch create Pulse subscriptions Creates multiple subscriptions to a metric for specified users and/or groups. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can create subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:create\` Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/subscriptions:batchCreate [view details](#) ## Batch get Pulse subscriber counts Gets the number of unique users subscribed to a set of metrics specified in a comma separated list of metric LUIDs. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can create subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:read\` Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/subscriptions:batchGetMetricFollowerCounts [view details](#) ## Batch get Pulse subscriptions Gets a batch of subscriptions, specified in a comma delimited list of subscriptions LUIDs. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can get the details of subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:read\` Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/subscriptions:batchGet [view details](#) ## Create subscription Creates a subscription to a specified metric for a specified user or group. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can create subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:create\` Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/subscriptions [view details](#) ## Delete Pulse subscription Deletes a specified subscription to a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can delete subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:delete\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/pulse/subscriptions/{id} [view details](#) ## Gets recommended metrics Gets personalized groups of metrics to recommend to a user. Only metric that the user has privileges to view will be returned. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can get a batch of metrics as long as the user has read or connect access to the data source used in the definition that contains them. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\` Access Scopes Overview: [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/metrics:recommended [view details](#) ## Get Pulse subscription Gets a specified subscription to a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can get the details of a subscription. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/subscriptions/{id} [view details](#) ## List Pulse user preferences Gets the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI. **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can get the details of subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:user\_preferences:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/user/preferences [view details](#) ## List followed metrics groups Gets the user's followed metrics. Optionally metrics can be grouped by characteristics like datasource, and sorted. **Version:** Available in API 3.23 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/metrics:followedMetricsGroups [view details](#) ## List subscriptions Lists the subscriptions to a specified metric and/or for a specified user. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can list subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:metric\_subscriptions:read Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/subscriptions [view details](#) ## Update Pulse user preferences Updates the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI. **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can get the details of subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:user\_preferences:update\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/-/pulse/user/preferences [view details](#) [Skip to main content](#main-content) # Recycle Bin Methods The Recycle Bin methods of the Tableau REST API allow you to manage Recycle Bin content on your site. Using these methods you can: - **List Recycle Bin content:** Retrieve a list workbooks, data sources, flows, or projects in the Recycle Bin. Supports paging, filtering, and sorting. - **Get Recycle Bin content:** Retrieve details for a specific content item in the Recycle Bin. - **Restore Recycle Bin content:** Restore a single content item from the Recycle Bin to a specified project. - **Delete Recycle Bin content:** Permanently delete a single Recycle Bin content item or empty the entire Recycle Bin for a site. These methods are available starting in API version 3.29. For more information about the recycle bin, see [Manage the Recycle Bin](https://help.tableau.com/current/online/en-us/recycle_bin.htm). ## Delete All Recycle Bin Contents Permanently deletes all content in a site's Recycle Bin . **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2). **License**: No additional license required. **Permissions**: Server administrators, site administrators, or other users. **Access Scope**: `tableau:recyclebin_content:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Administrators delete all content in the site's Recycle Bin. Other users only delete content they own. For information about how content properties change when it's deleted or restored. See [Recycle Bin](https://help.tableau.com/current/pro/desktop/en-us/recycle_bin.htm). #### URI DELETE /api/api-version/sites/site-id/recyclebin DELETE /api/api-version/sites/site-id/recyclebin?asJob=asJob-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the Recycle Bin.
as-job-value(Optional) If true, runs as an asynchronous job. Returns job information instead of executing synchronously. Default is false. Check the status of the job by calling Query Job.
#### Request Body None #### Response Code 204 with synchronous execution (when query parameter asJob is false) 202 with asynchronous execution (when query parameter asJob is true and an `EmptyRecycleBin` job is created) #### Response Body No response body with synchronous execution(when query parameter asJob is false) Returns a job object with asynchronous execution (when query parameter asJob is true and an `EmptyRecycleBin` job is created): Datetime fields are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). ``` ``` ``` { "job":{ "id":"12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "mode":"Asynchronous", "type":"EmptyRecycleBin", "progress":"0", "createdAt":"2026-05-22T02:37:30Z", "finishCode":"1" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestCheck the request body and query string parameters.
401401000No auth credentialsCheck the authorization header.
401401002UnauthorizedSession expired or invalid.
403403004Operation on resource unauthorizedCheck user permission.
403403157Feature disabledRecycle Bin disabled.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Method not allowedRequest type unrecognized for this method.
406406000Unacceptable media typeBad Accept: header.
409409004Invalid parameterParameter type-mismatched, unknown content type, or malformed LUID.
429429000Too many requestsRequest throttled.
500500000Internal server errorUnknown error.
503500001Internal service errorInternal service error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Recycle Bin Content Item Permanently deletes the specified Recycle Bin content item. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2). **License**: No additional license required. **Permissions**: Server administrators, site administrators, or other users. **Access Scope**: `tableau:recyclebin_content:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Administrators can delete any content in the site's Recycle Bin. Other users can only delete content they own. For information about how content properties change when it's deleted or restored. See [Recycle Bin](https://help.tableau.com/current/pro/desktop/en-us/recycle_bin.htm). #### URI DELETE /api/api-version/sites/site-id/recyclebin/content-type/content-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the Recycle Bin.
content-typeContent type in plural form: workbooks, datasources, flows, or projects.
content-idThe LUID of the Recycle Bin content item to delete.
#### Request Body None #### Response Code 204 #### Response Body None #### Version Version 3.29 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestCheck the request body and query string parameters.
401401000No auth credentialsCheck the authorization header.
401401002Invalid auth credentialsSession expired or invalid.
403403004Operation on resource unauthorizedCheck user permission.
403403157Feature disabledRecycle Bin disabled.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404003Unknown resourceRequested content item not found.
405405000Method not allowedRequest type unrecognized for this method.
406406000Unacceptable media typeBad Accept: header.
409409004Invalid parameterParameter type-mismatched, unknown content type, or malformed LUID.
429429000Too many requestsRequest throttled.
500500000Internal server errorUnknown error.
503500001Internal service errorInternal service error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Recycle Bin Content Item Returns information about the specified Recycle Bin content item. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2). **License**: No additional license required. **Permissions**: Server administrators, site administrators, or other users. **Access Scope**: `tableau:recyclebin_content:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Administrators can see any content in the site's Recycle Bin. Other users can only see the content they own. #### URI GET /api/api-version/sites/site-id/recyclebin/content-type/content-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the Recycle Bin.
content-typeContent type in plural form: workbooks, datasources, flows, or projects.
content-idThe LUID of the recycle bin content item.
#### Request Body None #### Response Code 200 #### Response Body { "contentItems": { "contentItem": \[ { "owner": { "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" }, "deleter": { "id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" }, "id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "name": "Rocket Trajectories", "contentType": "workbook", "createdAt": "2026-05-22T02:50:20Z", "updatedAt": "2026-05-22T02:51:04Z", "originalPath": "Physics", "isReadOnly": false } \] } } Datetime fields are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.29 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestCheck the request body and query string parameters.
401401000No auth credentialsCheck the authorization header.
401401002Invalid auth credentialsSession expired or invalid.
403403004Operation on resource unauthorizedCheck user permission.
403403157Feature disabledRecycle Bin disabled.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404003Unknown resourceRequested content item not found.
405405000Method not allowedRequest type unrecognized for this method.
406406000Unacceptable media typeBad Accept: header.
409409004Invalid parameterParameter type-mismatched, unknown content type, or malformed LUID.
429429000Too many requestsRequest throttled.
500500000Internal server errorUnknown error.
503500001Internal service errorInternal service error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Recycle Bin Content by Type Gets a list of Recycle Bin content of the specified type. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2). **License**: No additional license required. **Permissions**: Server administrators, site administrators, or other users. **Access Scope**: `tableau:recyclebin_content:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Administrators can see all content in the site's Recycle Bin. Other users can only see the content they own. This method supports filtering, sorting, and pagination. #### URI GET /api/api-version/sites/site-id/recyclebin/content-type GET /api/api-version/sites/site-id/recyclebin/content-type?filter=filter-expression GET /api/api-version/sites/site-id/recyclebin/content-type?sort=sort-expression GET /api/api-version/sites/site-id/recyclebin/content-type?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the Recycle Bin.
content-typeContent type in plural form: workbooks, datasources, flows, or projects.
filter-expression(Optional) An expression that lets you specify a subset of recycle bin content to return. You can filter on predefined fields such as name, ownerId, deleterId, createdAt, updatedAt, and path. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which recycle bin content information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Response Code 200 #### Response Body { "pagination": { "pageNumber": "1", "pageSize": "100", "totalAvailable": "1" }, "contentItems": { "contentItem": \[ { "owner": { "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" }, "deleter": { "id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" }, "id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "name": "Sales workbook", "contentType": "workbook", "createdAt": "2026-05-22T02:50:20Z", "updatedAt": "2026-05-22T02:51:04Z", "originalPath": "Business", "isReadOnly": false } \] } } Datetime fields are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.29 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestCheck the request body and query string parameters.
401401000No auth credentialsCheck the authorization header.
401401002Invalid auth credentialsSession expired or invalid.
403403004Operation on resource unauthorizedCheck user permission.
403403157Feature disabledRecycle Bin disabled.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Method not allowedRequest type unrecognized for this method.
406406000Unacceptable media typeBad Accept: header.
409409004Invalid parameterParameter type-mismatched, unknown content type, or malformed LUID.
429429000Too many requestsRequest throttled.
500500000Internal server errorUnknown error.
503500001Internal service errorInternal service error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Restore Recycle Bin Content Item Restores the specified content item from the Recycle Bin to a project. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2). **License**: No additional license required. **Permissions**: Server administrators, site administrators, or other users. The calling user also needs Publish permission for the project they're restoring content to. **Access Scope**: `tableau:recyclebin_content:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Administrators can restore any content from the site's Recycle Bin. Other users can only restore content they own, and need Publish permission for the project they're restoring to. For information about how content properties change when it's deleted or restored. See [Recycle Bin](https://help.tableau.com/current/pro/desktop/en-us/recycle_bin.htm). #### URI POST /api/api-version/sites/site-id/recyclebin/content-type/content-id/restore?projectId=project-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site that contains the Recycle Bin.
content-typeContent type in plural form: workbooks, datasources, flows, or projects.
content-idThe LUID of the recycle bin content item to restore.
project-idThe LUID of the project to restore the content to.
#### Request Body None #### Response Code 204 #### Response Body None #### Version Version 3.29 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestCheck the request body and query string parameters.
401401000No auth credentialsCheck the authorization header.
401401002Invalid auth credentialsSession expired or invalid.
403403004Operation on resource unauthorizedCheck user permission.
403403008Insufficient site storage remainingRestore would exceed site storage quota.
403403157Feature disabledRecycle Bin disabled.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404003Unknown resourceRequested content item not found.
405405000Method not allowedRequest type unrecognized for this method.
406406000Unacceptable media typeBad Accept: header.
409409004Invalid parameterParameter type-mismatched, unknown content type, or malformed LUID.
429429000Too many requestsRequest throttled.
500500000Internal server errorUnknown error.
503500001Internal service errorInternal service error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # API Reference—All Methods Using the Tableau Server REST API, you can manage and change Tableau Server resources programmatically, via HTTP. The API gives you simple access to the functionality behind the data sources, projects, workbooks, site users, and sites on a Tableau server. You can use this access to create your own custom applications or to script interactions with Tableau Server resources. - On this page, use the [API Method Categories list](#api-method-categories), or find keywords in the [API Method Details list](#api-method-details) with **ctrl/cmd-f** search. - For more information, see [Fundamentals of the Tableau Server REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm) and [REST API Example Requests](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_example_requests.htm). **Note:** For help with your code that uses the Tableau REST API, submit questions and ask for help on the [Tableau developer community forums](https://community.tableau.com/s/topic/0TO4T000000QF8eWAG/developers). For potential bugs in the Tableau REST API code itself, and for any issue with unmodified sample code we provide, use the feedback widget at the bottom of API reference pages. ## API Method Categories The following table lists the Tableau Server REST API methods by category. The table also indicates which methods can be used with Tableau Cloud. Analytics Extensions Settings Methods
Add analytics extension connection to siteAdds a new analytics extension connection for an external service to a site.
Delete analytics extension connection from siteDeletes a specific analytics extension connection for an external service from a site.
Enable or disable analytics extensions on server
- Not available for Tableau Cloud
Enables or disables analytics extensions on a server.
Get analytics extension detailsGet the details of a specified analytics extension connection to an external service.
Get current analytics extension for workbookGets basic details, including connection type and name, of the analytics extension connection to an external service that the specified workbook is currently using.
Get enabled state of analytics extensions on server
- Not available for Tableau Cloud
Gets the enabled/disabled state of analytics extensions on a server.
Get enabled state of analytics extensions on siteGets the enabled/disabled state of analytics extensions on a site.
List analytics extension connections of workbookLists basic details of each analytics extension connection available for a specified workbook, including connection type and name.
List analytics extension connections on siteLists a site's analytics extension connections for external services.
Remove current analytics extension connection for workbookRemove the currently used analytics extension connection to an external service from the specified workbook. The connection remains configured, and is available for further usage by the workbook.
Update analytics extension connection of siteUpdates the details of specified analytics extension connection for an external service to a site.
Update analytics extension for workbookUpdates the analytics extension connection to external service currently used by a workbook.
Update enabled state of analytics extensions on siteEnables or disables analytics extensions on a site.
Ask Data Lens Methods - Retired
Create ask data lens - Retired in API 3.22Create an ask data lens.
Delete ask data lens - Retired in API 3.22Delete an ask data lens.
Get ask data lens - Retired in API 3.22Get the details of the specified ask data lens.
Import ask data lens - Retired in API 3.22Import an existing ask data lens on a server to a site, and optionally transform the metadata of the lens in the process.
List ask data lenses in site - Retired in API 3.22Returns a list of ask data lenses in a site.
Authentication Methods
List Personal Access Tokens
- Not available for Tableau Server.
List all personal access tokens (PATs). If you're a site admin, list PATs of a user when you are the site admin on all sites that the PAT owner is a member of.
Revoke Administrator Personal Access Tokens
- Not available for Tableau Cloud.
Revokes all personal access tokens (PATs) created by server administrators. This method is not available for Tableau Cloud.
Revoke Personal Access Token
- Not available for Tableau Server.
Revoke a personal access token (PAT). If you're a site admin, you can revoke a users PAT owhen you are the site admin on all sites that the PAT owner is a member of.
Sign InSigns you in as a user on the specified site on Tableau Server or Tableau Cloud.
Sign OutSigns you out of the current session. This call invalidates the authentication token that is created by a call to Sign In.
Switch Site
- Not available for Tableau Cloud.
Switches you onto another site without having to provide a user name and password again.
Bridge Methods
Add Domain to Pool
- Not available for Tableau Server.
Associates a domain with a specific Bridge pool, allowing Bridge clients from that domain to use the pool.
Add Projects to Routing Rule
- Not available for Tableau Server.
Adds one or more project filtering conditions to an existing allow rule, narrowing the rule so it applies only to the listed projects.
Block Domain
- Not available for Tableau Server.
Blocks a domain from being used with any Bridge pool, preventing Bridge clients from that domain from connecting.
Create Bridge Pool
- Not available for Tableau Server.
Creates a new Bridge pool with the specified name.
Create Routing Rule
- Not available for Tableau Server.
Creates a Bridge routing rule for a site.
Delete Bridge Client
- Not available for Tableau Server.
Permanently removes a Bridge client from the site.
Delete Bridge Pool
- Not available for Tableau Server.
Permanently deletes a Bridge pool and all its associated domain mappings.
Delete Domain
- Not available for Tableau Server.
Removes a domain mapping from the system.
Delete Routing Rule
- Not available for Tableau Server.
Permanently deletes a Bridge routing rule identified by its ID.
Get Bridge Client
- Not available for Tableau Server.
Retrieves detailed information about a single Bridge client.
Get Domain Mapping
- Not available for Tableau Server.
Retrieves information about all domain mappings for the site, including pool assignment and status (ALLOWED or BLOCKED).
Get Routing Rule
- Not available for Tableau Server.
Returns a single Bridge routing rule identified by its ID.
Get Routing Rules
- Not available for Tableau Server.
Returns all Bridge routing rules for the site.
List Bridge Clients
- Not available for Tableau Server.
Retrieves a list of all Bridge clients for a specific site, with optional filtering by pool.
List Bridge Pools
- Not available for Tableau Server.
Retrieves a list of all Bridge pools for the specified site, including pool details and associated domain mappings.
Move Bridge Client
- Not available for Tableau Server.
Moves a Bridge client between pools or to unassigned status.
Remove Projects from Routing Rule
- Not available for Tableau Server.
Removes one or more project filtering conditions from an existing allow rule, broadening the rule so it no longer applies only to those projects.
Update Bridge Pool
- Not available for Tableau Server.
Updates the display name of an existing Bridge pool.
Update Domain Among Pools
- Not available for Tableau Server.
Moves a domain from its current pool to a different pool.
Update Domain Name
- Not available for Tableau Server.
Updates an existing domain mapping by renaming the domain.
Update Routing Rule
- Not available for Tableau Server.
Partially updates an existing Bridge routing rule.
Collections Methods
Add Collection PermissionsAdds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call.
Add items to a collectionAdds items to a collection.
Batch update collectionsBatch updates collections.
Create a collectionCreates a new collection.
Delete Collection PermissionRemoves the specified collection permission for the specified group or user.
Delete collectionsDeletes collections.
Delete collectionsDeletes collections.
Get details of a collectionGets the details of a collection.
List Collection PermissionsReturns a list of permissions for a specific collection.
List collectionsLists collections.
List items in a collectionLists items in a collection.
Remove items from a collectionRemoves items from a collection.
Reorder items in a collectionReorders items in a collection.
Connected App Methods
Create Connected AppCreate a connected app.
Create Connected App SecretGenerate a secret for a connected app.
Delete Connected AppPermanently remove a connected app.
Delete Connected App SecretPermanently remove a secret associated with a connected app.
Delete EASDelete a registered external authorization server (EAS).
Get Connected AppQuery a connected app by its ID.
Get Connected App SecretQuery a connected app secret and the token value using the connected app's ID.
List All Registered EASGet all external authorization servers (EASs) registered to a site.
List Connected AppsQuery all connected apps configured on a site.
List Registered EASGet an external authorization server (EAS) registered to a site.
Register EASCreate a connected app with OAuth 2.0 trust by registering an external authorization server (EAS) to a site.
Update Connected AppUpdate a connected app.
Update EAS
- Not available for Tableau Server.
Update a connected app with OAuth 2.0 trust.
Content Exploration Methods
Get batch content usage statistics
- Not available for Tableau Server
Gets usage statistics for multiple content items. The batch of can include multiple content types.
Get content search resultsSearches across all supported content types for objects relevant to the search expression specified in the querystring of the request URI.
Get Content SuggestionsReturns a specified number of suggestions for auto-completion of user input as they type. You can specify content types of suggestions and prioritize recently viewed content.
Get usage statistics for content item
- Not available for Tableau Server
Gets the usage statistics for a Tableau content item, specified by LUID and content type, such as workbook, datasource, or flow.
Custom Domain Methods
Create custom domain settings
- Not available for Tableau Server
Starts the process of custom domain setup for a Tableau site.
Delete custom domain settings
- Not available for Tableau Server
Deletes the custom domain setup for a Tableau site.
Get Custom Domain Name
- Not available for Tableau Server
Gets the custom domain for a Tableau site, if one is provisioned. For more information about how, see.
Get custom domain settings
- Not available for Tableau Server
Gets the custom domain settings for a Tableau site.
Update custom domain settings
- Not available for Tableau Server
Updates the custom domain setup for a Tableau site.
Dashboard Extensions Settings Methods - Retired
Allow dashboard extension on site - Retired in API 3.21Adds a dashboard extension to the safe list of the site you are signed into.
Block dashboard extension on server - Retired in API 3.21
- Not available for Tableau Cloud
Adds a dashboard extension to the block list of a server.
Disallow dashboard extension on site - Retired in API 3.21Deletes a specific dashboard extension from the safe list of the site you are signed into.
Get allowed dashboard extension on site - Retired in API 3.21Gets the details of a specific dashboard extension on the safe list of the site you are signed into.
Get blocked dashboard extension on server - Retired in API 3.21
- Not available for Tableau Cloud
Gets the details of a specific dashboard extension on the blocked list of a server.
List allowed dashboard extensions on site - Retired in API 3.21Lists the dashboard extensions on the safe list of the site you are signed into.
List blocked dashboard extensions on server - Retired in API 3.21
- Not available for Tableau Cloud
Lists the dashboard extensions on the blocked list of a server.
List dashboard extension settings of site - Retired in API 3.21Lists the dashboard extension settings of the site you are signed into.
List settings for dashboard extensions on server - Retired in API 3.21
- Not available for Tableau Cloud
Lists the dashboard extension settings of a server.
Unblock dashboard extension on server - Retired in API 3.21
- Not available for Tableau Cloud
Deletes a specific extension from the block list of a server.
Update dashboard extension settings of site - Retired in API 3.21Updates the settings for dashboard extensions for the site you are signed into.
Update dashboard extensions settings of server - Retired in API 3.21
- Not available for Tableau Cloud
Updates the settings for dashboard extensions of a server.
Update settings for allowed dashboard extension on site - Retired in API 3.21Updates the settings of a specific dashboard extension in the safe list of the site you are signed into.
Data Sources Methods
Add Tags to Data SourceAdds one or more tags to the specified data source.
Add Work Copy ElementsAdds field descriptions or table descriptions to a work copy. Returns HTTP 201 when every element is added. The success body omits the elements that succeeded.
Create Work CopyCreates a work copy of a published data source and returns the work copy LUID. Composable data sources and Semantic Data Model (SDM) data sources are not supported. The call is rejected when the caller already has the maximum number of open work copies.
Delete Data SourceDeletes the specified data source from a site. When a data source is deleted, its associated data connection is also deleted. Workbooks that use the data source are not deleted, but they will no longer work properly.
Delete Tag from Data SourceDeletes a tag from the specified data source.
Delete Work Copy ElementsDeletes elements from a work copy. Send elementType and name for each element. Other content is ignored. Returns HTTP 200 when every element is deleted. The success body omits the elements that succeeded.
Download Data SourceDownloads a data source in .tdsx format.
Download Data Source Encrypted KeychainGets an encrypted version of the embedded credentials from the data source. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server.
Download Data Source RevisionDownloads a specific version of a data source prior to the current one in .tdsx format. To down load the current version of a data source use the Download Data Source method.
Get Data Source RevisionsReturns a list of revision information (history) for the specified data source.
Publish Data SourcePublishes a data source on the specified site, or appends data to an existing data source.
Publish Work CopyPublishes a work copy as a data source. Send the published data source name and an optional description. The response returns the new data source LUID. A blank name is rejected.
Query Data SourceReturns information about the specified data source.
Query Data Source ConnectionsReturns a list of data connections for the specified data source.
Query Data SourcesReturns a list of published data sources on the specified site, with optional parameters for specifying the paging of large results. To get a list of data sources embedded in a workbook, use the Query Workbook Connections method.
Read Data Source ElementsReads columns, field descriptions, or table descriptions from a published data source. Set elementType to the kind of element, and optionally set name to read one element.
Read Work Copy ElementsReads columns, field descriptions, or table descriptions from a work copy. Set elementType to the kind of element, and optionally set name to read one element.
Remove Data Source RevisionRemoves a specific version of a data source from the specified site.
Update Data in Hyper ConnectionIncrementally updates data (insert, update, upsert, replace and delete) in a published data source from a live-to-Hyper connection, where the data source has multiple connections.
Update Data in Hyper Data SourceIncrementally updates data (insert, update, upsert, replace and delete) in a published data source from a live-to-Hyper connection, where the data source has a single connection.
Update Data SourceUpdates the owner, project or certification status of the specified data source.
Update Data Source ConnectionUpdates the server address, port, authentication type, username, or password for the specified data source connection.
Update Data Source ConnectionsUpdates the server address, port, authentication type, username, or password for one or more connections in a data source. To update all connections in a given data source with the same connection information, see Update Data Source Connection.
Update Data Source NowRuns an extract refresh on the specified data source.
Update Work Copy ElementsUpdates columns, field descriptions, or table descriptions on a work copy. Returns HTTP 200 when every element is updated. The success body omits the elements that succeeded.
Upload Data Source Encrypted KeychainUploads the encrypted version of the embedded credentials. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site.
Extract and Encryption Methods
Create an Extract for a Data SourceCreate an extract for a data source in a site. Optionally, encrypt the extract if the site and workbooks using it are configured to allow it.
Create Cloud Extract Refresh Task
- Not available for Tableau Server.
Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection.
For Tableau Server, see Add data source to server schedule, Add workbook to server schedule, and Add virtual connection to server schedule.
Create Extracts for Embedded Data Sources in a WorkbookCreate extracts for all embedded data sources of a workbook. Optionally, encrypt the extracts if the site and workbook using them are configured to allow it.
Decrypt Extracts in a SiteExtract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see Extract Encryption at Rest.
Delete Extract from Data SourceDelete the extract from a data source.
Delete Extract Refresh TaskDeletes the specified extract refresh task on Tableau Server or Tableau Cloud.
Delete Extracts from Virtual Connection
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Deletes the extracts from a virtual connection, which changes it from extract to live mode.
Delete Extracts of Embedded Data Sources from a WorkbookDelete all extracts of embedded data sources in a workbook.
Encrypt Extracts in a SiteExtract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see Extract Encryption at Rest.
Get Extract Refresh TaskReturns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection.
List Extract Refresh Tasks in Server Schedule
- Not available for Tableau Cloud.
Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server.
List Extract Refresh Tasks in SiteReturns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections.
Reencrypt Extracts in a SiteExtract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see Extract Encryption at Rest.
Run Extract Refresh TaskRuns the specified extract refresh task.
Update Cloud Extract Refresh Task
- Not available for Tableau Server.
Updates an extract refresh task on Tableau Cloud.
Favorites Methods
Add Data Source to FavoritesAdds the specified data source to the user's favorites.
Add Flow to FavoritesAdds the specified flow to the user's favorites.
Add Metric to Favorites - Retired in API 3.22Adds the specified metric to the user's favorites.
Add Project to FavoritesAdds the specified project to a user's favorites.
Add View to FavoritesAdds the specified view to a user's favorites.
Add Workbook to FavoritesAdds the specified workbook to a user's favorites.
Delete Data Source from FavoritesDeletes the specified data source from the user's favorites. If the specified data source is not a favorite, the operation has no effect.
Delete Flow from FavoritesDeletes the specified flow from the user's favorites. If the specified flow is not a favorite, the operation has no effect.
Delete Project from FavoritesDeletes the specified project from the user's favorites. If the specified project is not a favorite, the operation has no effect.
Delete View from FavoritesDeletes the specified view from user's favorites. If the specified view is not a favorite, the operation has no effect.
Delete Workbook from FavoritesDeletes a workbook from a user's favorites. If the specified workbook is not a favorite of the specified user, this call has no effect.
Get Favorites for UserReturns a list of favorite projects, data sources, views, workbooks, and flows for a user.
Organize FavoritesMove an item to organize a user's favorites.
Flow Methods
Add Flow PermissionsAdds permissions to the specified flow for a Tableau Server user or group. You can specify multiple sets of permissions using one call.
Add Flow Task to Server ScheduleThe Add Flow Task to Schedule method is renamed and retired for Tableau Cloud in API 3.22 (Tableau Cloud March 2024). It will remain available for Tableau Server only. For Tableau Cloud in March 2024, this method will be replaced with Create Cloud Flow Task method.
Cancel Flow RunCancels a flow run that is in progress.
Create Cloud Flow Task
- Not available for Tableau Server. Available only with a Data Management license.
Creates a flow task on Tableau Cloud, and set its schedule.
Delete FlowDeletes a flow. When a flow is deleted, its associated connections, the output and input steps, any associated scheduled tasks, and run history are also deleted.
Delete Flow PermissionDeletes the specified permission from the specified flow for a group or user.
Download FlowDownloads a flow in .tfl or .tflx format.
Download Flow Encrypted KeychainGets an encrypted version of the embedded credentials in a flow. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server.
Get Flow RunGets a flow run.
Get Flow Run TaskReturns information about the specified flow run task. This method shows you information about the scheduled task for the flow.
Get Flow Run TasksReturns a list of scheduled flow tasks for the site.
Get Flow RunsGet flow runs.
Get Linked Task
- Available only with a Data Management license.
Returns information about a specific linked task. This method shows you information about the scheduled linked task.
Get Linked Tasks
- Available only with a Data Management license.
Returns a list of scheduled linked tasks for a site.
List Flow PermissionsReturns a list of permissions for the specific flow.
Publish FlowPublishes a flow on the specified site.
Query FlowReturns information about the specified flow, including information about the project, owner, and output steps.
Query Flow ConnectionsReturns a list of data connections for the specific flow.
Query Flows for a SiteReturns the flows on a site. If the user is not an administrator, the method returns just the flows that the user has permissions to view.
Query Flows for UserReturns the flows that the specified user owns in addition to those that the user has Read (view) permissions for.
Run Flow Now
- Available only with a Data Management license.
Runs the specified flow.
Run Flow TaskRuns the specified flow run task.
Run Linked Task Now
- Available only with a Data Management license.
Runs the specified linked task.
Update FlowUpdates the project and/or owner of the specified flow.
Update Flow ConnectionUpdates the server address, port, username, or password for the specified flow connection. The connection can be an input or an output connection.
Update Flow ConnectionsUpdates the server address, port, username, or password for one or more flow connections. The connection can be an input or an output connection.
Update Flow OwnerUpdates a flow's owner.
Upload Flow Encrypted KeychainUploads the encrypted version of the embedded credentials of a flow. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site.
Identity Pools Methods
Add User to Identity Pool
- Not available for Tableau Cloud.
Add a user to a specified identity pool.
Configure Identity Store
- Not available for Tableau Cloud
Configure a new local identity store to provision users.
Create Authentication Configuration
- Not available for Tableau Cloud
Create an instance of OpenID Connect (OIDC) authentication.
Create Identity Pool
- Not available for Tableau Cloud
Create an identity pool.
Delete Authentication Configuration
- Not available for Tableau Cloud
Delete an authentication instance.
Delete Identity Pool
- Not available for Tableau Cloud
Delete an identity pool.
Delete Identity Store
- Not available for Tableau Cloud
Delete an identity store.
Get Identity Pool
- Not available for Tableau Cloud
Get information about an identity pool.
List Authentication Configurations on Server
- Not available for Tableau Cloud
List information about all authentication instances associated with identity pools.
List Identity Pools
- Not available for Tableau Cloud
List all identity pools.
List Identity Stores
- Not available for Tableau Cloud
List information about all identity store instances used to provision users.
Remove User from Identity Pool
- Not available for Tableau Cloud.
Remove a user from a specified identity pool.
Update Authentication Configuration
- Not available for Tableau Cloud
Update an authentication instance.
Update Identity Pool
- Not available for Tableau Cloud
Update information about an identity pool.
Jobs, Tasks, and Schedules Methods
Add Data Source to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh a data source to an existing server schedule on Tableau Server.
For Tableau Cloud, see Create Cloud Extract Refresh Task.
Add Virtual Connection to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server.
For Tableau Cloud, see Create Cloud Extract Refresh Task.
Add Workbook to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server.
Batch Update Schedule State
- Not available for Tableau Cloud
Updates the state of one or more schedules.
Cancel JobCancels a job specified by job ID. To get a list of job IDs for jobs that are currently queued or in-progress, use the Query Jobs method.
Create Cloud Extract Refresh Task
- Not available for Tableau Server.
Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection.
For Tableau Server, see Add data source to server schedule, Add workbook to server schedule, and Add virtual connection to server schedule.
Create Server Schedule
- Not available for Tableau Cloud.
Creates a new server schedule on Tableau Server.
For Tableau Cloud, see Create Cloud Extract Refresh Task and Create subscription.
Delete Data Acceleration TaskDeletes a data acceleration task.
Delete Server Schedule
- Not available for Tableau Cloud.
Deletes the specified schedule on Tableau Server.
For Tableau Cloud, see Delete Extract Refresh Task and Delete Subscription.
Get Data Acceleration Tasks in a SiteReturns a list of data acceleration tasks for the site.
Get Extract Refresh TaskReturns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection.
Get Server Schedule
- Not available for Tableau Cloud.
Returns detailed information about the specified server schedule on Tableau Server.
List Extract Refresh Tasks in Server Schedule
- Not available for Tableau Cloud.
Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server.
List Extract Refresh Tasks in SiteReturns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections.
List Server Schedules
- Not available for Tableau Cloud.
Returns a list of flows, extract and subscription server schedules on Tableau Server. For each schedule, the API returns the name, frequency, priority, and other information.
Query JobReturns status information about an asynchronous process that is tracked using a job. This method can be used to query jobs that are used to do the following:.
Query JobsReturns a list of active jobs on the specified site. To get details on a specific job, pass a job ID returned by this method to the Query Job method. To cancel an active job, pass a job ID returned by this method to the Cancel Job method.
Run Extract Refresh TaskRuns the specified extract refresh task.
Update Server Schedule
- Not available for Tableau Cloud.
Modifies settings for the specified server schedule, including the name, priority, and frequency details on Tableau Server.
For Tableau Cloud, see Update cloud extract refresh task and Update subscription .
Update Virtual Connection Now
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Runs an extract refresh on the specified virtual connection.
Metadata Methods
Add Data Quality Warning
- Available only with a Data Management license.
Add a data quality warning to a database, table, column, published data source, flow, virtual connection, or virtual connection table.
Add Database Permissions
- Available only with a Data Management license.
Add permissions to a database asset.
Add Default Database Permissions
- Available only with a Data Management license.
Adds default permission capabilities to a user or group for table resources in that database.
Add or Update Monitoring Quality Warning on Content
- Available only with a Data Management license.
Create or update one or more monitoring quality warnings.
Add Table Permissions
- Available only with a Data Management license.
Add permissions to a table asset.
Add Tags to ColumnAdd one or more tags to a column.
Add Tags to DatabaseAdd one or more tags to a database.
Add Tags to TableAdd one or more tags to a table.
Add Tags to Virtual Connection
- Available only with a Data Management license.
Adds tags to a virtual connection.
Batch Add or Update Data Quality Certifications
- Available only with a Data Management license.
Create or update one or more data quality certifications for different content and asset items.
Batch Add or Update Data Quality Warnings
- Available only with a Data Management license.
Add or update multiple data quality warnings on assets.
Batch Add Tags
- Available only with a Data Management license.
Add multiple tags to items that are different content and asset types.
Batch Delete Data Quality Warnings
- Available only with a Data Management license.
Delete multiple data quality warnings from assets.
Batch Delete Tags
- Available only with a Data Management license.
Delete multiple tags from items that are different content and asset types.
Create Label Category
- Available only with a Data Management license.
Creates a data label category.
Create or Update labelValue
- Available only with a Data Management license.
Creates a label value with the specified name if it doesn't exist, or updates the existing label value if the label value name already exists.
Delete Data Quality Certification by ID
- Available only with a Data Management license.
Delete a data quality certification from an asset using the data quality certification ID.
Delete Data Quality Certifications by Content
- Available only with a Data Management license.
Delete multiple data quality certifications from assets.
Delete Data Quality Warning by Content
- Available only with a Data Management license.
Delete the data quality warnings from an asset.
Delete Data Quality Warning by ID
- Available only with a Data Management license.
Delete a data quality warning from an asset using the data quality warning ID.
Delete Database Permissions
- Available only with a Data Management license.
Permanently remove the permissions applied to a database asset.
Delete Default Database Permissions
- Available only with a Data Management license.
Permanently remove the default permissions on a database asset.
Delete Label
- Available only with a Data Management license.
Deletes a data label by its LUID.
Delete Label Category
- Available only with a Data Management license.
Deletes a label category.
Delete Labels
- Available only with a Data Management license.
Deletes the data labels on one or more assets.
Delete labelValue
- Available only with a Data Management license.
Deletes a label value.
Delete Quality Warning Trigger by ID
- Available only with a Data Management license.
Permanently remove a quality warning trigger using the quality warning trigger ID.
Delete Quality Warning Triggers by Content
- Available only with a Data Management license.
Permanently remove all quality warning triggers for one or more data sources or flows, or both.
Delete Table Permissions
- Available only with a Data Management license.
Permanently remove the permissions applied to a table asset.
Delete Tag from ColumnDelete a tag from a column.
Delete Tag from DatabaseDelete a tag from a database.
Delete Tag from TableDelete a tag from a table.
Delete Tag from Virtual Connection
- Available only with a Data Management license.
Deletes a tag from a virtual connection.
Get Databases and Tables from ConnectionQuery databases and tables from the connection information in the data source (.tds or .tdsx) or workbook (.tws or .twbx) file's XML.
Get Label
- Available only with a Data Management license.
Gets a data label by its LUID.
Get Labels
- Available only with a Data Management license.
Displays information about the data labels on one or more assets.
Get labelValue
- Available only with a Data Management license.
Displays label value properties for a single label value.
Get Metadata Suggestion
- Available only with Tableau+
Gets a suggestion from generative AI about asset metadata.
List Database PermissionsGet information about the permissions on a database asset.
List Default Database PermissionsGet the default permissions applied to the database asset and its children tables.
List Label Categories on Site
- Available only with a Data Management license.
Lists all data label categories on the site.
List labelValues on Site
- Available only with a Data Management license.
Lists all label values on the site.
List Table PermissionsGet information about the permissions on a table asset.
Move Database
- Available only with a Data Management license.
Move one or more databases to a project.
Move Table
- Available only with a Data Management license.
Moves one or more tables to a project.
Query All Quality Warning Triggers by ContentGet information about all quality warning triggers for a content item.
Query Column in a TableGet information about a column in a table asset.
Query Columns in a TableGet information about the columns in a table asset.
Query Data Quality Certification by IDGet information about a data quality certification.
Query Data Quality Certifications by ContentGet all data quality certifications for content or asset items.
Query Data Quality Warning by Content
- Available only with a Data Management license.
Get information about the data quality warning for the database, table, column, published data source, flow, virtual connection, or virtual connection table.
Query Data Quality Warning by IDGet information about a specific data quality warning.
Query DatabaseGet information about a database asset.
Query DatabasesGet information about all database assets for a site.
Query Quality Warning TriggerGet information about a quality warning trigger.
Query TableGet information about a table asset.
Query TablesGet information about all table assets for a site.
Remove Column
- Available only with a Data Management license.
Permanently remove the column from a table asset.
Remove Database
- Available only with a Data Management license.
Permanently remove the database asset.
Remove Table
- Available only with a Data Management license.
Permanently remove the table asset.
Update Column
- Available only with a Data Management license.
Update the description of the column.
Update Data Quality Warning
- Available only with a Data Management license.
Update the warning type, status, and message of a data quality warning.
Update Database
- Available only with a Data Management license.
Update the database description, certify a database, set database permissions, or assign a Tableau Cloud or Server user as the database contact.
Update Label
- Available only with a Data Management license.
Updates a label by its LUID.
Update Label Category
- Available only with a Data Management license.
Updates a data label category.
Update Labels
- Available only with a Data Management license.
Creates or updates labels on one or more assets.
Update labelValue
- Available only with a Data Management license.
Updates a label value.
Update Monitoring Quality Warning
- Available only with a Data Management license.
Update a monitoring quality warning.
Update Table
- Available only with a Data Management license.
Update the table description, certify a table, or a assign a user contact to the table asset.
Metrics Methods - Retired
Delete Metric - Retired in API 3.22Deletes a specified metric from a site.
Get Metric - Retired in API 3.22Returns the details of the specified metric.
Get Metric Data - Retired in API 3.22Returns the data for the specified metric as comma separated (CSV) format. The maximum number of rows returned is 10,000.
List Metrics for Site - Retired in API 3.22Returns the metrics configured for a site.
Update Metric - Retired in API 3.22Updates the owner, project, suspended status, or name of the specified metric.
Mobile Settings Methods
Get Mobile Security Settings for ServerGets the mobile security settings for the server.
Get Mobile Security Settings for SiteGets the mobile security settings for the specified site.
Update Mobile Security Settings for SiteUpdates the mobile security sections for a specified site.
Notifications Methods
Add User to Data-Driven AlertAdds a specified user to the recipients list for a data-driven alert.
Create a WebhookCreates a new webhook for a site.
Create Data Driven Alert
- Not available for Tableau Server.
Create a data driven alert (DDA) for a view with a single data axis.
Delete a WebhookDeletes the specified webhook.
Delete Data-Driven AlertDeletes the specified data-driven alert from the specified site.
Delete User from Data-Driven AlertRemoves a specified user from the recipients list for a data-driven alert.
Get a WebhookReturns information about the specified webhook.
Get Data-Driven AlertReturns details on a specified data-driven alert, including the recipients of the alert.
Get User Notification PreferencesReturns 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.
List Data-Driven Alerts on SiteReturns a list of data-driven alerts in use on the specified site.
List WebhooksReturns a list of all the webhooks on the specified site.
Test a WebhookTests 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.
Update a WebhookModify the properties of an existing webhook.
Update Data-Driven AlertUpdate one or more settings for the specified data-driven alert; including the alert subject, frequency, and owner.
Update User Notification PreferencesUpdates user notifications preferences to enabled or disabled on the specified site. For more information about notifications, see Manage Your Account Settings.
OpenID Connect Methods
Create OpenID Connect Configuration
- Not available for Tableau Server.
Create the Tableau Cloud site's OpenID Connect (OIDC) configuration.
Get OpenID Connect Configuration
- Not available for Tableau Server.
Get details about the Tableau Cloud site's OpenID Connect (OIDC) configuration.
Remove OpenID Connect Configuration
- Not available for Tableau Server.
Disable and clear the Tableau Cloud site's OpenID Connect (OIDC) configuration.
Update OpenID Connect Configuration
- Not available for Tableau Server.
Update the Tableau Cloud site's OpenID Connect (OIDC) configuration.
Permissions Methods
Add Ask Data Lens Permissions - Retired in API 3.22Adds permissions to the specified ask data lens for a user or group. You can specify multiple sets of permissions using one request.
Add Collection PermissionsAdds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call.
Add Data Source PermissionsAdds permissions to the specified data source for a user or group. You can specify multiple sets of permissions using one call.
Add Default PermissionsAdds default permission rules for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, also adds default permission rules for database or table resources in a project for a user or group. After adding default permission rules, new resources of the type you specify that are added to the project will have those permission rules. If permissions are locked to the project, then the same is true for all existing child content of the project. For more information, see Permissions.
Add Project PermissionsAdds permissions to the specified project for a user or group. You can specify multiple sets of permissions using one call.
Add View PermissionsAdds permissions to the specified view (also known as a sheet) for a user or group. You can specify multiple sets of permissions using one call.
Add Virtual Connection Permissions
- Available only with a Data Management license.
Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call.
Add Workbook PermissionsAdds permissions to the specified workbook for a user or group. You can specify multiple sets of permissions using one call.
Add Workbook to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server.
Delete Ask Data Lens Permission - Retired in API 3.22Deletes the specified permissions to the specified ask data lens for a user or group.
Delete Collection PermissionRemoves the specified collection permission for the specified group or user.
Delete Data Source PermissionRemoves the specified data source permission for the specified group or user.
Delete Default PermissionRemoves default permission rules for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, also removes default permission rules for database or table resources in a project for a user or group. After removing default permission rules, new resources of the type you specify that are added to the project will no longer have those permission rules. If permissions are locked to the project, then the same is true for all existing child content of the project.
Delete Project PermissionRemoves the specified project permission for the specified group or user.
Delete View PermissionDeletes permission to the specified view (also known as a sheet) for a Tableau Server user or group.
Delete Virtual Connection Permission
- Available only with a Data Management license.
Removes the specified virtual connection permission for the specified group or user.
Delete Workbook PermissionDeletes the specified permission from the specified workbook for a group or user.
List Ask Data Lens PermissionsList all permissions configured for the specified ask data lens that the user has read capability for.
List Collection PermissionsReturns a list of permissions for a specific collection.
List Data Source PermissionsReturns a list of permissions for a specific data source.
List Default PermissionsReturns details of default permission rules granted to users and groups for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, this method can also return details of default permission rules granted to users and groups for database or table resources in a project.
List Project PermissionsReturns information about the set of permissions allowed or denied for groups and users in a project.
List View PermissionsReturns a list of permissions for the specific view.
List Virtual Connection Permissions
- Available only with a Data Management license.
Returns a list of permissions for a specific virtual connection.
List Workbook PermissionsReturns a list of permissions for the specific workbook.
Replace Content PermissionsReplaces existing permissions in the specified content. You can specify multiple sets of permissions using one call.
Replace Project's Default PermissionsReplaces default permissions in the specified content. If Tableau Catalog is enabled, it also adds default permission rules for database or table resources in a project. After adding default permission rules, new resources of the type you specify that are added to the project will have those permission rules. If permissions are locked to the project, then the same is true for all existing child content of the project. For more information, see Permissions.
Projects Methods
Create ProjectCreates a project on the specified site. You can also create project hierarchies by creating a project under the specified parent project on the site. To make changes to an existing project, call Update Project.
Delete ProjectDeletes the specified project on a specific site. When a project is deleted, all Tableau assets inside of it are also deleted, including assets like associated workbooks, data sources, project view options, and rights.
Query ProjectsReturns a list of projects on the specified site, with optional parameters for specifying the paging of large results.
Update ProjectUpdates the name, description, or project hierarchy of the specified project. You can create or update project hierarchies by specifying a parent project for the project that you are updating using this method.
Publishing Methods
Append to File UploadUploads a block of data and appends it to the data that is already uploaded.
Initiate File UploadInitiates the upload process for a file. After the upload has been initiated, you call Append to File Upload to send individual blocks of the file to the server. When the complete file has been sent to the server, you call Publish Data Source, Publish Flow, or Publish Workbook to commit the upload.
Publish Data SourcePublishes a data source on the specified site, or appends data to an existing data source.
Publish FlowPublishes a flow on the specified site.
Publish Virtual Connection
- Available only with a Data Management license.
Publishes a virtual connection on the specified site, either from a packaged virtual connection file (.tvcx) or from a downloaded JSON representation.
Publish WorkbookPublishes a workbook on the specified site.
Pulse Methods
Batch create Pulse subscriptions
- Not available for Tableau Server
Creates multiple subscriptions to a metric for specified users and/or groups.
Batch get Pulse subscriber counts
- Not available for Tableau Server
Gets the number of unique users subscribed to a set of metrics specified in a comma separated list of metric LUIDs.
Batch get Pulse subscriptions
- Not available for Tableau Server
Gets a batch of subscriptions, specified in a comma delimited list of subscriptions LUIDs.
Batch list metric definitions (few)
- Not available for Tableau Server
Gets the details of a batch of metric definitions and metrics on a site, specified in a brief comma delimited list of LUIDs.
Batch list metric definitions (many)
- Not available for Tableau Server
Gets the details of a batch of definitions specified in a comma delimited list of LUIDs. This method is optimized for batches with large numbers of definitions.
Batch list metrics (few)
- Not available for Tableau Server
Gets a batch of metrics from a definition, specified in a comma delimited list.
Batch list metrics (many)
- Not available for Tableau Server
Gets batches of metrics available on a server. Only metrics a user has privileges to view will be visible. This endpoint uses POST as an alternative to GET, where long lists of URL parameters could be problematic.
Create metric
- Not available for Tableau Server
Creates a metric.
Create metric definition
- Not available for Tableau Server
Creates a metric definition.
Create metric tag for user
- Not available for Tableau Server
Creates a tag for the specified metric, for the signed in user.
Create subscription
- Not available for Tableau Server
Creates a subscription to a specified metric for a specified user or group.
Delete metric
- Not available for Tableau Server
Deletes a metric.
Delete metric definition
- Not available for Tableau Server
Deletes a metric definition.
Delete metric tag
- Not available for Tableau Server
Deletes the specified metric tag.
Delete Pulse subscription
- Not available for Tableau Server
Deletes a specified subscription to a metric.
Generate basic insight bundle
- Not available for Tableau Server
Generates a basic insight bundle.
Generate breakdown insight bundle
- Not available for Tableau Server
Generates a breakdown insight bundle. This provides the BAN and breakdown groups of insights.
Generate current metric value insight bundle
- Not available for Tableau Server
Generates a bundle the current aggregated value for each metric.
Generate detail insight bundle
- Not available for Tableau Server
Generates a detail insight bundle.
Generate exploration insight bundle
- Not available for Tableau Server
Generates an exploration insight bundle. This provides the BAN, anchor, and followup groups of insights.
Generate insight brief
- Not available for Tableau Server
Generates an insight brief based on a user utterance by gathering insights for the specified metrics. For supplemental information, see.
Generate metric card image
- Not available for Tableau Server
Generates a PNG image of a Pulse metric card with full visual parity to the web UI homepage.
Generate springboard insight bundle
- Not available for Tableau Server
Generates a springboard insight bundle.
Get metric
- Not available for Tableau Server
Gets the details of the specified metric.
Get metric definition
- Not available for Tableau Server
Gets a metric definition and optionally metrics it contains.
Get or create metric
- Not available for Tableau Server
Returns the details of a metric in a definition if it exists, or creates a new metric if it does not. Also returns 'true' if a new metric was created, or 'false' if it already existed.
Get Pulse subscription
- Not available for Tableau Server
Gets a specified subscription to a metric.
Get site entitlements
- Not available for Tableau Server
Returns entitlements available for a site. If entitlements are True, then Pulse premium features are enabled for the site.
Gets recommended metrics
- Not available for Tableau Server
Gets personalized groups of metrics to recommend to a user. Only metric that the user has privileges to view will be returned.
List followed metrics groups
- Not available for Tableau Server
Gets the user's followed metrics. Optionally metrics can be grouped by characteristics like datasource, and sorted.
List metric definition measurement periods
- Not available for Tableau Server
Gets the measurement periods for the specified metric definition.
List metric definitions
- Not available for Tableau Server
Lists the metric definitions configured for a site or, optionally, the details and definition for a specific metric.
List metrics in definition
- Not available for Tableau Server
Lists the metrics contained in a metric definition.
List Pulse user preferences
- Not available for Tableau Server
Gets the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI.
List site alerts
- Not available for Tableau Server
List the alerts for the authorized user user on a specified site.
List subscriptions
- Not available for Tableau Server
Lists the subscriptions to a specified metric and/or for a specified user.
Lists all definition tags for the site.
- Not available for Tableau Server
Lists all definition tags for the site. Results can be filtered by tag value, definition name, or datasource ID. Each result includes the tag value and a count of how many definitions use it.
Update metric
- Not available for Tableau Server
Updates the specification of a metric.
Update metric definition
- Not available for Tableau Server
Updates a metric definition.
Update Pulse user preferences
- Not available for Tableau Server
Updates the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI.
Recycle Bin Methods
Delete All Recycle Bin ContentsPermanently deletes all content in a site's Recycle Bin.
Delete Recycle Bin Content ItemPermanently deletes the specified Recycle Bin content item.
Get Recycle Bin Content ItemReturns information about the specified Recycle Bin content item.
List Recycle Bin Content by TypeGets a list of Recycle Bin content of the specified type.
Restore Recycle Bin Content ItemRestores the specified content item from the Recycle Bin to a project.
Revisions Methods
Download Data Source RevisionDownloads a specific version of a data source prior to the current one in .tdsx format. To down load the current version of a data source use the Download Data Source method.
Download Workbook Revision
- Available only if version history is enabled for the specified site.
Downloads a specific version of a workbook in .twb or .twbx format.
Get Data Source RevisionsReturns a list of revision information (history) for the specified data source.
Get Workbook RevisionsReturns a list of revision information (history) for the specified workbook.
Remove Data Source RevisionRemoves a specific version of a data source from the specified site.
Remove Workbook RevisionRemoves a specific version of a workbook from the specified site.
Server Methods
Delete Server SessionDeletes a specified session. This method is not available for Tableau Cloud and is typically used in programmatic management of the life cycles of embedded Tableau sessions.
Get Current Server SessionReturns details of the current session of Tableau Server.
List Server Active Directory Domains
- Not available for Tableau Cloud.
Returns the details of the Active Directory domains that are in use on the server, including their full domain names, nicknames and IDs. If the server is configured to use local authentication, the command returns only the domain name local.
Server InfoReturns the version of Tableau Server and the supported version of the REST API.
Update Server Active Directory Domain
- Not available for Tableau Cloud.
Changes the nickname or full domain name of an Active Directory domain on the server. This method is not available on Tableau Cloud.
Site Methods
Create Site
- Not available for Tableau Cloud.
Creates a site on Tableau Server. To make changes to an existing site, call Update Site. This method isn’t available for Tableau Cloud.
Delete Site
- Not available for Tableau Cloud.
Deletes the specified site.
Get Data Acceleration Report for a SiteReturns a report about data acceleration for the site. It lets you compare page load times for before and after data acceleration is enabled.
Get Embedding Settings for a SiteReturns the current embedding settings for a specific site.
Get Recently Viewed for SiteGets the details of the views and workbooks on a site that have been most recently created, updated, or accessed by the signed in user. The 24 most recently viewed items are returned, though it may take some minutes after being viewed for an item to appear in the results.
Get User Personal SpaceGets the details of the Personal Space for the currently authenticated user.
List Authentication Configurations for Site
- Not available for Tableau Server.
List all authentications configurations on the site.
Query SiteReturns information about the specified site, with the option to return information about the storage space and user count for the site.
Query Sites
- Not available for Tableau Cloud.
Returns a list of the sites on the server that the caller of this method has access to. This method is not available for Tableau Cloud.
Query Views for SiteReturns all the views for the specified site, optionally including usage statistics.
Update Embedding Settings for SiteUpdates the embedding settings for a site. Embedding settings can be used to restrict embedding Tableau views to only certain domains.
Update Site
- Not available for Tableau Cloud.
Modifies settings for the specified site, including the content URL, administration mode, user quota, state (active or suspended), storage quota, whether flows are enabled, whether subscriptions are enabled, and whether revisions are enabled.
Subscriptions Methods
Create SubscriptionCreates a new subscription to a view or workbook for a specific user on Tableau Server and Tableau Cloud. When a user is subscribed to the content, Tableau sends the content to the user in email on the schedule that you define.
Delete SubscriptionDeletes the specified subscription on Tableau Server or Tableau Cloud.
Get SubscriptionReturns information about the specified subscription.
List SubscriptionsReturns a list of all the subscriptions on the specified site.
Update SubscriptionModifies an existing subscription on Tableau Server. You can change the subject, server schedule, and suspension state for the subscription.
Tableau Extensions Settings Methods
List Tableau extensions server settings
- Not available for Tableau Cloud.
Lists the settings for extensions of a server.
List Tableau extensions site settingsLists the settings for extensions of a site.
Update Tableau extensions server settings
- Not available for Tableau Cloud.
Updates the settings for extensions of a server.
Update Tableau extensions site settingsUpdates the settings for extensions of a site.
Tableau Knowledge Graph Methods
Create a semantic context
- Not available for Tableau Server
Create a semantic context node carrying one or more statements.
Delete a semantic context
- Not available for Tableau Server
Delete a semantic context created and managed in Tableau Knowledge, along with its statements.
Get a node by ID
- Not available for Tableau Server
Get a single node by its ID, including its semantic statements and directly connected nodes.
Get graph-health suggestions
- Not available for Tableau Server
Get a report on the health of the graph, including a score and suggested improvements.
Get the downstream impact of a node
- Not available for Tableau Server
Get the assets that depend on a node, to see the impact if it changes.
Get the lineage of a node
- Not available for Tableau Server
Get the lineage neighborhood of a node.
List edges around a node
- Not available for Tableau Server
List the edges connected to a node.
List knowledge graphs
- Not available for Tableau Server
List the knowledge graphs on the caller's Tableau site, each with its ID, name, description, status, and.
List knowledge sources
- Not available for Tableau Server
List the data sources and workbooks connected to the graph.
Search graph nodes
- Not available for Tableau Server
Search graph nodes using natural-language semantic search.
Search semantic contexts
- Not available for Tableau Server
Search semantic contexts across the graph.
Search semantic contexts attached to a node
- Not available for Tableau Server
Search the semantic contexts attached to a specific node.
Update a semantic context
- Not available for Tableau Server
Partially update a semantic context.
Tableau MCP Methods
Create Tableau MCP Settings for SiteReplaces the current list of Tableau MCP settings for a given site.
Get Tableau MCP Settings for SiteGets the list of Tableau MCP settings for a specified site.
Update Tableau MCP Settings for SiteUpdates the current list of Tableau MCP settings for a specified site.
Users and Groups Methods
Add Group to Group SetAdds group to a group set.
Add User to GroupAdds a user to the specified group.
Add User to SiteAdds a user to Tableau Server or Tableau and assigns the user to the specified site.
Create GroupCreates a group on a Tableau Cloud site or Tableau Server.
Create Group SetCreates a group set with a specified name.
Create SCIM Configuration
- Not available for Tableau Server.
Creates the System for Cross-domain Identity Management Configuration (SCIM) configuration on the Tableau Cloud site.
Create SCIM TokenGenerates the System for Cross-domain Identity Management (SCIM) token and secret.
Delete GroupDeletes the group on a specific site. Deleting a group does not delete the users in group, but users are no longer members of the group. Any permissions that were previously assigned to the group no longer apply.
Delete Group SetDeletes the group set on a specific site. Deleting a group set doesn’t delete the users in the group set, but users are no longer members of the group set. Any permissions that were previously assigned to the group set no longer apply.
Delete SCIM Configuration
- Not available for Tableau Server.
Permanently removes the System for Cross-domain Identity Management (SCIM) configuration from the Tableau Cloud site.
Delete SCIM Token
- Not available for Tableau Server.
Permanently removes the System for Cross-domain Identity Management (SCIM) token.
Delete Users from Site with CSVCreates a job to remove a list of users, specified in a .csv file, from a site.
Download User CredentialsGets credentials for a user who is being migrated to another Tableau Cloud or Tableau Server site.
Get Group SetReturns information about the specified group set including ID, name, and member groups.
Get Groups for a UserGets a list of groups of which the specified user is a member.
Get SCIM Configuration
- Not available for Tableau Server.
Gets the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site.
Get Users in GroupGets a list of users in the specified group.
Get Users on SiteReturns the users associated with the specified site.
Import Users to Site from CSVCreates a job to import the users listed in a specified .csv file to a site, and assign their roles and authorization settings.
List Group SetsLists all group sets matching optional filter and ordered by optional sort expression.
List SCIM Configurations
- Not available for Tableau Server.
Returns the System for Cross-domain Identity Management Configuration (SCIM) configurations on the Tableau Cloud site.
Query GroupsReturns a list of groups on the specified site, with optional parameters for specifying the paging of large results.
Query User On SiteReturns information about the specified user.
Remove Group from Group SetRemoves a group from the specified group set.
Remove User from GroupRemoves a user from the specified group.
Remove User from SiteRemoves a user from the specified site. The user will be deleted if they do not own any other assets other than subscriptions. If a user still owns content (assets) on Tableau Server, the user cannot be deleted unless the ownership is reassigned first.
Update GroupUpdates a group on a Tableau Cloud site or Tableau Server.
Update Group SetUpdates a group set name on a Tableau Server or Tableau Cloud site.
Update SCIM Configuration
- Not available for Tableau Server.
Updates the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site.
Update UserModifies information about the specified user.
Upload User CredentialsUploads user credentials to a site on a destination Tableau Cloud or Tableau Server.
Virtual Connections Methods
Add Tags to Virtual Connection
- Available only with a Data Management license.
Adds tags to a virtual connection.
Add Virtual Connection Permissions
- Available only with a Data Management license.
Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call.
Add Virtual Connection to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server.
For Tableau Cloud, see Create Cloud Extract Refresh Task.
Create Cloud Extract Refresh Task
- Not available for Tableau Server.
Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection.
For Tableau Server, see Add data source to server schedule, Add workbook to server schedule, and Add virtual connection to server schedule.
Delete Extracts from Virtual Connection
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Deletes the extracts from a virtual connection, which changes it from extract to live mode.
Delete Tag from Virtual Connection
- Available only with a Data Management license.
Deletes a tag from a virtual connection.
Delete Virtual Connection
- Available only with a Data Management license.
Deletes a virtual connection.
Delete Virtual Connection Permission
- Available only with a Data Management license.
Removes the specified virtual connection permission for the specified group or user.
Download Virtual Connection
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Downloads a virtual connection in .tvcx format.
To download a JSON representation of a virtual connection instead, see Download Virtual Connection as JSON.
Download Virtual Connection as JSON
- Available only with a Data Management license.
Downloads a JSON-representation of a virtual connection.
To download a virtual connection as a .tvcx file, see Download Virtual Connection.
Download Virtual Connection Revision as JSON
- Available only with a Data Management license.
Downloads a JSON-representation of an earlier revision of a virtual connection.
List Virtual Connection Database Connections
- Available only with a Data Management license.
Returns information about database connections in the specified virtual connection.
List Virtual Connection Permissions
- Available only with a Data Management license.
Returns a list of permissions for a specific virtual connection.
List Virtual Connection Revisions
- Available only with a Data Management license.
Lists revisions for a virtual connection.
List Virtual Connections
- Available only with a Data Management license.
Returns a list of available virtual connection names and IDs.
Publish Virtual Connection
- Available only with a Data Management license.
Publishes a virtual connection on the specified site, either from a packaged virtual connection file (.tvcx) or from a downloaded JSON representation.
Update Virtual Connection
- Available only with a Data Management license.
Updates a virtual connection's name, owner, project, or certification status.
Update Virtual Connection Database Connections
- Available only with a Data Management license.
Updates the server address, port, username, or password for the specified database connection in a virtual connection.
Update Virtual Connection Now
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Runs an extract refresh on the specified virtual connection.
Workbooks and Views Methods
Add Tags to ViewAdds one or more tags to the specified view.
Add Tags to WorkbookAdds one or more tags to the specified workbook.
Delete Custom ViewDeletes the specified custom view.
Delete Tag from ViewDeletes a tag from the specified view.
Delete Tag from WorkbookDeletes a tag from the specified workbook.
Delete ViewDeletes a view from a workbook.
Delete WorkbookDeletes a workbook. When a workbook is deleted, all of its assets are also deleted, including associated views, data connections, and so on.
Download View Crosstab ExcelDownloads an Excel (.xlsx) file containing crosstab data from a view that the user has permission to access in a workbook. If a crosstab is exported from a dashboard, data from only the first view in the dashboard will appear in the .xlsx file. Downloads of data from story dashboards are not supported at this time.
Download WorkbookDownloads a workbook in .twb or .twbx format.
Download Workbook Encrypted KeychainGets an encrypted version of the embedded credentials from the workbook. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server.
Download Workbook PDFDownloads a .pdf containing images of the sheets that the user has permission to view in a workbook.
Download Workbook PowerPointDownloads a PowerPoint (.pptx) file containing slides with images of the sheets that the user has permission to view in a workbook. Download Images/PDF permissions must be enabled for the workbook (true by default). If Show sheets in tabs is not selected for the workbook, only the default tab will appear in the .pptx file.
Download Workbook Revision
- Available only if version history is enabled for the specified site.
Downloads a specific version of a workbook in .twb or .twbx format.
Get Custom ViewGets the details of a specified custom view.
Get Custom View DataReturns a specified custom view rendered as data in comma separated value (CSV) format.
Get Custom View ImageDownloads an image file of the specified custom view.
Get Custom View PDFReturns a specified custom view rendered as a .pdf file.
Get Recommendations for Views - Deprecated in API 3.19Gets a list of views that are recommended for a user.
Get ViewGets the details of a specific view.
Get View by PathGets the details of all views in a site with a specified name.
Get WorkbookReturns information about the specified workbook, including information about views and tags.
Get Workbook Downgrade InfoReturns a list of the features that would be impacted, and the severity of the impact, when a workbook is exported as a downgraded version (for instance, exporting a v2019.3 workbook to a v10.5 version).
Get Workbook RevisionsReturns a list of revision information (history) for the specified workbook.
Hide a Recommendation for a View - Deprecated in API 3.19Hides a view from being recommended by the server by adding it to a list of views that are dismissed for a user.
List Custom ViewsGets a list of custom views on a site. The list includes details of each custom view.
List Users with Custom View as DefaultGets the list of users whose default view is the specified custom view.
Publish WorkbookPublishes a workbook on the specified site.
Query View DataReturns a specified view rendered as data in comma separated value (CSV) format.
Query View ImageDownloads an image file of the specified view.
Query View PDFReturns a specified view rendered as a .pdf file.
Query View Preview ImageReturns the thumbnail image for the specified view.
Query Views for SiteReturns all the views for the specified site, optionally including usage statistics.
Query Views for WorkbookReturns all the views for the specified workbook, optionally including usage statistics.
Query Workbook ConnectionsReturns a list of data connections for the specific workbook.
Query Workbook Preview ImageReturns the thumbnail image as a PNG file for the specified workbook. Usually the image that is returned is for the first sheet in the workbook.
Query Workbooks for SiteReturns the workbooks on a site.
Query Workbooks for UserReturns the workbooks that the specified user owns in addition to those that the user has Read (view) permissions for.
Set Custom View as Default for UsersSets the specified custom for as the default view for up to 100 specified users. Success or failure for each user is reported in the response body.
Unhide a Recommendation for a View - Deprecated in API 3.19Unhides a view from being recommended by the server by removing it from the list of views that are dimissed for a user.
Update Custom ViewChanges the owner or name of an existing custom view.
Update WorkbookModifies an existing workbook, allowing you to change the owner or project that the workbook belongs to and whether the workbook shows views in tabs. Updated workbooks can optionally be marked to appear in the recently viewed list.
Update Workbook ConnectionUpdates the server address, port, authentication type, username, or password for the specified workbook connection.
Update Workbook ConnectionsUpdates the server address, port, authentication type, username, or password for one or more connections in a data source. To update all connections in a given data source with the same connection information, see Update Workbook Connection.
Update Workbook NowRefreshes the specified workbook.
Update Workbook Thumbnail ImagesUpdates a workbook's thumbnail images.
Upload Workbook Encrypted KeychainUploads the encrypted version of the embedded credentials. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site.
Validate Uploaded WorkbookValidates a Tableau workbook (TWB) file that already exists in temporary storage on Tableau Cloud or Tableau Server. The TWB is validated against the TWB XSD schema and verifies that it can be loaded in Tableau.
Validate WorkbookValidates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau.
Validate Workbook and UploadValidates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau. If validation succeeds, this method stores the TWB in a temporary location on Tableau Cloud or Tableau Server for further use.
## API Method Details The following content describes each endpoint in the Tableau REST API surface. Use the alphabetically sorted list of methods on the right, or **ctrl/cmd-f** to go directly to keywords you have in mind. ## Add analytics extension connection to site Adds a new analytics extension connection for an external service to a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:create\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/settings/site/extensions/analytics/connections [view details](#) ## Add Ask Data Lens Permissions - Retired in API 3.22 > > [!WARNING] > > > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau AI and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-ai). Adds permissions to the specified ask data lens for a user or group. You can specify multiple sets of permissions using one request. If a specified permission has already been granted or denied for a given user or group, the system ignores it. #### URI PUT /api/api-version/sites/site-luid/lenses/lens-luid/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
lens-luidThe LUID of the data source to set permissions for.
#### Request Body ` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ` #### Attribute Values
lens-luid Required. The LUID of the ask data lens permissions are being configured for.
user-luid Optional (at least one user or group must be specified). The LUID of the user to add permissions for.
group-luid Optional. The LUID of the group to add permissions for.
capability-name The capability to assign. For valid capabilities for a data source project are ChangePermissions, Delete, Move, Read, Write.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users with server or site administrator permissions, and non-administrators that have ChangePermissions permission for the lens (either explicitly or implicitly), can add ask data lens permissions. #### Response Code 200 #### Response Body ``` ``` #### Version Introduced Tableau Cloud June 2022 (API 3.16). Not currently available for Tableau Server. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe specified capability is invalid for a data source. Valid capabilities for a data source are ChangePermissions, Delete, Move, Read, and Write.
403403004No permissions to set permissions.A user attempted to add permissions to a data source, but the caller doesn't have permission to set permissions on the data source.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404006Lens not foundThe specified lens doesn't correspond to an existing data source.
404404012Group not foundThe group specified in the request body doesn't correspond to an existing group.
404404013Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Collection Permissions Adds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call. If a specified permission has already been granted or denied for a given user or group, the system ignores it. #### URI PUT /api/api-version/sites/site-id/collections/collection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the collection.
collection-idThe ID of the collection to set permissions for.
#### Request Body ``` ``` #### Attribute Values
user-id The ID of the user to add permissions for.
group-id The ID of the group to add permissions for.
capability-name

The capability to assign. The only valid capability for a collection is Read.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it.
#### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
403 403004 No permissions to set permissions. A user attempted to add permissions to a collection, but the caller doesn't have permission to set permissions on the collection.
404 404000 Resource not found The site ID in the URI wasn't found.
404 404002 User not found The user in the request body wasn't found.
404 404012 Group not found The group in the request body wasn't found.
404 404013 Resource not found

The capability to remove the permission for. The only valid capability name for a collection is Read. The only valid capability mode is Allow or Deny.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Data Quality Warning Add a data quality warning to a database, table, column, published data source, flow, virtual connection, or virtual connection table. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Update Labels](#update_labels_on_assets) method instead. The Add Data Quality Warning method adds a data quality warning to an asset. (An automatically-generated monitoring warning does not count towards this limit.) In Tableau Cloud February 2024 and Tableau Server 2024.2 and earlier, adding a data quality warning to an asset that already has one causes an error. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/_api-version_/sites/_site-id_/dataQualityWarnings/_content-type_/_content-luid_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type The type of asset that the data quality warning is being attached to. To specify the type, use:
  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtual connection
  • virtual connection table

These values are not case sensitive.

content-luid The unique ID of the asset (database, table, column, published data source, flow, virtual connection, or virtual connection table). This is the same as the content ID.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid, but the data quality warning type is required. If the data quality warning type is not included, an error is thrown.
type

Type of data quality warning to apply to the asset. To specify the type, use one of the following values:

  • DEPRECATED
  • WARNING
  • STALE
  • SENSITIVE_DATA
  • MAINTENANCE

These values are case sensitive.

state

(Optional) Controls whether the data quality warning displays. Value can be "true" or "false". If the state is not specified, the data quality warning is set to "true" and is visible by default. For more information about data quality warnings, see "Set a Data Quality Warning" in the Server Help or Cloud Help.

message

(Optional. Was required in Tableau Server 2023.3 and earlier.)

A custom message to accompany the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.

severity (Optional) Enables high visibility for the data quality warning when set to "true". Value can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 201 #### Response Body **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400108Generic add data quality warning errorThe data quality warning could not be added for some other reason than those specified in this table.
400400109Bad requestThe request body is missing the data quality warning type.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Add Data Source Permissions Adds permissions to the specified data source for a user or group. You can specify multiple sets of permissions using one call. If a specified permission has already been granted or denied for a given user or group, the system ignores it. If the request body includes a child workbook or element, the request is invalid. #### URI PUT /api/api-version/sites/site-id/datasources/datasource-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to set permissions for.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
datasource-id The <datasource> element is not required, but can be included for compatibility with earlier versions of the REST API. If the <datasource> element is included, the datasource-id value must match the data source ID in the URI. Any other attributes in the <datasource> element are ignored.
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name The capability to assign. For valid capabilities for a data source project are PulseMetricDefine, ChangePermissions, Connect, Delete, ExportXml, ExtractRefresh,Read (view), Write, and SaveAs.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users who are not server administrators or site administrators can add permissions only to a data source for which they have ChangePermissions permission (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe specified capability is invalid for a data source. Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, Read, and Write.
403403004No permissions to set permissions.A user attempted to add permissions to a data source, but the caller doesn't have permission to set permissions on the data source.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404004Data source not foundThe specified data source doesn't correspond to an existing data source.
404404012Group not foundThe group specified in the request body doesn't correspond to an existing group.
404404013Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Data Source to Favorites Adds the specified data source to the user's favorites. If the user already has the data source listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
datasource-idThe ID of the data source to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ... additional favorites ... ``` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Forbidden favorites accessA non-administrator user called this method but doesn't have permission to add a data source to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404011Data source not foundThe data source ID in the request body doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Data Source to Server Schedule Adds a task to refresh a data source to an existing server schedule on Tableau Server. _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task)._ #### URI PUT /api/api-version/sites/site-id/schedules/schedule-id/datasources #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
schedule-idThe ID of the schedule that you are associating with the data source.
#### Request Body ``` ``` #### Attribute Values
datasource-idThe ID of the data source to add to the schedule.
#### Permissions Tableau Server users who are not server administrators or site administrators can only add a data source to a schedule if they own the data source, or are the project leader for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 ``` ``` #### Version Version 2.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user called this method, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404004Resource not foundThe data source ID in the request body is unknown.
405405000Invalid request methodRequest type was not PUT.
500500000Internal Server ErrorThe schedule ID in the URI is unknown.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/datasources" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @add-to-schedule.xml` **Content of add-to-schedule.xml:** ``` ``` **Example response:** ``` ``` ## Add Database Permissions Add permissions to a database asset. To add permissions, the database asset must be associated with a published data source. **Version:** Available in API 3.5 (Tableau Cloud and Tableau Server) and later.  _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Available with [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** Users that are granted ChangePermissions capabilities for the asset metadata and all administrators can add database permissions.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: _Not available._       #### URI PUT api/_api-version_/sites/_site-luid_/databases/_database-luid_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset.
#### Request Body ``` ``` #### Attribute Values ``` { "permissions": { "database": { "id": "1d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" }, "granteeCapabilities": [ { "user": { "@id": "2d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" }, "capabilities": { "capability": { "name": "ChangePermissions", "mode": "allow" } } }, { "group": { "id": "3d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" }, "capabilities": { "capability": { "name": "Read", "mode": "Allow" } } } ] } } ``` #### Request Attributes
database The LUID of the database asset you want to add permissions to.
user id The LUID of the user to add permissions for.
capability name

The capability to assign. If any capability has been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a database are:

  • Read (view)
  • Write (edit)
  • ChangePermissions (set permissions)
  • ChangeHierarchy (move)

These values are case sensitive.

capability mode

Use one of the following capabilities:

  • Allow
  • Deny

These values are case sensitive.

group id The LUID of the group to add permissions for.
#### Response Code 200 #### Response Body ``` ``` ``` { "permissions": { "database": { "id": "e8d4aa9f-3d1a-4b49-8d6d-27f113cbd25e", "name": "oracle.test.tsi.lan:1521" }, "granteeCapabilities": { "user": { " id": "6265b714-7533-465d-b6db-6d0be92bfd07" }, "capabilities": { "capability": { "name": "Read", "mode": "Allow" } } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be added because support for explicit permissions is available for database assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
405405000Invalid request methodRequest type was not PUT.
409409045Database errorAn unknown database asset error occurred.
409409050Database update errorAn unknown error occurred and the database asset could not be updated.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Add Default Database Permissions Adds default permission capabilities to a user or group for table resources in that database. Default permissions function as a permissions template for the database's table assets. Note: If a database is in a project, default database permissions are not evaluated to determine table permissions. Use the [Add Default Permissions](#add_default_permissions) method to control default permission capabilities on tables through projects instead. How default permissions are enforced depends on whether the database is locked or unlocked. - **Locked to the database:** If the permissions on a database are locked or Locked to the database, existing child table assets and new child table assets that get indexed by Catalog will inherit the default permissions applied to the parent database asset. **Note:** If the database is locked, explicit permissions cannot be made for individual tables. - **Managed by the owner:** If the permissions on a database are unlocked or **Managed by the owner**, only new child table assets that get indexed by Catalog will inherit the default permissions applied to the parent database asset. **Note:** If the database is unlocked, explicit permissions for the table can be made in a separate request. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT /api/_api-version_/sites/_site-luid_/databases/_database-luid_/default-permissions/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset to set default permissions for.
#### Request Body ``` ``` #### Attribute Values
user-luid The LUID of the user to add default permissions for.
group-luid The LUID of the group to add permissions for.
capability-name

The capability to assign. If any capability has been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a databases are the following:

  • Read (view)
  • Write (edit)
  • ChangePermissions (set permissions)
  • ChangeHierarchy (move)

These values are case sensitive.

capability-mode

Use one of the following capabilities:

  • Allow
  • Deny

These values are case sensitive.

#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users set default permissions for the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to add permissions on the project.
403403114Permissions setting forbiddenDefault permissions cannot be added because the database asset is locked.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404003Resource not foundThe database LUID in the URI doesn't correspond to a database asset on the site.
404404002User not foundA user LUID in the request body as the grantee doesn't correspond to an existing user.
404404012Group not foundA group LUID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe capability in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not PUT.
## Add Default Permissions Adds default permission rules for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, also adds default permission rules for database or table resources in a project for a user or group. After adding default permission rules, new resources of the type you specify that are added to the project will have those permission rules. If permissions are [locked to the project](https://help.tableau.com/current/server/en-us/permissions.htm#LockProject), then the same is true for all existing child content of the project. For more information, see [Permissions](https://help.tableau.com/current/server/en-us/permissions.htm). Content owners can override default permissions for their content, but only if project permissions have not been locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/permissions.htm#LockProject). #### URI Workbooks: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks Data sources: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources Data roles: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles Lenses: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/lenses Metrics: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/metrics Flows: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows Virtual Connections _(endpoint introduced in [API version](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm#rest_and_tableau_version_table) 3.23)_: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/virtualconnections Databases: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases Tables: PUT /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the project.
project-luidThe LUID of the project to set default permissions for.
#### Request Body ``` < !-- ... additional capabilities ... --> < !-- ... additional capabilities ... --> < !-- ... additional grantee capability sets ... --> ``` #### Attribute Values
user-luid The LUID of the user to add default permissions for.
group-luid The LUID of the group to add permissions for.
capability-name

The capability to assign. Valid capabilities for a workbook are

  • AddComment
  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • ExportData
  • ExportImage
  • ExportXml
  • Filter
  • Read (view)
  • ShareView
  • ViewComments
  • ViewUnderlyingData
  • WebAuthoring
  • Write
  • RunExplainData
  • CreateRefreshMetrics

Valid capabilities for a data source are

  • ChangePermissions
  • Connect
  • Delete
  • ExportXml
  • SaveAs
  • Read (view)
  • Write

Valid capabilities for a flow are

  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • ExportXml (download)
  • Execute
  • Read (view)
  • WebAuthoringForFlows
  • Write

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users who are not server administrators can add permissions defaults for a project only if they have the ProjectLeader permission for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` #### Version - Version 2.1 and later. - Version 3.23 and later for the virtual connection default permissions methods. - For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400009 Invalid capability The capability in the URI is invalid for a data source.

Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, CreateRefreshMetrics, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, Read (view), and Write.

400 400042 Malformed permissions qualifier The request body includes a <workbook> or <datasource> element.
403 403004 Permissions setting forbidden A non-administrator user called this method but doesn't have permission to add permissions on the project.
404 404000 Site not found The site LUID in the URI doesn't correspond to an existing site.
404 404002 User not found A user LUID in the request body as the grantee doesn't correspond to an existing user.
404 404005 Project not found The project LUID in the URI doesn't correspond to an existing project.
404 404009 Project ID mismatch A project LUID specified in the URI does not match the project ID specified in the request body. (You do not have to specify a project ID in the request body.)
404 404012 Group not found A group LUID in the request body doesn't correspond to an existing group.
404 404013 Capability not found The capability in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Domain to Pool Associates a domain with a specific Bridge pool, allowing Bridge clients from that domain to use the pool. Each domain can only be assigned to one pool at a time. Root domains and subdomains are supported. Domain assignments are site-specific. Adding a domain already in the pool returns an error. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/bridge-domain-maps #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "example.com", "newPoolLuid": "ebae40a5-d7e4-4214-b3d5-b0715c627b71" } } ``` #### Attribute Values
existingDomainNameThe domain to add to the pool. Root domains and subdomains are supported.
newPoolLuidThe UUID of the Bridge pool to add the domain to. Must be a user-created pool (not a reserved system pool).
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid domain name, invalid pool ID, domain already exists, or pool not foundDomain must conform to valid format; pool ID must be valid UUID and exist; domain must not already be in this pool.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503904Unexpected server errorAn unexpected error occurred while adding the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Flow Permissions Adds permissions to the specified flow for a Tableau Server user or group. You can specify multiple sets of permissions using one call. #### URI PUT /api/api-version/sites/site-id/flows/flow-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
datasource-idThe ID of the flow.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
flow-id The flow-id value for the flow you want to add permissions to.
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name The capability to assign. If any capability has already been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a flow are:
  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • Execute
  • ExportXml (Download)
  • Read (view)
  • WebAuthoringForFlows
  • Write

For more information, see Permissions.

#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have permission to set permissions on the flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:permissions: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 ```                                                                                                                                                                                                             ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe capability in the URI is invalid for a flow. Valid capabilities for a flow are ChangeHierarchy, ChangePermissions, Delete, Execute, ExportXml (Download), Read (view), and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the flow.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundA user ID in the request body doesn't correspond to an existing user.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Flow Task to Server Schedule > > [!WARNING] > > > > The Add Flow Task to Schedule method is renamed and retired for Tableau Cloud in API 3.22 (Tableau Cloud March 2024). It will remain available for Tableau Server only. For Tableau Cloud in March 2024, this method will be replaced with [Create Cloud Flow Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#create_cloud_flow_task) method. Adds a task to run a flow to an existing schedule. **Note:** This method is unavailable if you do not have a Data Management license or Tableau Prep Conductor is disabled for your site. #### URI PUT /api/api-version/sites/site-id/schedules/schedule-id/flows #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
schedule-idThe ID of the schedule that you are associating with the flow. The schedule that you are adding to must have Flow as the schedule type.
#### Request Body ``` ``` #### Attribute Values
flow-id

The ID of the flow to add to the schedule. This will include all the output steps in the flow and any output steps created in the future.

parameter-id

The ID of the flow parameter. Use the List Metrics for Site - Retired in API 3.22 method to get the flow parameter ID. A parameter is a global placeholder value such as a number, text value, or boolean value that can replace a constant value in a flow.

Note: Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.

For more information, see Run flows with parameters.

overrideValue

The run-time value for the flow parameter. You must specify this if the parameter is required. Use the List Metrics for Site - Retired in API 3.22 method to see if the parameter is required and to get a list of allowed values if the parameter is expecting a value from an enumerated list.

Note: Parameters are options and only relevant for flows that contains parameters and the parameter setting is enabled.

For more information, see Run flows with parameters.

#### Permissions Tableau Server users who are not server administrators or site administrators can only add a flow to a schedule if they own the flow, or are the project leader for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400148Invalid parameter override valueThe run-time value provided for the flow parameter is invalid.
400400149Missing run-time parameter value.The run-time value for a required flow parameters was not provided.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403098Update ForbiddenA non-administrator user called this method, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404043Flow parameter not foundThe flow parameter information was not provided.
404404002User not foundA user ID in the request body doesn't correspond to an existing user.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/flows" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @add-to-schedule.xml"` **Content of add-to-schedule.xml:** The in the request body is optional and only required in the following scenarios: - The flow has parameters and the parameter is marked as required to run the flow. - The flow has parameters but not marked as required. However, you want to specify a different value than the configured default. ``` parameterId="a2fb691b-90fa-4b6e-850e-f16c5afc1f89" overrideValue= "2"/>
``` ## Add Flow to Favorites Adds the specified flow to the user's favorites. If the user already has the flow listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
flow-idThe ID of the flow to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ... additional favorites ... ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Forbidden favorites accessA non-administrator user called this method but doesn't have permission to add a data source to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Group to Group Set Adds group to a group set. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI PUT api/api-version/sites/site-id/groupsets/group-set-id/groups/group-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
group-set-idThe unique ID of the group set you want to add the group to.
group-idThe unique ID of the group you want to add to the group set.
#### Request Body None #### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012Group not foundThe group ID in the request body doesn't correspond to an existing group.
409409120Group set not foundThe group set ID in the request body doesn't correspond to an existing group.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add items to a collection Adds items to a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:update. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/collections/{luid}/items/batchCreate [view details](#) ## Add Metric to Favorites - Retired in API 3.22 **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Adds the specified metric to the user's favorites. If the user already has the metric listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the metric.
user-idThe ID of the user to add the favorite for.
#### Request Body ` ` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
metric-idThe ID of the metric to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the metric (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ` ... additional favorites ... ` #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Forbidden favorites accessA non-administrator user called this method but doesn't have permission to add a metric to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404028Metric not foundThe metric ID in the URI doesn't correspond to an existing metric.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add or Update Monitoring Quality Warning on Content Create or update one or more monitoring quality warnings. You can monitor for extract refresh failures on extract data sources or flow run failures on flows. An asset can only have one instance of monitoring. Adding monitoring to an asset that already has it will update it to use the latest specified values. **Note:** An asset can have one monitoring warning in addition to other [data quality warnings](#add_dqw). This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI **Add or update a monitoring quality warning for an asset** POST api/_api-version_/sites/_site-id_/dataQualityTriggers/_content-type_/contentIds?filter=contentId:in:\[_content-luid_\] **Add or update a monitoring quality warning for multiple assets** POST api/_api-version_/sites/_site-id_/dataQualityTriggers/_content-type_/contentIds?filter=contentId:in:\[_content-luid1_,_content-luid2_,_content-luid3_,...\] **Note:** The square brackets are required around the single LUID or comma-separated list of LUIDs. #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content the monitoring is being applied to. Use one of the following values:

  • datasource
  • flow

These values are not case sensitive.

content-luid

The LUID of the asset. This is the same as the content ID.

The square brackets are required around the single LUID or comma-separated list of LUIDs.

#### Request Body ``` ``` #### Attribute Values
type

Type of monitoring quality warning. To specify the type, use one of the following values:

  • EXTRACT_REFRESH
  • FLOW_RUN

These values are not case sensitive.

status

Monitoring status. Values can be "true" or "false". If set to "true", the data source is monitored for extract refresh failures or the flow is monitored for flow run failures).

If an extract refresh or flow run failure occurs, the specified data quality warning is attached to the data source or flow (depending on type). The data quality warning is removed when the extract refresh or flow run is successful.

For more information about monitoring quality warnings, see the monitoring quality warning section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.

message (Optional) A custom message for the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
severity High visibility status of the data quality warning. Values can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add a monitoring quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400136Generic quality warning trigger errorThe monitoring quality warning could not be added or updated for some other reason than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
409409004Invalid parameterOne or more values in the request body are invalid.
## Add Project Permissions Adds permissions to the specified project for a user or group. You can specify multiple sets of permissions using one call. If the request body includes a child datasource or element, the request is invalid. #### URI PUT /api/api-version/sites/site-id/projects/project-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
project-idThe ID of the project to set permissions for.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name The capability to assign permissions to. In Tableau Server 10.0, the valid capabilities for a project are ProjectLeader, Read (view), and Write.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users who are not server administrators or site administrators can add permissions for a project only if they have ChangePermissions (version `2.0`) or ProjectLeader (version `2.1`) permission for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400009 Invalid capability

The capability specified in the request is not in the list of valid capability names for this method.

The mode of the capability for ProjectLeader cannot be set to Deny.

403 403004 Permissions setting forbidden A non-administrator user called this method but doesn't have permission to add permissions on the project.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found A user ID in the request body as the grantee doesn't correspond to an existing user.
404 404005 Project not found The project ID in the URI doesn't correspond to an existing project.
404 404009 Project ID mismatch A project ID specified in the URI does not match the project ID specified in the request body. (You do not have to specify a project ID in the request body.)
404 404012 Group not found A group ID in the request body doesn't correspond to an existing group.
404 404013 Capability not found The capability in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Project to Favorites Adds the specified project to a user's favorites. If the user already has the project listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/_api-version_/sites/_site-id_/favorites/_user-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
project-idThe ID (not name) of the project to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have permission to add a project to a favorite list (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ``` #### Version Version 3.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Access to favorites deniedA non-administrator user called this method but doesn't have permission to add a project to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/favorites/2474164d-8d37-4a4c-abc7-c2070fd25fd5" -X PUT -d @add-project-to-favorites.xml -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Content of add-project-to-favorites.xml:** ``` ``` **Example response:** ``` ``` ## Add Projects to Routing Rule Adds one or more project filtering conditions to an existing allow rule, narrowing the rule so it applies only to the listed projects. This method applies to allow rules only; adding projects to a block rule is rejected. Each project ID must be a valid UUID and reference a project that exists on the site, and a project already associated with the rule cannot be added again. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/bridge-routing-rules/routing-rule-id/projects #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the allow rule to add projects to.
#### Request Body ``` ``` ``` { "routingRuleProjects": { "mode": "add", "project": [ { "id": "11111111-2222-3333-4444-555555555555" }, { "id": "66666666-7777-8888-9999-000000000000" } ] } } ``` #### Attribute Values
modeRequired. The operation mode; must be add for this method.
projectRequired. One or more project IDs to add. Each entry requires an id.
#### Response Code 200 #### Response Body Returns the updated `routingRule` with the added projects reflected in `project`. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "poolName": "WindowsPool", "project": [ { "id": "11111111-2222-3333-4444-555555555555", "name": "Finance", "isDeleted": false }, { "id": "66666666-7777-8888-9999-000000000000", "name": "Sales", "isDeleted": false } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedMissing or empty project list, invalid project or rule UUID, or projects not found on the site.
400503910Invariant violationAttempted to add projects to a block rule.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
409503912Project already presentOne or more of the projects is already associated with this routing rule.
429429000Rate limit exceededToo many requests sent in a given time period.
500503921Unexpected server errorAn unexpected error occurred while adding projects.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Table Permissions Add permissions to a table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-luid_/tables/_table-luid_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
table-luidThe LUID of the table asset.
#### Request Body ``` ``` #### Attribute Values
table-luid The LUID for the table asset you want to add permissions to.
user-luid The LUID of the user to add permissions for.
capability-name

The capability to assign. If any capability has been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a database are:

  • Read (view)
  • Write (edit)
  • ChangePermissions (set permissions)
  • ChangeHierarchy (move)

These values are case sensitive.

capability-mode

Use one of the following capabilities:

  • Allow
  • Deny

These values are case sensitive.

group-id The LUID of the group to add permissions for.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add table asset permissions: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be added because support for explicit permissions is available for table assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403117Database lockedPermissions for the table asset cannot be deleted because the database asset is locked.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Table errorAn unknown table asset error occurred.
409409057Table update errorAn unknown error occurred and the table asset could not be updated.
409409058Table update forbiddenA user without "write" permissions to the table asset attempted an update.
## Add Tags to Column Add one or more tags to a column. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI PUT api/api-version/sites/site-id/columns/column-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
column-idThe unique ID of the column asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to the asset.

tag-value2

Keyword text you want to add to the asset.

#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:column_tags: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 **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
409409062Generic column tag errorThe tag or tags could not be added (or deleted) for some other reason than those specified above.
409409066Column not foundThe column asset does not exist.
## Add Tags to Data Source Adds one or more tags to the specified data source. #### URI PUT /api/api-version/sites/site-id/datasources/datasource-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to add tags to.
#### Request Body ``` ... additional tags ... ``` #### Attribute Values
datasource-idThe data source to add the tag to. If the data source is already tagged with a tag that's included in the request body, those tags are ignored and the data source retains them. If the <tags> element is empty, no new tags are added to the data source.
tagThe text of the tag.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read permissions for the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasource_tags: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 ``` ... additional new tags ... ... existing tags ... ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400075 Error adding tags There was a problem adding tags to the specified data source.
403 403004 Adding tags forbidden

A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if the <tags> element is empty.

404 404000 Site not found

The site ID in the URI is not for an existing site.

404 404004 Data source not found The data source ID in URI doesn't correspond to an existing data source.
404 404009 Data source ID mismatch The request body contains a data source ID (which is optional) and it doesn't match the ID in the URI.
404 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/tags" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-tags-to-datasource.xml` **Content of add-tags-to-datasource.xml:** ``` ``` **Example response:** ``` ``` ## Add Tags to Database Add one or more tags to a database. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI PUT api/api-version/sites/site-id/databases/database-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
database-idThe unique ID of the database asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to the asset.

tag-value2 Keyword text you want to add to the asset.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:database_tags: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 **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404031Database not foundThe database asset does not exist.
409409048Generic database tag errorThe tag or tags could not be added (or deleted) for some other reason than those specified above.
## Add Tags to Table Add one or more tags to a table. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI PUT api/api-version/sites/site-id/tables/table-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the column asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to the asset.

tag-value2

Keyword text you want to add to the asset.

#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:table_tags: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 **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404032Table not foundThe table asset does not exist.
409409055Generic table tag errorThe tag or tags could not be added (or deleted) for some other reason than those specified above.
## Add Tags to View Adds one or more tags to the specified view. #### URI PUT /api/api-version/sites/site-id/views/view-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
view-idThe ID of the views to add tags to.
#### Request Body ``` ... additional tags ... ``` #### Attribute Values
view-idThe view to add the tag to. If the view is already tagged with a tag that's included in the request body, those tags are ignored and the view retains them. If the <tags> element is empty, no new tags are added to the view.
tagThe text of the tag.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read permissions for the view (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:view_tags: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 ``` ... additional new tags ... ... existing tags ... ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400076 Error adding tags There was a problem adding tags to the specified view.
403 403004 Adding tags forbidden

A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if the <tags> element is empty.

404 404000 Site not found

The site ID in the URI is not for an existing site.

404 404011 View not found The view ID in URI doesn't correspond to an existing view.
404 404009 Workbook ID mismatch The request body contains a view ID (which is optional) and it doesn't match the ID in the URI.
404 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/views/1f1e1d1c-2b2a-2f2e-3d3c-3b3a4f4e4d4c/tags" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-tags-to-view.xml` **Content of add-tags-to-workbook.xml:** ``` ``` **Example response:** ``` ``` ## Add Tags to Virtual Connection Adds tags to a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the View permission for the virtual connection and your site role must be at least Explorer.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connection\_tags:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body ``` ``` #### Attribute Values
tagThe text of the tag.
#### cURL Request Example `curl --location --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/tags' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data @data.xml` **Contents of data.xml.** ``` ``` #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400049Error adding tagsThere was a problem adding tags to the specified virtual connection.
403403004Adding tags forbiddenThe user doesn't have permissions to add tags to the virtual connection.
404404000Site not foundThe site ID in the URI is not for an existing site.
404404006Virtual connection not foundThe virtual connection ID in URI doesn't correspond to an existing virtual connection.
404405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Tags to Workbook Adds one or more tags to the specified workbook. #### URI PUT /api/api-version/sites/site-id/workbooks/workbook-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to add tags to.
#### Request Body ``` ... additional tags ... ``` #### Attribute Values
workbook-idThe workbook to add the tag to. If the workbook is already tagged with a tag that's included in the request body, those tags are ignored and the workbook retains them. If the <tags> element is empty, no new tags are added to the workbook.
tagThe text of the tag.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read permissions for the workbook (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbook_tags: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 ``` ... additional new tags ... ... existing tags ... ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400049 Error adding tags There was a problem adding tags to the specified workbook.
403 403004 Adding tags forbidden

A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if the <tags> element is empty.

404 404000 Site not found

The site ID in the URI is not for an existing site.

404 404006 Workbook not found The workbook ID in URI doesn't correspond to an existing workbook.
404 404009 Workbook ID mismatch The request body contains a workbook ID (which is optional) and it doesn't match the ID in the URI.
404 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/tags" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-tags-to-workbook.xml` **Content of add-tags-to-workbook.xml:** ``` ``` **Example response:** ``` ``` ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the specified data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
**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 ``` ``` #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
403403004Write forbiddenA user called this method who does not have the required permissions.
403409028Adding recipient to data-driven alert forbiddenThe user is not authorized to add the recipient to the data-driven alert.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002Resource Not FoundThe user ID specified in the request body is invalid.
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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:** ``` ``` **Example response:** ``` ``` ## Add User to Group Adds a user to the specified group. Beginning in API 3.21, you can bulk add users to a group by specifying multiple user IDs. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/sites/site-id/groups/group-id/users #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-idThe ID of the group to add the user to.
#### Request Body **Add a single user to a group** ``` ``` **Bulk add users to a group** (beginning in API 3.21) ``` ``` #### Attribute Values
user-id

The ID (not name) of the user to add. You can get the user ID by calling Get Users on Site.

Beginning in API 3.21, you can bulk add users to a group by specifying multiple user IDs.

#### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 **Add a single user to a group** ``` ``` **Bulk add users to group** (beginning in API 3.21) ``` ``` The siteRole value is returned as one of the following values: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, ReadOnly, or Viewer. #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012Group not foundThe group name in the request body doesn't correspond to an existing group.
405405000Invalid request methodRequest type was not POST.
409409011User conflictThe specified user is already a member of the group.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ##### Add a single user to a group `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-user-to-group.xml` **Content of add-user-to-group.xml:** ``` ``` **Example response:** ``` ``` ##### Bulk add users to a group (beginning in API 3.21) `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @bulk-add-user-to-group.xml` **Content of bulk-add-user-to-group.xml:** ``` ``` **Example response:** ``` ``` ## Add User to Identity Pool Add a user to a specified identity pool. This enables the user to sign in to Tableau Server using the specified identity pool. This method is not available for Tableau Cloud. For more information about identity pools, see [Provision and Authenticate Users Using Identity Pools](https://help.tableau.com/current/server-linux/en-us/identity_pools.htm). #### URI POST /api/api-version/sites/site-id/users/identityPool #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that is associated with the user you want to add to the identity pool.
#### Request Body ``` ``` #### Attribute Values
user-name

The name of the user to add.

site-role

Site role of the user. You can use one of the following values:

  • Creator
  • Explorer
  • ExplorerCanPublish
  • ServerAdministrator
  • SiteAdministratorExplorer
  • SiteAdministratorCreator
  • Unlicensed
  • ReadOnly
  • Viewer
user-id Required. The ID (not name) of the user to add. You can get the user ID by calling Get Users on Site.
authentication-configuration The authentication configuration instance configured for the identity pool you want to add the user to. You can get the authentication configuration instance by calling List Authentication Configurations endpoint in Tableau REST OpenAPI.
idpool-uuid The ID of the identity pool that you wan to add the user to. You can get the identity pool ID by calling the List Identity Pools endpoint in the Tableau REST OpenAPI.
identity-uuid The identifier for the user you want to add. Identifiers are only used for identity matching purposes. For more information about identifiers, see Usernames and Identifiers in Tableau in the Tableau Server Help.
#### Permissions This method can only be called by Tableau Server administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:identity_pools_users: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 200 #### Response Body **Example response:** ``` ``` #### Version Version 3.19 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
429429001User conflictThe specified user is already a member of the identity pool.
429429002Can't add userThere was a problem and the user couldn't be added to the identity pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/identityPool" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-user-to-idpool.xml` - `MY-SERVER` is the name or IP address of your server. - `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d` is the ID of the site, as returned by a previous call to [Sign In](#sign_in). - `12ab34cd56ef78ab90cd12ef34ab56cd` is the credentials token returned by a previous call to [Sign In](#sign_in). **Content of add-user-to-idpool.xml:** ``` ``` **Example response:** ``` ``` ## Add User to Site Adds a user to Tableau Server or Tableau and assigns the user to the specified site. **Tableau Server** If Tableau Server is configured to use local authentication, the information you specify is used to create a new user in Tableau Server. **Note**: After creating the user, you **must** set a full name, password, and email address for the user with the call to [Update User](#update_user). If you are using SAML with local authentication, the user information that you add is not synchronized with the SAML IdP, as it would be if you were using Active Directory. Even if it is not used by SAML, the user information must be present. If Tableau Server is configured to use Active Directory for authentication, the user you specify is imported from Active Directory into Tableau Server. **Tableau Cloud** When you add a user to Tableau Cloud, the name of the user must be the email address that is used to sign in to Tableau Cloud. After you add a user, Tableau Cloud sends the user an email invitation. The user can click the link in the invitation to sign in and update their full name and password. If you try to add a user using a specific site role but you have already reached the limit on the number of licenses for your users, the user is added as an unlicensed user. In that case, the response code is 201 (which indicates success), but the siteRole value in the response body is set to Unlicensed. **Note:** After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/sites/site-id/users #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to add users to.
#### Request Body _(Use the icon in the top right corner to copy the text.)_ ``` ``` _(Use the icon in the top right corner to copy the text.)_ ``` { "user": { "name":"user-name", "siteRole":"site-role", "authSetting":"auth-setting", "identityPoolName":"identity-pool-name", "idpConfigurationId":"idp-configuration-id", "email":"email-address", "language":"language", "locale": "locale" } } ``` #### Attribute Values
user-name The name of the user. If the server uses local authentication, this can be any name. If you are using Active Directory authentication, or if you are using Tableau Cloud, there are specific requirements for the name.

Tableau Server
If Tableau Server uses Active Directory authentication, this must be the name of an existing user in Active Directory. If the user name is not unique across domains, you must include the domain as part of the user name (for example, example\Adam or adam@example.com).

Note: Active Directory specifies a user name using two attributes: sAMAccountName and userPrincipalName (UPN) prefix. For most Active Directory users, these attributes are the same. By default, if you are adding a user from Active Directory, the name that you provide in the user-name is matched against the Active Directory sAMAccountName attribute, which becomes the name that the user signs in to Tableau Server with.

Two exceptions are when the name that you provide: is longer than 20 characters; and includes an @ character. In these cases, Tableau imports the user using the Active Directory UPN. For more information, see User Naming Attributes on the MSDN site.

Tableau Cloud
The user-name is the email address that the user will use to sign in to Tableau Cloud. When you add a user to the site, Tableau Cloud sends an email invitation. The user can click the link in the invitation to sign in and update their full name and password.

site-role The site role to assign to the user. You can assign the following roles: Creator, Explorer, ExplorerCanPublish, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, or Viewer.

Note: You cannot use the REST API to set a user to be a server administrator (ServerAdministrator site role).

auth-setting (Optional) The authentication method to assign the user.

Tableau Server

The authSetting attribute only applies when updating users on sites with site-specific SAML-enabled settings.

Tableau Cloud

The ability to create and enable multiple authentication methods simultaneously was introduced in API 3.25 (January 2025). As a result of this capability, consider the following:

  • For Tableau with MFA (or Tableau) authentication: To assign Tableau with MFA authentication (or Tableau authentication if still available for your site), you can use the authSetting or idpConfigurationId attribute, but not both.

  • For SAML and OIDC-based authentication:

    • For new configurations: To assign SAML or OIDC-based authentication, whose configurations were created during or after January 2025, you must use the idpConfigurationId attribute for assigning user authentication. Skip to idp-configuration-id.

    • For existing configurations: To assign SAML and OIDC-based authentication, whose configurations that Tableau has automatically prefixed with "Initial" (such as "Initial SAML," "Initial Google," "Initial OIDC," or "Initial Salesforce"), you can continue to use the authSetting attribute for assigning user authentication. Alternatively, you can use the idpConfigurationId attribute for assigning user authentication. Do not use both.

  • Notes:

You can assign the following values for the authSetting attribute:

  • SAML - The user signs in using the identity provider (IdP) configured for the site. For Tableau Cloud configuration, see Enable SAML Authentication on a Site. For Tableau Server, see Configure Site-Specific SAML.
  • OpenID - Tableau Cloud only: The user signs in using Google, Salesforce or OpenID Connect provider credentials. OpenID corresponds to Google, Salesforce, or OIDC authentication configuration in Tableau Cloud authentication settings.
  • TableauIDWithMFA - Tableau Cloud only: The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see About multi-factor authentication and Tableau Cloud.
  • ServerDefault - The user signs in using the default authentication method that's set for the server. For Tableau Cloud, if Tableau hasn't updated your site to require Tableau with MFA yet, you can continue to use this authentication type on a temporary basis. The ServerDefault value corresponds to TableauID in authentication settings. For Tableau Server, the SAML Server help page describes default authentication options.
identity-pool-name (Optional, Tableau Server only) When identity pools are configured, the name of the identity pool.

Starting in API 3.19, include the identity pool name when identity pools are configured and you need to add a user to an identity pool that uses the local identity store and OIDC authentication. For more information, see Identity Pools Methods.

idp-configuration-id

(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).

To find the idpConfigurationId attribute value, use the List Authentication Configurations for Site method.

Notes:

  • In cases where both attributes are supported, you can use the idpConfigurationId attribute or the authSetting attribute, but not both.
  • If neither idpConfigurationId nor authSetting attribute is specified, then TableauIdWithMFA (or in some cases ServerDefault if that option is still available for your site) is the authentication assigned to the user.
email-address (Optional, Tableau Cloud only) The email address where the user can receive notifications. If no value is provided, Tableau Cloud uses the username value to send notifications to.

Starting in API 3.26 (July 2025), you can specify an email address that is different from the username.

language

(Optional, Tableau Cloud only) Language (ISO 639-1) of the user.

Starting in API 3.28 (March 2026), you can set the user's default language in Tableau Cloud to a supported language (ISO 639-1). You can assign one of the following values: de, en_GB, en, es, fr_CA, fr, it, nl, pt, sv, th, ja, zh, zh_TW, or ko.

Important: The language set using this attribute overrides the default site-wide invitation email language that the site admin can set.

locale

(Optional, Tableau Cloud only) Locale of the user.

Starting in API 3.28 (March 2026), you can set the user's default locale to a supported locale. You can assign one of the following values: ar_SA, ar_AE, ar_BH, ar_DZ, ar_EG, ar_IQ, ar_JO, ar_KW, ar_LB, ar_LY, ar_MA, ar_OM, ar_QA, ar_SD, ar_SY, ar_TN, ar_YE, be_BY, bg_BG, ca_ES, cs_CZ, da_DK, de_DE, de_AT, de_CH, de_LU, el_GR, el_CY, en_US, en_AU, en_CA, en_GB, en_IE, en_IN, en_MT, en_NZ, en_PH, en_SG, en_ZA, es_ES, es_AR, es_BO, es_CL, es_CO, es_CR, es_DO, es_EC, es_GT, es_HN, es_MX, es_NI, es_PA, es_PE, es_PR, es_PY, es_SV, es_US, es_UY, es_VE, et_EE, fi_FI, fr_FR, fr_BE, fr_CH, fr_LU, fr_CA, ga_IE, he_IL, hi_IN, hr_HR, hu_HU, id_ID, is_IS, it_IT, it_CH, ja_JP, ko_KR, lt_LT, lv_LV, mk_MK, ms_MY, mt_MT, nl_NL, nl_BE, no_NO, pl_PL, pt_BR, pt_PT, ro_RO, ru_RU, sk_SK, sl_SI, sq_AL, sr_RS, sr_BA, sr_ME, sv_SE, th_TH, tr_TR, uk_UA, vi_VN, zh_CN, zh_HK, zh_SG, or zh_TW.

#### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 ``` ``` #### Response Headers Location: /api/3.29/sites/site-id/users/new-user-id #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400003 Bad request The user authentication setting ServerDefault is not supported for you site. Try again using TableauIDWithMFA instead.
400 400013 Invalid site role

The value of the siteRole attribute must be Explorer, ExplorerCanPublish, SiteAdministratorCreator, SiteAdministratorExplorer, Unlicensed, or Viewer.

400 400217 Unsupported language The specified language is not valid or not supported.
400 400218 Unsupported locale The specified locale is not valid or not supported.
403 403193 Forbidden A non-administrator user called this method or doesn't have permissions to update language for the user.
403 403194 Forbidden A non-administrator user called this method or doesn't have permissions to update locale for the user.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The server is configured to use Active Directory for authentication, and the username specified in the request body doesn't match an existing user in Active Directory.
405 405000 Invalid request method Request type was not POST.
409 409017 User conflict The specified user already exists on the site.
409 409005 Guest user conflict The Tableau Server API doesn't allow adding a user with the guest role to a site.
500 500109 Internal language error The language request could not be completed.
500 500110 Internal locale error The locale request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-user-to-site.xml` - `MY-SERVER` is the name or IP address of your server. - `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d` is the ID of the site to add the user to, as returned by a previous call to [Sign In](#sign_in). - `12ab34cd56ef78ab90cd12ef34ab56cd` is the authentication returned by a previous call to [Sign In](#sign_in). **Content of add-user-to-site.xml:** ``` ``` **Example response:** ``` ``` ## Add View Permissions Adds permissions to the specified view (also known as a sheet) for a user or group. You can specify multiple sets of permissions using one call. #### URI PUT /api/_api-version_/sites/_site-id_/views/_view-id_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook view.
view-idThe ID of the view to set permissions for. You can obtain this ID by calling Query Views for Site.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
view-id The view-id value must match the view ID in the URI.
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name The capability to assign. If any capability has already been granted or denied for a specified user or group, that capability is ignored. For valid capabilities for a view are AddComment, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions This method can only be called by server and site administrators, and user who have permission to set permissions on the workbook (either explicitly or implicitly). To use this method, the parent workbook that contains the specified view must have its **showTabs** attribute set to **Hide**. You can configure this setting by using the [Update Workbook](#update_workbook) method. #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` 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/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe capability in the URI is invalid for a view.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the view.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or an invalid capability value (other than Allow or Deny).
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/views/e5a4b73e-5cbb-412d-907e-f31cc31684f7" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-view-permissions.xml` **Example of add-view-permissions.xml:** ``` ``` **Example response:** ``` ``` ## Add View to Favorites Adds the specified view to a user's favorites. If the user already has the view listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server.
view-idThe ID (not name) of the view to add as a favorite.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have permission to add a view to a favorite list (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ... additional favorites ... ``` The value of view-url-name is the name of the view in its URL. For example, if a view named `View 1` shows the URL `https://MY_SERVER/#/site/MY_SITE/views/VIEW_1` in your browser address bar, then the view-url-name would be `VIEW_1`. Modifying the name (display name) of a view will not impact the view-url-name (path element of the view's URL). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400005Invalid labelThe favorite label is empty or consists of only white space characters.
403403004Forbidden Favorites accessA non-administrator user called this method but doesn't have permission to add a view to the specified user's favorites. This will always be the case when the user ID in the URI represents a different user than a non-administrator user who is calling the method.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404011View not foundThe view ID in the request body doesn't correspond to an existing view.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/favorites/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X PUT -d @add-view-to-favorites.xml -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Content of add-view-to-favorite.xml:** ``` ``` **Example response:** ``` ``` ## Add Virtual Connection Permissions Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call. If a specified permission has already been granted or denied for a given user or group, the system ignores it. #### URI PUT /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the virtual connection.
virtualconnection-idThe ID of the virtual connection to set permissions for.
#### Request Body ``` ``` #### Attribute Values
user-id The LUID of the user to add permissions for. A request does not need to include both a user and a group grantee.
group-id The LUID of the group to add permissions for. A request does not need to include both a user and a group grantee.
capability-name

The capability to assign. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it.
#### Permissions You must be an administrator or have the ChangePermissions permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe specified capability is invalid for a virtual connection. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.
403403004Permissions setting forbiddenThe user tried to change permissions for a virtual connection but doesn't have the permission to change them.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404012Group not foundThe group specified in the request body doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
404404014Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not PUT.
400409004Invalid LUIDThe virtual connection LUID in the URI was not found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data ' '` ## Add Virtual Connection to Server Schedule Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server. _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task)._ This method identifies and refreshes only the tables in the virtual connection that are configured as extracts; live tables are ignored. **Version**: Available in API 3.30 and later. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Tableau Server users who are not server administrators or site administrators can only add a virtual connection to a schedule if they own the virtual connection, or are the project leader for the project that contains the virtual connection. **Access Scope**: `tableau:schedules:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/schedules/schedule-id/virtualconnections #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
schedule-idThe LUID for the schedule that you are associating with the virtual connection.
#### Request Body ``` starting-item-id ``` #### Attribute Values
transaction-level

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
incremental-flag

Optional, boolean. Default is false.

  • If set to false, do a full refresh. Fully refresh all extracts including those configured for incremental extract.
  • If set to true, do an incremental refresh. Add new rows to incremental extracts. Full refresh other extracts.
virtualconnection-id The LUID of the virtual connection to add to the schedule.
starting-item-id The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element.
#### cURL Request Example ``` curl --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/virtualconnections' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 200 #### Response Body ``` 3577de68-2779-4962-b13d-3265ec98a4cb ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
400 400223 Virtual connection table not found. A LUID in startingItemIds is not an extract-eligible table on the virtual connection.
400 400225 Duplicate virtual connection table. startingItemIds contains the same table LUID more than once.
400 404049 No virtual connection specified. The request body must include a virtual connection in the extractRefresh element.
400 409004 Invalid parameter. startingItemIds contains a value that is not a valid LUID.
400 409090 No extract-eligible tables. The virtual connection has no active revision, or none of its tables are configured for extract refresh.
403 403078 Unable to create the task.

One of the following applies:

  • The user is not a system or site administrator and does not own the virtual connection.
  • The virtual connection already has a refresh scheduled on this schedule.
  • The virtual connection is in a personal space.
  • The extract refresh operation is not allowed for the virtual connection.
404 404023 Schedule not found. Check the schedule LUID.
404 404049 Virtual connection not found. Check the virtual connection LUID.
405 405000 Method not allowed. Request type must be PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Work Copy Elements Adds field descriptions or table descriptions to a work copy. Returns HTTP 201 when every element is added. The success body omits the elements that succeeded. If any element fails, the HTTP status is the status of the first failure and the body lists only the failed elements. A `Column` entry is not added by this method. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:datasources:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/tds/sites/site-luid/workcopy/workcopy-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Request Body ``` FieldDescription Sales Total sales amount. TableDescription Orders Order line items. ``` ``` { "tdsElementList": [ { "elementType": "FieldDescription", "name": "Sales", "description": "Total sales amount." }, { "elementType": "TableDescription", "name": "Orders", "description": "Order line items." } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements to add. Must contain at least one element. An empty or missing list is HTTP 400 with error code 400008.
tdsElementList[].elementTypeOptional. Element type sent to the TDS service. For this operation, use FieldDescription or TableDescription. Any other value is forwarded and reported as a per-element failure.
tdsElementList[].nameRequired. Element name.
tdsElementList[].columnNot applicable to this method. The add converter has no Column branch, so a column payload on an add element is not copied and the element is reported as a per-element failure.
tdsElementList[].descriptionRequired for this method. Description text for a FieldDescription or TableDescription element. When description is null, the field is left unset so the TDS service can report a per-element failure instead of HTTP 500.
#### Response Code 201 Created #### Response Body On full success the response is an empty `tsResponse` — `tdsElementResult` is omitted entirely rather than returned as an empty list. When one or more elements fail, the HTTP status is the status of the first failure and the body carries `tdsElementResult` for the failed elements only; see the Attribute Values table below and the Errors table for the failure shape. ``` ``` ``` {} ``` #### Attribute Values
tdsElementResult[]Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.
tdsElementResult[].elementTypeRequired. Element type of the failed element, copied from the request.
tdsElementResult[].nameRequired. Name of the failed element, copied from the request.
tdsElementResult[].statusRequired. Failure status for this element.
tdsElementResult[].status.codeRequired (within status). The translated HTTP status for this element (200, 400, 401, 403, 404, 409, 500, or 503). Not a Tableau 6-digit error sub-code.
tdsElementResult[].status.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400400008Missing tdsElementListtdsElementList is missing or empty. The list is required and must contain at least one element.
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Per-element invalid argumentOne or more elements were rejected as invalid. The body lists only the failed elements, and each status.code is the HTTP status 400.
400Unmapped per-element gRPC statusThe TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
401Per-element unauthenticatedThe TDS service rejected an element as unauthenticated. The body lists only the failed elements.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
403Per-element permission deniedThe TDS service rejected an element because permission was denied. The body lists only the failed elements.
404Per-element not foundOne or more elements were not found. The body lists only the failed elements. This is not error code 404065, which the read methods return for a missing named element.
405405000Method not allowedThe HTTP method is not supported for this resource.
409Per-element already existsOne or more elements already exist. The body lists only the failed elements.
429429000Rate limit exceededToo many requests sent in a given time period.
500Per-element internal errorThe TDS service failed while editing an element. The body lists only the failed elements.
503Per-element unavailableThe TDS service was unavailable while editing an element. The body lists only the failed elements.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Workbook Permissions Adds permissions to the specified workbook for a user or group. You can specify multiple sets of permissions using one call. #### URI PUT /api/api-version/sites/site-id/workbooks/workbook-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to set permissions for.
#### Request Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Attribute Values
workbook-id The <workbook> element is not required, but can be included for compatibility with earlier versions of the REST API. If the <workbook> element is included, the workbook-id value must match the workbook ID in the URI. Any other attributes in the <workbook> element are ignored.
user-id The ID (not name) of the user to add permissions for.
group-id The ID (not name) of the group to add permissions for.
capability-name

The capability to assign. If any capability has already been granted or denied for a specified user or group, that capability is ignored. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, CreateRefreshMetrics, Delete, ExportData, ExportImage, ExportXml, ExtractRefresh, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it. This value is case sensitive.
#### Permissions Users who are not server administrators or site administrators can call this method only if the have permission to set permissions on the workbook (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, CreateRefreshMetrics, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundA user ID in the request body doesn't correspond to an existing user.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Workbook to Favorites Adds the specified workbook to a user's favorites. If the user already has the workbook listed as a favorite with the same label, the operation has no effect. If the label differs, the original favorite is overwritten. #### URI PUT /api/api-version/sites/site-id/favorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
user-idThe ID of the user to add the favorite for.
#### Request Body ``` ``` #### Attribute Values
favorite-labelA label to assign to the favorite. This value is displayed when you search for favorites on the server. If the label is already in use for another workbook, an error is returned.
workbook-idThe ID (not name) of the workbook to add as a favorite.
#### Permissions Tableau Server users who are not administrators or site administrators can call this method only if they have permission to add a workbook to a favorites list. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 ``` ... additional favorites ... ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400005 Invalid label

The favorite label is empty or consists of only white space characters.

403 403004 Access to Favorites forbidden

A non-administrator user called this method but doesn't have permission to add a workbook to the specified user's favorites. This will always be the case when the user references in the URI identifies a user other than the user who is calling the method.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The user ID in the URI doesn't correspond to an existing user.
404 404006 Workbook not found The workbook ID in the request body doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Workbook to Server Schedule Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server. The task type must match the schedule type. For a list of schedule types, see [Create a Schedule](#create_schedule). _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task)._ **Note:** This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI PUT /api/api-version/sites/site-id/schedules/schedule-id/workbooks #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
schedule-idThe ID of the schedule that you are associating with the workbook.
#### Request Body ``` ``` #### Attribute Values
workbook-idThe ID of the workbook to add to the schedule.
#### Permissions Only Tableau Server users who are server administrators or site administrators can add a workbook to a data acceleration schedule. Tableau Server users who are not server administrators or site administrators can only add a workbook to other types of schedules if they own the workbook, or are the project leader for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:schedules: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 ``` ``` #### Version Starting in Tableau Server 10.5 (API 2.8) you can add a task to refresh a workbook extract. In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15), you can add a task to add data acceleration to a workbook. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user called this method, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404006Resource not foundThe workbook ID in the request body is unknown.
405405000Invalid request methodRequest type was not PUT.
500500000Internal Server ErrorThe schedule ID in the URI is unknown.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/ 1edc53ac-e247-4870-9fd3-6fad0ce5f84d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/workbooks" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @add-to-schedule.xml"` **Content of add-to-schedule.xml:** ``` ``` **Example response:** ``` ``` ## Allow dashboard extension on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Adds a dashboard extension to the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/settings/site/extensions/dashboard/safeListItems [view details](#) ## Append to File Upload Uploads a block of data and appends it to the data that is already uploaded. Call this method after an upload has been initiated using [Initiate File Upload](#initiate_file_upload), as many times as needed to upload all the blocks and complete the file. (A file is limited to 10,000 blocks.) You can safely make multiple simultaneous calls to this method as long as you use the sequenceID parameter in the URI querystring. Doing so will upload the blocks in parallel and decrease the time needed to complete the file, provided there is enough available bandwidth. When the final block of data has been uploaded, you call [Publish Data Source](#publish_data_source), [Publish Flow](#publish_flow), or [Publish Workbook](#publish_workbook) to commit the file. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI PUT /api/api-version/sites/site-id/fileUploads/upload-session-id?sequenceID=sequence-id #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site to upload the file to.
upload-session-id The ID of the upload session. You get this value when you start an upload session using Initiate File Upload.

sequence-id

(Optional) A long integer that you choose, indicative of the block's order in the complete sequence.

After you append all the blocks and call the Publish Data Source, Publish Flow, or Publish Workbook method, the sequenceID is used to order the blocks, low sequenceID to high sequenceID, and the combined blocks are written as the file. Therefore, the sequenceID should be incremented for each block (though it doesn't have to incremented by 1).

If you don't include sequenceID in the URI querystring, the uploaded blocks are processed in the order they arrive. Network conditions can cause blocks to arrive out of order, which could result in a corrupted file if sequenceID isn't used.

Note: The sequenceID parameter is available starting in API version 3.27 (Tableau Cloud December 2025 / Server 2025.3). If you're using API version 3.26 (Tableau Cloud June 2025 / Server 2025.1) or earlier, the file is assembled using each block's arrival time.

#### Request Body The content of the file to be uploaded is included in a MIME multipart message. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### Permissions Users who are not server administrators or site administrators can call this method only if they have publishing rights on the site. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:file_uploads: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 200 #### Response Body ``` ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400016File size too largeThe attached file exceeds the configured maximum attachment size for a single append call. The maximum allowable size will be reported in the error response.
400400019Malformed request bodyThe XML content in the MIME multipart request is not empty.
400400020Missing file dataThere is no attachment in the request with the file data to be appended to the upload.
403403007Not a publisherA non-administrator user attempted to initiate a file upload, but the caller doesn't have publishing rights on the site.
403403016Upload failureThe file could not be uploaded for some other reason than those specified earlier.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404015File upload not foundThe file upload ID in the URI doesn't correspond to an existing file upload.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Batch Add or Update Data Quality Certifications Create or update one or more data quality certifications for different content and asset items. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Update Labels](#update_labels_on_assets) method instead. A content or asset item can only have up to one data quality certification applied to it. Adding a data quality certification to an item that already has one will update the data quality certification with the latest specified values. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/api-version/sites/site-id/dataQualityCertifications #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid, however **type** and **message** attributes are required.
content

The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:

  • database
  • table
  • datasource
  • virtualconnection
  • virtualconnectiontable
database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
datasource-id The unique ID of the data source content.
virtualconnection-id The unique ID of the virtual connection asset.
virtualconnectiontable-id The unique ID of the virtual connection table asset.
type

Use the following value to apply a data quality certification: CERTIFIED.

message A custom message to accompany the data quality certification. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
state (Optional) Controls whether the data quality certification displays. Value can be "true" or "false". If the state is not specified, the data quality certification is set to "true" and is visible by default. For more information about data quality certifications, see "Set a Data Quality Certification" in the Server Help or Cloud Help.
severity (Optional) Enables high visibility for when the data quality certification is set to "true". Value can be "true" or "false". If the severity is not specified, the data quality certification is set to "false." This setting is available only through the REST API.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add or update data quality certifications: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 201 #### Response Body **Example response** ``` ``` #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400108Generic data quality certification errorThe data quality certification could not be added for some reason other than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
## Batch Add or Update Data Quality Warnings Add or update multiple data quality warnings on assets. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Update Labels](#update_labels_on_assets) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/api-version/sites/site-id/dataQualityWarnings/createOrUpdate #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values
content

The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
column-id The unique ID of the column asset.
datasource-id The unique ID of the data source content.
flow-id The unique ID of the flow content.
virtualconnection-id The unique ID of the virtual connection.
virtualconnectiontable-id The unique ID of the virtual connection table.
type

The type of data quality warning to apply to the content or asset. To specify type, use one of the following values:

  • DEPRECATED
  • WARNING
  • STALE
  • SENSITIVE_DATA
  • MAINTENANCE
message (Optional) A custom message to accompany the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
state (Optional) Controls whether the data quality warning displays. Value can be "true" or "false". If the state is not specified, the data quality warning is set to "true" and is visible by default. For more information about data quality warnings, see "Set a Data Quality Warning" in the Server Help or Cloud Help.
severity (Optional) Enables high visibility for when the data quality warning is set to "true". Value can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to batch add or update data quality warnings: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400109Bad requestThe content of the request body (content type, content id, or dataQualityWarning attributes) is missing, incomplete, or contains malformed XML.
400400108Generic add data quality warning errorThe data quality warning could not be added for some other reason than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
## Batch Add Tags Add multiple tags to items that are different content and asset types. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI PUT api/api-version/sites/site-id/tags:batchCreate #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to item.

tag-value2

Keyword text you want to add to item.

database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
column-id The unique ID of the column asset.
datasource-id The unique ID of the data source content.
workbook-id The unique ID of the workbook content.
flow-id The unique ID of the flow content.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to add tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tags:batch_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 200 #### Response Body **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
404404031Database not foundThe database asset does not exist.
404404032Table not foundThe table asset does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
409409066Column not foundThe column asset does not exist.
## Batch create Pulse subscriptions Creates multiple subscriptions to a metric for specified users and/or groups. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can create subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:create\` Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/subscriptions:batchCreate [view details](#) ## Batch Delete Data Quality Warnings Delete multiple data quality warnings from assets. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Labels](#delete_labels_on_assets) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/api-version/sites/site-id/dataQualityWarnings/batchDelete #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values
content

The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
column-id The unique ID of the column asset.
datasource-id The unique ID of the data source content.
flow-id The unique ID of the flow content.
virtualconnection-id The unique ID of the virtual connection.
virtualconnectiontable-id The unique ID of the virtual connection table.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete data quality warnings: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
404404031Database not foundThe database asset does not exist.
404404032Table not foundThe table asset does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
## Batch Delete Tags Delete multiple tags from items that are different content and asset types. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI DELETE api/api-version/sites/site-id/tags:BatchDelete #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values
tag-value1

Keyword text you want to add to item.

tag-value2

Keyword text you want to add to item.

database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
column-id The unique ID of the column asset.
datasource-id The unique ID of the data source content.
workbook-id The unique ID of the workbook content.
flow-id The unique ID of the flow content.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tags:batch_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 **Example response** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Content not foundThe content does not exist.
404404031Database not foundThe database asset does not exist.
404404032Table not foundThe table asset does not exist.
409409004Invalid parameterOne or more values in the request body are invalid.
409409066Column not foundThe column asset does not exist.
## Batch get Pulse subscriber counts Gets the number of unique users subscribed to a set of metrics specified in a comma separated list of metric LUIDs. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can create subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:read\` Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/subscriptions:batchGetMetricFollowerCounts [view details](#) ## Batch get Pulse subscriptions Gets a batch of subscriptions, specified in a comma delimited list of subscriptions LUIDs. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can get the details of subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:read\` Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/subscriptions:batchGet [view details](#) ## Batch list metric definitions (few) Gets the details of a batch of metric definitions and metrics on a site, specified in a brief comma delimited list of LUIDs. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/definitions:batchGet [view details](#) ## Batch list metric definitions (many) Gets the details of a batch of definitions specified in a comma delimited list of LUIDs. This method is optimized for batches with large numbers of definitions. **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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) **Permissions:** Any user can make this request but users will see results only for metrics they have permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/definitions:batchGet [view details](#) ## Batch list metrics (few) Gets a batch of metrics from a definition, specified in a comma delimited list. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can get a batch of metrics as long as the user has read or connect access to the data source used in the definition that contains them. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\` Access Scopes Overview: [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/metrics:batchGet [view details](#) ## Batch list metrics (many) Gets batches of metrics available on a server. Only metrics a user has privileges to view will be visible. This endpoint uses POST as an alternative to GET, where long lists of URL parameters could be problematic. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can get a batch of metrics as long as the user has read or connect access to the data source used in the definition that contains them. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\` Access Scopes Overview: [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/metrics:batchGet [view details](#) ## Batch update collections Batch updates collections. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:update. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/collections/batchUpdate [view details](#) ## Batch Update Schedule State Updates the state of one or more schedules. Use the `updateAll` URI parameter to update the state of all schedules in a single call. **Version**: Available in API 3.27 (Tableau Server 2025.3 and later. Not available for Tableau Cloud.) **License**: No additional license required. **Permissions**: Only server administrators. **Access Scope**: `tableau:schedules:update` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/schedules?state=state-enum PUT /api/api-version/schedules?state=state-enum&updateAll=update-all-flag #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
state-enum Required, enum. Either active or suspended. The state for the schedule(s).

update-all-flag

Optional, boolean. If true, then the list of schedule IDs in the request body is ignored, and the operation affects all schedules on the Tableau Server.

Note: A common use case for this method is suspending all schedules before a maintenance window using the `updateAll` URI parameter. If, after the maintenance window, you use the same tactic and _activate_ all schedules using the `updateAll` URI parameter, you risk activating schedules that may have been intentionally suspended in the past, before you used `updateAll` to suspended all schedules. Instead, when suspending all schedules using the `updateAll` URI parameter, note which schedule LUIDs appear in the response body. This tells you which schedules were changed from active to suspended. Then, after the maintenance window, re-activatate only those schedules, not _all_ schedules. #### Request Body ``` schedule-id ``` { "scheduleLuids": { "scheduleLuid": \[ "schedule-id" \] } } #### Request Attributes

schedule-id

The LUID of the schedule. You can include multiple schedule-ids using additional <scheduleLuid> elements (in XML) or by comma-separating multiple schedule-ids (in JSON).

Note: If the updateAll URI parameter is included, schedule-ids in the request body are ignored.

#### cURL Request Example ``` curl "https://MY-SERVER/api/3.27/schedules?state=active&updateAll=true" -X PUT -H "X-Tableau-Auth: a1B2c3D4e5F6g7H8i9J0kL|a1B2c3D4e5F6g7H8i9J0kL1m2N3o4P5q|12345678-90ab-4cde-8f01-234567890abc" -d @data.xml ``` **Content of data.xml:** ``` 12ab34cd-56ef-78ab-90cd-12ef34ab56cd 08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6 ``` #### Response Code 200 #### Response Body The response body is a list of schedules that were updated with the call. ``` schedule-id ``` ``` { "scheduleLuids": { "scheduleLuid": [ "schedule-id" ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Generic errorAn unknown error occurred. The content of the request body may be missing or incomplete, or may contain malformed XML.
403403188Permissions errorUser calling the method isn't a server administrator.
403403189Invalid LUIDOne or more of the schedule LUIDs isn't a valid LUID.
404404023LUID not foundOne or more of the schedule LUIDs isn't found.
405405000Availability errorThis method only exists on Tableau Server. Tableau Cloud isn't supported.
409409004Parameter errorThe state parameter is absent or not recognized; or the updateAll parameter was absent or false and no schedule LUIDs were provided.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Block dashboard extension on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Adds a dashboard extension to the block list of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/settings/server/extensions/dashboard/blockListItems [view details](#) ## Block Domain Blocks a domain from being used with any Bridge pool, preventing Bridge clients from that domain from connecting. Blocking is site-specific and takes precedence over pool assignments; blocked domains cannot be added to any pool. Existing connections from the domain may be terminated. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-domain-maps/block-domain #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "example.com", "isBlocked": true } } ``` #### Attribute Values
existingDomainNameRequired. The domain to block or unblock.
isBlockedSet to true to block the domain; set to false to unblock (remove from blocked list).
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid domain name or missing isBlockedDomain must conform to valid format; isBlocked parameter is required.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503905Unexpected server errorAn unexpected error occurred while blocking the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Cancel Flow Run Cancels a flow run that is in progress. #### URI PUT /api/api-version/sites/site-id/flows/runs/flow-run-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-run-idThe ID of the flow run.
#### Request Body None #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_runs: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 None #### Version Version 3.10 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403135Flow run already completeThe flow run is already complete so it could not be canceled.
403403137User does not have permissions to cancel flow runIn addition to server administrators and site administrators, users can cancel a flow run if they initiated the flow run or created the flow run scheduled task and have "Run Flow Now" permissions for the flow.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404036Flow run not foundThe flow run ID in the URI doesn't correspond to an existing flow run.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Cancel Job Cancels a job specified by job ID. To get a list of job IDs for jobs that are currently queued or in-progress, use the [Query Jobs](#query_jobs) method. The following jobs can be canceled using the **Cancel Job** method: - Full extract refresh - Incremental extract refresh - Subscription - Flow Run - Data Acceleration _Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2._ - Bridge full extract refresh - Bridge incremental extract refresh - Queue upgrade Thumbnail (Job that puts the upgrade thumbnail job on the queue) - Upgrade Thumbnail #### URI PUT /api/_api-version_/sites/_site-id_/jobs/_job-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site where the job is running.
job-idThe ID of the job to cancel.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:jobs: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 None #### Version Version 3.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403032Update forbiddenA non-administrator user tried to cancel a job.
403403091Can not cancel job, because it's already complete.The job ID provided is for a job that has already succeeded or failed.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/jobs/2474164d-8d37-4a4c-abc7-c2070fd25fd5" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Configure Identity Store Configure a new local identity store to provision users. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/authn-service/identity-stores [view details](#) ## Create a collection Creates a new collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:create. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/collections [view details](#) ## Create a semantic context Create a semantic context node carrying one or more statements. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:write\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/semantic-contexts [view details](#) ## Create a Webhook Creates a new webhook for a site. #### URI POST /api/3.6/sites//webhooks #### Parameter Values
site-idThe ID of the site in which you want to create the webhook.
#### Request Body #### Attribute Values
webhook-name This is required. A name for the webhook.
api-event-name | webhook-source-api-event-name

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. 

Recommended: 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.

url Required. The destination URL for the webhook. The webhook destination URL must be https and have a valid certificate.
webhook-enabled-flag (Optional) Boolean. If true (default), the newly created webhook is enabled. If false then the webhook will be disabled.  
#### 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 #### Response Headers Location: /api/3.29/sites/site-id/webhooks/ ## Create an Extract for a Data Source Create an extract for a data source in a site. Optionally, encrypt the extract if the site and workbooks using it are configured to allow it. #### URI POST /api/api-version/sites/site-id/datasources/datasource-id/createExtract POST /api/api-version/sites/site-id/datasources/datasource-id/createExtract?encrypt=encryption-flag #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site.
datasource-idThe LUID of the datasource.
encryption-flagIf true, then Tableau will attempt to encrypt the created extracts. If false, or no encrypt parameter is appended to the URI, then the extract won't be encrypted, unless encryption is enforced by site or workbook configuration. An error will be returned when encrypt equals true and encryption is disabled in the site or workbook.
#### Request Body None #### Permissions Extracts for data sources can be created by Tableau server or site administrators, and by users who own the data source or are an owner or leader of the project where the data source resides. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extracts: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 200 #### Response Body ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
409409070Invalid request methodThe data source cannot be extracted because it is file based or in another unsupported form.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/createExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE"` **Response body:** ``` df410925-feae-481d-bf84-2f37bdf7ce69 ``` ## Create ask data lens - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Create an ask data lens. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users who have Create permissions for lenses on the site. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:create\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/askdata/lenses [view details](#) ## Create Authentication Configuration Create an instance of OpenID Connect (OIDC) authentication. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/authn-service/auth-configurations [view details](#) ## Create Bridge Pool Creates a new Bridge pool with the specified name. The pool is created empty (no domain assignments or Bridge clients). The system assigns a UUID; use List Bridge Pools to get the pool ID after creation, then add domains and assign clients. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/bridge-pools #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "edgePool": { "pool": { "name": "Production Pool" } } } ``` #### Attribute Values
nameRequired. Display name for the pool, 1–80 characters. Must be unique within the site.
#### Response Code 201 Created #### Response Body None. The pool is created with a system-generated UUID; use List Bridge Pools to get the pool ID. #### Errors
HTTP statuserror CodeConditionDetails
400409004 / 400929Missing, empty, invalid, or duplicate pool namePool name required, 1–80 characters; must be unique on the site.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503900Unexpected server errorAn unexpected error occurred while creating the pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Cloud Extract Refresh Task Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection. _For Tableau Server, see [Add data source to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_data_source_to_schedule), [Add workbook to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_workbook_to_schedule), and [Add virtual connection to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_virtual_connection_to_schedule)._ **Version:** Available in API 3.20 (Tableau Cloud June 2023) and later. Virtual connection support added in API 3.30. 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 for a data source or workbook target. A virtual connection target requires Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions:** Administrators and any user with the creator role can create a custom schedule for an extract refresh.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks: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-id/tasks/extractRefreshes #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
#### Request Body ``` ``` ``` { "extractRefresh": { "type": "FullRefresh", "workbook": { "id": "54321fd-6365-44d5-925b-644e5281b605" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } ``` #### Request Attributes All request attributes are **required** to create a custom schedule for an extract refresh, except where noted below.
extractRefresh type The type of extract refresh being scheduled. Valid values include:
  • FullRefresh
  • IncrementalExtract
extractRefresh transactionLevel

(Optional) : Only used with a virtual connection.

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
workbook id
or datasource id
or virtualConnection id
The LUID of the workbook, data source, or virtual connection that is the target of the custom schedule.
startingItemId

Only used with a virtual connection, when extractRefresh type is FullRefresh

The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element. See Virtual Connection Example.

tableLuid

Only used with a virtual connection, when extractRefresh type is IncrementalExtract

The LUID of an extract table in the virtual connection. You may have more than one <tableLiud> element inside of a <tableLiuds> element. See Virtual Connection Example.

schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### Virtual Connection Example When the target is a virtual connection, use `virtualConnection id` instead of `workbook id` or `datasource id`. The following example includes only the `` and child elements for brevity; see the primary example above for the a full request without the elements that apply only to virtual connections. _Incremental refresh of specific tables, with a table-level transaction:_ ``` b4e39d59-19c3-4380-8ea4-9bfa4ed8fb84 ``` #### cURL Request Example `curl --location --request POST "https://10ax.online.tableau.com/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/tasks/extractRefreshes" --header "Content-Type: application/xml" --data " "` 200 #### Response Body When the target is a virtual connection, the response's `extractRefresh` element includes a `transactionLevel` attribute and a `virtualConnection` element (with a sibling `startingItemIds`, if starting items were specified) in place of `datasource` or `workbook`. ``` ``` ``` { "extractRefresh": { "id": "13237fd-6365-44d5-925b-644e5281b605", "consecutiveFailedCount": "0", "type": "IncrementalRefresh", "datasource": { "id": "0057ccac-872a-11e5-bb51-f763326b1350" } }, "schedule": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400400225Duplicate starting itemstartingItemIds contains a duplicate table LUID.
409409090Extract operation not allowedThe virtual connection has no extract-configured tables; all tables are live.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
404404026Task not foundThe task for the extract refresh could not be found.
409409004invalid parameter valueThe request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between start and end times are not increments of one hour, this error will result.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Cloud Flow Task Creates a flow task on Tableau Cloud, and set its schedule. **Note:** This method is unavailable if you do not have a Data Management license or Tableau Prep Conductor is disabled for your site. **Version:** Available in API 3.22 (Tableau Cloud April 2024) 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:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** A user can create a cloud flow task if you are a site or server administrator, or they own the flow, or are the project leader for the project that contains the workbook.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** Not available. #### URI POST /api/api-version/sites/site-luid/tasks/flows #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "task": { "flowRun": { "flow": { "id": "dd3cd2e7-2ede-49c6-945f-e7b2a2f25541" } } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "12:30:00", "end": "23:30:00", "intervals": { "interval: [ { "hours": "4" }, { "weekDay": "Monday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Request Attributes
flow.id(Required)The LUID of the flow the task is being scheduled for.
schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### 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 ``` ``` ``` { "task": { "flowRun": { "id": "4d49655a-0f3a-45cc-ba61-b108a763e83a", "priority": "50", "consecutiveFailedCount": "0", "type": "RunFlowTask", "schedule": { "id": "1060dcb7-fef7-4fb1-8d3b-d0f042932d1a", "name": "SSS_e95a9d25-c616-4542-87b6-3725975bdfbd", "state": "Active", "priority": "50", "createdAt": "2024-04-09T18:54:12Z", "updatedAt": "2024-04-09T18:54:12Z", "type": "Flow", "frequency": "Daily", "nextRunAt": "2024-04-10T19:30:00Z" }, "flow": { "id": "dd3cd2e7-2ede-49c6-945f-e7b2a2f25541", "name": "olympic 1", "parameters": { "parameter": { "id": "4f22c514-5b56-4400-a48a-f69d9be217a9", "type": "integer", "name": "output_count", "description": "This is a parameter of a flow.", "value": "2", "isRequired": "true", "domain": { "xsi_type": "flowParameterAnyDomainType", "domainType": "all" } } } }, "flowRunSpec": { "flowId": "dd3cd2e7-2ede-49c6-945f-e7b2a2f25541", "flowOutputSteps": { "flowOutputStep": { "id": "485c8b5f-5647-466c-b549-e38410b7c7c8", "name": "Output" } }, "flowParameterSpecs": [] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Connected App Create a connected app. A connected app can be used to securely authenticate your users to Tableau content embedded in a custom application or for REST API authorization (introduced to Tableau Cloud in June 2022 and Tableau Server 2023). By creating a connected app, you can establish a trusted relationship between Tableau and any custom application. For more information about connected apps, see one of the following: - For Tableau Server: [Configure Tableau Connected Apps to Enable SSO for Embedded Content](https://help.tableau.com/current/server-linux/en-us/connected_apps.htm) - For Tableau Cloud: [Configure Tableau Connected Apps with Direct Trust](https://help.tableau.com/current/online/en-us/connected_apps_direct.htm) #### URI POST api/_api-version_/sites/_site-id_/connected-apps/direct-trust **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body Tableau Cloud and Tableau Server using API 3.23 or later ``` project_id project_id project_id ``` Tableau Server (or Tableau Cloud) using API 3.21 or earlier ``` ``` #### Attribute Values Any combination of attributes inside the element is valid, however name is required.
name Name of the connected app.
enabled (Optional) Controls whether the connected app is enabled or not. Value can be "true" or "false". If the state is not specified, the connected app is set to "false" and not enabled by default.
project_id

(Optional, embedding workflows only) The IDs of the projects that the connected app's access level is scoped to. To get a project's project ID, see Query Projects. You can specify one project, multiple projects, all projects on a site.

  • Single project:

    • For Tableau Cloud (using API 3.22 or later) and Tableau Server (using API 3.23 or later), to scope the connected app's access to one project, the recommended workflow is to specify the projectIds and projectId attributes and projectId value.

    • For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, specify the projectId parameter and its value.

  • Multiple projects: Beginning with API 3.22 (February 2024) for Tableau Cloud and API 3.23 for Tableau Server, you can specify the projectIds attribute and projectId values to scope the connected app's access to multiple projects.

  • All projects:

    • For Tableau Cloud (using API 3.22 or later) and Tableau Server (using API 3.23 or later), to scope the connected app's access to all projects on a site, omit the projectIds attribute from the request.

    • For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, to scope the connected app's access to all projects on a site, omit the projectId attribute from the request.

    Note: Specifying "all projects" in an update request for a connected app is handled differently. For more information, see update project.

Note: The stand-alone projectId attribute will be retired in a future release so we recommend using projectIds attribute instead.

domainSafelist

(Optional, embedding workflows only) A list of domains the connected app is allowed to be hosted. Specify one or more URLs, separated by spaces, using a format described in Domain allowlist rules in the Tableau Server Help or Domain allowlist rules in the Tableau Cloud Help.

Important: We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow.

For example: https://tableau.com https://myco.com:552 marketing.example.com

unrestrictedEmbedding (Optional, embedding workflows only) Controls whether the connected app can be hosted on all domains. If "true" value is specified, the connected app can be hosted on all domains. If "false" value is specified, the connected app can only be hosted on the domains specified in the <domainSafelist> attribute.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 **Example response:** ``` ConnectedApp_MyCo true ac95d175-c844-4779-9d58-415e01fe7dab 1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-10T18:46:30Z true ``` **Note:** When the scope of the connected app's access is set to all projects, the request does not return the `projectId` attribute. #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, POST /api/_api-version_/sites/_site-id_/connected-apps/direct-trust, was added in version 3.17. The original resource, POST /api/_api-version_/sites/_site-id_/connected-applications, was deprecated in API 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400109Bad requestThe request body can't be empty.
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## Create Connected App Secret Generate a secret for a connected app. Secrets are tokens shared by Tableau and a custom application, and used to establish a trusted relationship. A maximum of two secrets can be associated with a connected app. These secrets do not expire and remain valid until deleted. If a connected app has already reached its two secret maximum when another one is generated, an error is thrown. #### URI POST api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Response Code 201 #### Response Body The request returns details about the generated secret, including the secret value ``. **Example response:** ``` TO7/wkW+45U001IBtyNbtyIMYQ/GBM0XlRXqsgYqPlY= 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b 2021-08-10T18:48:40Z ``` #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, POST /api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets, was added in version 3.17. The original resource, POST /api/_api-version_/sites/_site-id_/connected-applications/_client-id_/secrets, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP status error Code Condition Details
400 400143 Generic connected app error The connected app could not be deleted for some other reason than those specified in this table.
400 400144 Secret limit exceeded

The connected app has already reached its two secret maximum.

403 403000 Admin permissions required A non-admin user called this method and doesn't have adequate permissions to perform the action.
404 404000 Resource not found The site ID in the URI doesn't correspond to an existing site.
404 404041 Connected app not found The requested connected app could not be found.
404 404042 Secret not found The requested secret for the connected app could not be found.
## Create custom domain settings Starts the process of custom domain setup for a Tableau site. **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Only users with administrator permissions can create a custom domain for a site. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:create\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/customdomains/settings/site/{site\_luid} [view details](#) ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body Copy ```    -->  />  ``` 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
dataAlertCreateAlert alertCondition

(Required) Enumeration: 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:

  • above
  • above-equal
  • below
  • below-equal
  • equal
dataAlertCreateAlert alertThreshold (Required) Int: The data value where an alert should be triggered when that value drops below or rises above the alert threshold value.
dataAlertCreateAlert subject (Required) String: The name of the data driven alert.
dataAlertCreateAlert frequency

(Required) Enumeration: The time period between attempts by Tableau to assess whether the alert threshold has been crossed. The value can be one of:

  • once Sends the alert only the first time the alert threshold is crossed.
  • freguently As frequently as possible given server conditions.
  • hourly
  • daily
  • weekly
dataAlertCreateAlert visibility (Required) Enumeration: Determines whether the alert can be seen by only its creator (private), or by any user with permissions to the worksheet where the alert resides (public) . The value can be one of:
  • private
  • public
dataAlertCreateAlert device

(Optional) Enumeration: The type of device the alert is formatted for. If no device is provided then the default device setting of the underlying view is used. Values can be one of:

  • desktop
  • phone
  • tablet
dataAlertCreateAlert worksheetName

(Required) String: The name of the worksheet that the DDA will be created on.

For dashboards, 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.

For custom views, the name of the original view that was used to form the custom view.

dataAlertCreateAlert viewId

OR

dataAlertCreateAlert customViewId

(Required) LUID: The LUID of either the viewId or customViewId that contains the data that can trigger an alert.
#### 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 ```    -->  />  ``` 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
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400403165DDA creation failedA data driven alert could not be created because there is a missing value in the request body.
401401002Unauthorized AccessThe 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.
403403164DDA not enabledData driven alerts are not enabled for the site, or the user visibility site setting is configured as limited.
404404011View not foundThe view specified in the request could not be found.
404409004Request is malformedA data driven alert could not be created because there is an unexpected value in the request body.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Extracts for Embedded Data Sources in a Workbook Create extracts for all embedded data sources of a workbook. Optionally, encrypt the extracts if the site and workbook using them are configured to allow it. When you create an extract for a data source in a workbook, the extract is available only to the workbook and may have configuration specific to the workbook, such as hiding of unused fields. You can create workbook extracts for both embedded and published data sources used by the workbook. When you create a workbook data source for a published data source, then refreshing the workbook extract will retrieve any changes to data from the published datasource, or from the published data source's extract if it is using one. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). #### URI POST /api/api-version/sites/site-id/workbooks/workbook-id/createExtract POST /api/api-version/sites/site-id/workbooks/workbook-id/createExtract?encrypt=encryption-flag #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site.
workbook-idThe LUID of the workbook.
encryption-flagIf true, then Tableau will attempt to encrypt the created extracts. If false, or no encrypt parameter is appended to the URI, then the extract won't be encrypted, unless encryption is enforced by site or workbook configuration. An error will be returned when encrypt equals true and encryption is disabled in the site or workbook.
#### Request Body ``` ``` #### Request Parameter Values
datasource-idLUID of the embedded data source to be extracted.
extract-all-datasources-flagBoolean. If true, then all data sources in the workbook will have an extract created for them. If false, then a data source must be supplied in the request.
#### Permissions Extracts for data sources embedded in a workbook can be created by Tableau server or site administrators, and users who own the workbook, or are an owner or leader of the project where the workbook resides. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extracts: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 `200` #### Response Body ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
409409070Invalid request methodThe data source cannot be extracted because it is file based or in another unsupported form.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/createExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE" -d "@create-extracts-for-workbook.xml"` **Content of** `create-extracts-for-workbook.xml` ```
``` **Response body:** ``` df410925-feae-481d-bf84-2f37bdf7ce69 ``` ## Create Group Creates a group on a Tableau Cloud site or Tableau Server. **Notes:** - To add users to a group, call [Add User To Group](#add_user_to_group). To make changes to an existing group, call [Update Group](#update_group). - After you create a group, the server updates its search index. If you make a query immediately to see the new group, the query results might not be up to date. **Tableau Cloud** The Create Group response returns information in two ways: in the response header and in the response body. The ID of the new group is always returned as the value of the Location header. If you create a local group immediately, the response body contains the name and ID of the new group. **Tableau Server** The Create Group response returns information in two ways: in the response header and in the response body. The ID of the new group is always returned as the value of the Location header. If you create a local group or import an Active Directory group immediately, the response body contains the name and ID of the new group. If you import an Active Directory group using a background process, the response body contains a element that includes a job ID. You can use the job ID to check the status of the operation by calling [Query Job](#query_job). If Tableau Server is configured to use Active Directory for authentication, this method can create a group and then import users from an Active Directory group. If you use the **Create Group** method to import users from an Active Directory, the import process can be performed immediately (synchronously) or as a background job (asynchronously). If Active Directory contains a large number of users, you should import them asynchronously; otherwise, the process can time out. #### URI POST /api/api-version/sites/site-id/groups POST /api/api-version/sites/site-id/groups?asJob=asJob-value #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site to create the group in.
asJob-value A Boolean value that is used if you are importing from Active Directory. If you set this to false (the default), the import process runs as a synchronous process. If the Active Directory group contains many users, the process might time out before it finishes.

If you set this to true, the process runs asynchronously. In that case, Tableau Server starts a job to perform the import and returns the job ID in the Location header. You can check the status of the import job by calling Query Job.

Note: This parameter has no effect if the server is configured to use local authentication.

This attribute is available for Tableau Server only.

#### Request Body **Creating a local group** ``` ``` **Notes:** - When the request is to create a local group and minimumSiteRole is specified, users are granted a license using the grant license on-login mode by default. **Importing a group from Active Directory** (Tableau Server only) ``` ``` **Notes:** - When the request is to create a group with grantLicenseMode, a siteRole value should also be supplied. - When the request body contains an element, a Tableau Server configured to authenticate via Active Directory will create the group and modify the set of users in the group to be the same as those in Active Directory. The source attribute of the element must be set to `ActiveDirectory`. If Tableau Server or Tableau Cloud site is configured to use local authentication, including an element has no effect. - When a group is created by importing from Active Directory, Tableau Server uses the value of the Active Directory `sAMAccountName` attribute as the user name. #### Attribute Values
new-tableau-server-group-name The name for the new group.
active-directory-group-name

The name of the Active Directory group to import.

This attribute is available for Tableau Server only.

active-directory-domain-name

The domain of the Active Directory group to import.

This attribute is available for Tableau Server only.

minimum-site-role

Required if an import element or grantLicenseMode attribute are present in the request. For Tableau Server, the site role assigned to users who are imported from Active Directory or granted a license automatically using the grant license on-sync or on-login mode.

If the requested user name matches an existing user in the group, the user either retains their existing role or are granted the one specified in the request, based on the role that enables the most capabilities. This is true whether the group the user belongs to is imported from Active Directory (Tableau Server only) or local.

Site roles that can be assigned, listed from the one enabling the least capabilities to the most, are as follows.

  1. Unlicensed
  2. Viewer
  3. Explorer
  4. ExplorerCanPublish
  5. Creator
  6. SiteAdministratorExplorer
  7. SiteAdministratorCreator

Note: You cannot use the REST API to set a user to be a Tableau Server administrator (ServerAdministrator site role).

license-mode

The mode for automatically applying licenses for group members. When the mode is onLogin, a license is granted for each group member when they log in to a site.

For local groups, the mode can be either onLogin or unset. If the attribute is omitted, the default mode is unset, which results in no licenses being granted automatically to group members.

For groups that import an Active Directory domain, the mode can be either onSync or onLogin.

The minimum role granted to users through grantLicenseMode is specified in the siteRole attribute. If that role has less permissions than an existing role assigned to the user, then the user's permissions remain unchanged.

on-demand-access

Optional. A boolean value that is used to enable on-demand access for embedded Tableau content when the Tableau Cloud site is licensed with Embedded Analytics usage-based model or capacity-based model with Cloud+ or Tableau+ edition.

Set to true to enable the capability for the group or set to false to disable the capability for the group. For more information about on-demand access, see On-demand access for users in the Tableau Embedding API v3 Help.

This attribute is available for Tableau Cloud only starting from API version 3.21 (October 2023).

#### Permissions This method can only be called by Tableau Server administrators or Tableau Cloud site admins. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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, for creating a local group and for importing immediately 202, for importing using a background process #### Response Headers Location: /api/3.29/sites/site-id/groups/new-group-id #### Response Body **Creating a local group:** ``` ``` **Creating a group and importing from Active Directory immediately (Tableau Server only):** ``` ``` **Importing as a background process:** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400013 Invalid site role

The value of the minimumSiteRole or siteRole attribute must be Creator, Explorer, ExplorerCanPublish, SiteAdministratorCreator, SiteAdministratorExplorer, Unlicensed, or Viewer.

400 400019 Malformed import element When the <import> element is present in the request body, the following attributes must be specified: source with the value ActiveDirectory; domainName; and siteRole If any of these is missing, the element is malformed.
400 400984 Not licensed On-demand access can't be enabled if your site is not licensed with the usage-based model or capacity-based usage model with Tableau+ or Cloud+.
403 403011 Active Directory is not configured The <import> element is present, but Tableau Server is configured for local authentication.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404016 Domain not found The request body includes an <import> element, but the specified domain name doesn't exist in Active Directory.
404 404017 Active Directory group not found The request body includes an <import> element, but no group exists in Active Directory that matches the specified group name.
405 405000 Invalid request method Request type was not POST.
409 409009 Group name conflict The group name in the request already belongs to the specified site. For the purpose of uniqueness checks, group names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example: Local Group `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-local-group.xml` **Content of create-local-group.xml:** ``` ``` **Response header:** `Location: /api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d5-e6f7-a8b9-c0d1-e2f3a4b5c6d` **Response body:** ``` ``` #### Example: Active Directory Group `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-ad-group.xml` **Content of create-ad-group.xml:** ``` ``` **Response header:** `Location: /api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d5-e6f7-a8b9-c0d1-e2f3a4b5c6d` **Response body:** ``` ``` ## Create Group Set Creates a group set with a specified name. **Note**: You can't use this method to populate the group set with groups. After you create a group set and its ID is available, you can add a group to the group set by calling [Add Group to Group Set](#add_group_to_groupset). **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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-id/groupsets #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to create the group in.
#### Request Body Copy ```    name

(Required) Name of the new group set.

#### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets/" --header "Content-Type: application/xml" --header "X-Tableau-Auth: YqB9_MHoTHO26HGsFBFEBg|bQDOIH4MsqFGvUDYTrRYh633vrZHBt6d|a946d998-2ead-4894-bb50-1054a91dcab3" --data " "` #### Response Code 201, for creating a group set. #### Response Body Copy ```    ``` Copy ``` {  "groupSet": {    "id": "4123e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6234",    "name": "marketing-group",    "groupCount": "0"  }} ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400013 Invalid site role

The value of the minimumSiteRole or siteRole attribute must be SiteAdministratorCreator or SiteAdministratorExplorer.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
405 405000 Invalid request method The request type wasn’t POST.
409 409121 Group set name conflict The group set name in the request already belongs to another group set. For the purpose of uniqueness checks, group set names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Identity Pool Create an identity pool. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/authn-service/identity-pools [view details](#) ## Create Label Category Creates a data label category. Note that category is one property of a label value (labelValue), which is itself a property of a label on an asset. Other properties of a labelValue include name and description. These properties determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label categories, but one is required to create, update, delete, and see labels on assets. #### URI POST api/api-version/sites/site-luid/labelCategories #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
#### Request Body ``` ``` #### Attribute Values
label-category-name

The label category name.

Required. Must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)

label-category-description

The label category description.

Required. Must be 1-500 characters in length.

#### Permissions - Only a site or server administrator can create, update, or delete label categories. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_categories: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 200 #### Version Introduced in Tableau Cloud October 2023 (API 3.21) / Server 2023.3 (API 3.21). #### Response Body ``` ``` #### Errors
HTTP status error Code Condition Details
400 400189 Generic create label categories error An unknown error occurred.
403 403004 Operation on resource unauthorized You must be an administrator to create, update, or delete label values.
409 409004 Invalid parameter
  • The category name must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, the category name must be 1-24 characters long.)
  • The category name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label categories names.
  • The category description must be 1-500 characters in length.
## Create metric Creates a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:create\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/metrics [view details](#) ## Create metric definition Creates a metric definition. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions:create\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/definitions [view details](#) ## Create metric tag for user Creates a tag for the specified metric, for the signed in user. **Version:** Available in API 3.25 (Tableau Cloud March 2025) 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) **Permissions:** Anyone can make this request but users will see results only for metrics they have permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/metrics/{metric\_id}/tag [view details](#) ## Create OpenID Connect Configuration Create the Tableau Cloud site's OpenID Connect (OIDC) configuration. After you've configured OIDC authentication, you can use the Tableau Cloud's UI to [test the configuration](https://help.tableau.com/current/online/en-us/openid_auth_server_config.htm#test) and [add users](https://help.tableau.com/current/online/en-us/openid_auth_server_config.htm#test). For more information about OIDC authentication in Tableau Cloud, see [OpenID Connect](https://help.tableau.com/current/online/en-us/openid_auth.htm) in the Tableau Cloud Help. **Version:** Available in API 3.22 (Tableau Cloud February 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI PUT /api/api-version/sites/site-luid/site-oidc-configuration #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body Copy ```    ``` Copy ``` {  "siteOIDCConfiguration": {    "idpConfigurationName": "idpConfigurationName",    "enabled": "enabled",    "clientId": "clientId",    "clientSecret": "clientSecret",    "authorizationEndpoint": "authorizationEndpoint",    "tokenEndpoint": "tokenEndpoint",    "userinfoEndpoint": "userinfoEndpoint",    "jwksUri": "jwksUri",    "endSessionEndpoint": "endSessionEndpoint",    "allowEmbeddedAuthentication": "allowEmbeddedAuthentication",    "prompt":"prompt",    "customScope":"customScope",    "clientAuthentication": "clientAuthentication",    "essentialAcrValues": "essentialAcrValues",    "voluntaryAcrValues": "voluntaryAcrValues",    "emailMapping": "emailMapping",    "firstNameMapping": "firstNameMapping",    "lastNameMapping": "lastNameMapping",    "fullNameMapping": "fullNameMapping",    "useFullName": "useFullName"    }} ``` #### Request Attributes
idpConfigurationName

(Required) The name of the configuration.

Starting in API 3.24, you can create and enable multiple authentication configurations. For more information, see Authentication in the Tableau Cloud Help.

enabled (Required) Controls whether the configuration is enabled or not. Value can be "true" or "false". For example "true".
clientId (Required) The client ID from your IdP. For example, "0oa111usf1gpUkVUt0h1".
clientSecret (Required) The client secret from your IdP.
authorizationEndpoint (Required) Use the authorization endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the user information endpoint (authorization_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/authorize".
tokenEndpoint (Required) Use the token endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the token endpoint (token_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/token".
userinfoEndpoint (Required) Use the user information endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the user information endpoint (userinfo_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/userinfo".
jwksUri (Required) Use the JWK set URI from your IdP. To find the value, enter the configuration URL in a browser and obtain the JWK set URI endpoint (jwks_uri) from the details that are returned. For example, "https://myidp.com/oauth2/v1/keys".
endSessionEndpoint (Optional) If single logout (SLO) is enabled for the site, which is done through Tableau Cloud site UI, you can specify the configuration URL or the end session endpoint from your IdP. For example, "https://myidp.com/oauth2/v1/logout".
allowEmbeddedAuthentication (Optional) Controls how users authenticate when accessing embedded views. Value can be "true" or "false". Default value is "false", which authenticates users in a separate pop-up window. When set to "true", users authenticate using an inline frame (IFrame), which is less secure.
customScope (Optional) Specifies a custom scope user-related value that you can use to query the IdP. For example, "openid, email, profile".
prompt (Optional) Specifies whether the user is prompted for re-authentication and consent. For example, "login, consent".
clientAuthentication (Optional) Token endpoint authentication method. Value can be "client_secret_basic" or "client_secret_post". Default value is "client_secret_basic".
essentialAcrValues (Optional) List of essential Authentication Context Reference Class values used for authentication. For example, "phr".
voluntaryAcrValues (Optional) List of voluntary Authentication Context Reference Class values used for authentication.
emailMapping (Optional) Claim for retrieving email from the OIDC token. Default value is "email".
firstNameMapping (Optional) Claim for retrieving first name from the OIDC token. Default value is "given_name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "false".
lastNameMapping (Optional) Claim for retrieving last name from the OIDC token. Default value is "family_name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "false".
fullNameMapping (Optional) Claim for retrieving name from the OIDC token. Default value is "name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "true".
useFullName (Optional) Controls what is used as the display name. Value can be "true" or "false". Default value is "false", which uses first name (firstNameMapping attribute) and last name (lastNameMapping attribute) as the user display name. When set to "true", full name (fullNameMapping attribute) is used as the user display name.
#### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/site-oidc-configuration" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-update-oidc-config.xml` **Content of create-update-oidc-config.xml:** Copy ```    ``` #### Response Code 200 #### Response Body Copy ```   "    authorizationEndpoint="https://myidp.com/oauth2/v1/authorize"    tokenEndpoint="https://myidp.com/oauth2/v1/token"    userinfoEndpoint="https://myidp.com/oauth2/v1/userinfo"    jwksUri="https://myidp.com/oauth2/v1/keys"    endSessionEndpoint="https://myidp.com/oauth2/v1/logout"    customScope="openid, email, profile"    prompt="login,consent"    clientAuthentication="client_secret_basic"    essentialAcrValues="phr"    emailMapping="email"    firstNameMapping="given_name"    lastNameMapping="family_name"    fullNameMapping="name"    useFullName="false" /> ``` Copy ``` {"siteOIDCConfiguration": {    "idpConfigurationName":"Auth_External_OIDC",    "enabled":"true",     "testLoginUrl":"https://sso.online.tableau.com/public/testLogin?alias=080bca2d-578b-49cc-b40d-3781b36b30ee&authSetting=OIDC",    "allowEmbeddedAuthentication":"false",    "clientId":"0oa111usf1gpUkVUt0h1",     "clientSecret":"<omit>",    "authorizationEndpoint":"https://myidp.com/oauth2/v1/authorize",    "tokenEndpoint":"https://myidp.com/oauth2/v1/token",    "userinfoEndpoint":"https://myidp.com/oauth2/v1/userinfo",    "jwksUri":"https://myidp.com/oauth2/v1/keys",    "endSessionEndpoint":"https://myidp.com/oauth2/v1/logout",    "customScope":"openid, email, profile",    "prompt":"login,consent",    "clientAuthentication":"client_secret_basic",    "essentialAcrValues":"phr",    "emailMapping":"email",    "firstNameMapping":"given_name",    "lastNameMapping":"family_name",    "fullNameMapping":"name",    "useFullName":"false"    }} ``` **Notes:** - The response hides the client secret and replaces it with `<omit>`. - You can use the testloginURL attribute to validate the OIDC configuration. When you enter the URL in a browser, details about the configuration displays. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create or Update labelValue Creates a label value with the specified name if it doesn't exist, or updates the existing label value if the label value name already exists. Note: You can update an existing label value using either this method or the [Update labelValue](#ref_update_labelvalue) method. If you want to change the name on an existing label value, use the [Update labelValue](#ref_update_labelvalue) method. Note that a label value (labelValue) is one property of a label. A label value has its own properties like name, category, and description that determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label values, but one is required to create, update, delete, and see labels on assets. #### URI PUT api/api-version/sites/site-luid/labelValues #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
#### Request Body ``` ``` #### Attribute Values
label-value-name

The label value name.

Required. If you specify an existing label value name, this method will update the label value. If you specify a label value name that's different than existing label value names, this method will create the label value.

Required. Must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)

label-value-category

The label value category.

Required. If you're updating an existing label value, this must match the existing category for that label value.

label-value-description

The label value description.

Required, but does not need to be different than the existing description. Must be 1-500 characters in length.

#### Permissions - Only a site or server administrator can create, update, or delete label values. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_values: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 200 #### Version Introduced in Tableau Cloud June 2023 (API 3.20) and Tableau Server 2023.3 (API 3.21). #### Response Body ``` ``` #### Errors
HTTP status error Code Condition Details
401 4000173 Generic create label values error An unknown error occurred.
403 403004 Operation on resource unauthorized You must be a site or server administrator to create or update label values.
403 403157 Bad request You may see this error if you try to create or update a label in the certification category.
409 409004 Invalid parameter
  • The label value name must be 1-128 characters long in Tableau Cloud. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)
  • The name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label value names.
  • The category must match an existing category.
  • You can't change the category on an existing label value.
  • The description can't be empty or over 500 characters.
## Create Project Creates a project on the specified site. You can also create project hierarchies by creating a project under the specified parent project on the site. To make changes to an existing project, call [Update Project](#update_project). **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version:** Available in API 1.0 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:** Only Tableau Administrators can update a project.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:projects: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-id/projects POST /api/api-version/sites/site-id/projects?publishSamples=publish-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to create the project in.
publish-value(Optional) A Boolean value that specifies whether to publish the sample workbooks provided by Tableau to the project. When the publish-value is not specified in the request, or the publishSamples parameter is missing, no samples will be published. To publish the sample workbooks, set publishSamples parameter to true. This option is equivalent to the tabcmd command-line utility option, publishsamples. For more information, see tabcmd.
#### Request Body Copy ```           
``` Copy ``` {  "project": {    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }} ``` #### Attribute Values
project name (Required) The new name for the project.
project description (Optional) The new description for the project.
project parentProjectId

(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.

To create a project as a stand alone or at the top of a project hierarchy, omit the parentProjectId attribute.

For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults.

project contentPermissions

(Optional) This value controls user permissions in a project, however, if the project is nested within a project with more restrictive policies, it will inherit those permissions and these settings will have no effect. The functional permissions of a project, including those it inherits, are available in value of contentPermission in the response body from a request to create, update, or query a project.

  • LockedToProject to lock permissions so that users cannot overwrite the default permissions set for the project
  • ManagedByOwner to allow users to manage permissions for content that they own
  • LockedToProjectWithoutNested to lock the permissions of a parent project, but not those of its child projects.

The default is ManagedByOwner. For more information, see Lock Content Permissions.

owner id The LUID of the user that owns the project.
#### cURL Example `curl --request PUT "https://myServer/api/3.21/sites/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e/projects/xz2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e3w" --header "Content-Type: application/xml" --header "X-Tableau-Auth;" --data " "` #### Response Code 201 #### Response Body Copy ```            ``` Copy ``` {  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }} ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400008 Bad request The request cannot set content permissions to LockedToProjectWithoutNested for a REST API version lower than 3.8.
403 403008 Insufficient storage on site The samples could not be published because there is not enough storage space remaining on the server to accommodate the samples.
404 404000 Site not found

The site ID in the URI doesn't correspond to an existing site.

405 405000 Invalid request method Request type was not POST.
409 409006 Project name conflict The project name in the request already belongs to the specified site. For the purpose of uniqueness checks, project names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Routing Rule Creates a Bridge routing rule for a site. A routing rule controls how Bridge queries for a domain are routed. An allow rule (`isBlocked=false`) routes the domain to a designated pool, optionally scoped to specific projects; a block rule (`isBlocked=true`) prevents the domain from being routed through Bridge. All routing-rule methods require Tableau Cloud site admin privileges and Bridge feature enablement for the site. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/bridge-routing-rules #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "routingRule": { "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "project": [ { "id": "11111111-2222-3333-4444-555555555555" }, { "id": "66666666-7777-8888-9999-000000000000" } ] } } ``` #### Attribute Values
domainRequired. The domain the rule matches, for example example.com. Both root domains and subdomains are supported.
isBlockedRequired. true creates a block rule; false creates an allow rule. The request is rejected if this attribute is omitted.
poolIdRequired for allow rules (isBlocked=false). The UUID of the target Bridge pool. Must be omitted for block rules.
projectOptional. One or more project IDs that scope an allow rule to specific projects. Each entry requires an id. Must be omitted for block rules.
#### Response Code 201 Created #### Response Body Returns the created routing rule. The request accepts only the project `id`; the response returns `id`, `name`, and `isDeleted` for each project, populated by the server. Unset fields are omitted from the response. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "poolName": "WindowsPool", "project": [ { "id": "11111111-2222-3333-4444-555555555555", "name": "Finance", "isDeleted": false } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedMissing routingRule, missing isBlocked, blank or invalid domain, blank or invalid poolId, poolId missing for an allow rule, invalid UUID, or invalid, empty, or not-found projects.
400503910Invariant violationpoolId or project supplied for a block rule.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
409503911Duplicate routing ruleA routing rule already exists for this domain and project scope.
409503931Domain already blockedThe domain is already blocked by an existing block rule.
409503932Domain-only rule existsA domain-only (unscoped) allow rule already exists for this domain; at most one is allowed.
409503933Blocked domain has allow rulesThe domain being blocked still has allow rules; remove them before blocking the domain.
429429000Rate limit exceededToo many requests sent in a given time period.
500503916Unexpected server errorAn unexpected error occurred while creating the rule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create SCIM Configuration Creates the System for Cross-domain Identity Management Configuration (SCIM) configuration on the Tableau Cloud site. The SCIM capability requires that you configure authentication for your Tableau Cloud site and associate the SCIM configuration with the authentication configuration. For more information about the SCIM capability in Tableau, see [SCIM](https://help.tableau.com/current/online/en-us/scim_config_online.htm) in the Tableau Cloud Help. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_configurations:create` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI POST /api/api-version/sites/site-luid/scimConfigurations #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` SCIM Contractors d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658 ``` ``` { "scimConfiguration": { "name": "SCIM Contractors", "idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658" } } ``` #### cURL Request Example ``` POST request: curl --location 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations \ --data '{ "scimConfiguration":{ "name": "SCIM Contractors","idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658" } }' ``` #### Attribute Values
name (Required) Name of the SCIM configuration.
idpConfigurationId

(Required) Authentication configuration to associate with the SCIM configuration.

Starting in API 3.26, you can have multiple SCIM configurations. Include the idpConfigurationId to identify which SAML authentication configuration to associate with this SCIM configuration. To get the idpConfigurationId, see List Authentication Configurations for Site.

Starting in API 3.28, you can associate OIDC or Google authentication with SCIM.

#### Response Code 201 #### Response Body ``` 065693d8-436a-4738-a8f1-375953a2a888 95dcdf3b-30eb-42ae-b938-7ffca3e11fdc false true SCIM Contractors Tue Apr 01 06:31:47 UTC 2025 ``` ``` { "scimConfiguration": { "id": "065693d8-436a-4738-a8f1-375953a2a888", "idpConfigurationId": "95dcdf3b-30eb-42ae-b938-7ffca3e11fdc", "isApiTokenActive": false, "isOwner": true, "name": "SCIM Contractors", "createdAt": "Tue Apr 01 06:31:47 UTC 2025" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, contains malformed XML, or the idpConfigurationId is not valid.
400400008Bad RequestThe content of the request body is missing the SCIM configuration name, contains unsupported attributes, or the idpConfigurationId is missing.
400400802Bad RequestThe maximum number of 20 SCIM configurations for the site has been reached.
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create SCIM Token Generates the System for Cross-domain Identity Management (SCIM) token and secret. You must be the user who created the SCIM configuration to generate the associated SCIM token. After the SCIM token is generated, ensure the SCIM token's secret is added to the identity provider's (IdP's) SCIM settings. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: Not available _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, and access scopes for_ [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_._ #### URI POST /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id/apiToken #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body None #### cURL Request Example ``` POST request: curl --location 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations/065693d8-436a-4738-a8f1-375953a2a888/apiToken' ``` #### Response Code 201 #### Response Body ``` 065693d8-436a-4738-a8f1-375953a2a888 SCIM_CLIENT_API_TOKEN:d3b782da-0787-44ca-8585-6fd48dbfc658 hqh8YEoYQ1enO9t9Z3h1xA==:X_jndRxNXuWKIXIUbvSGEvysnnSK6B7pt62GiWd8Vuw= ``` ``` { "apiToken": { "id": "065693d8-436a-4738-a8f1-375953a2a888", "clientName": "SCIM_CLIENT_API_TOKEN:d3b782da-0787-44ca-8585-6fd48dbfc658", "secret": "hqh8YEoYQ1enO9t9Z3h1xA==:X_jndRxNXuWKIXIUbvSGEvysnnSK6B7pt62GiWd8Vuw=" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400400802Bad RequestThe SCIM configuration is already associated with a SCIM token. To generate a new token for the SCIM configuration, first delete the associated SCIM token and try again.
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
403403182ForbiddenA SCIM token can only be generated by the user who created the SCIM configuration.
404404057Resource Not FoundThe SCIM configuration ID is not valid.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Server Schedule Creates a new server schedule on Tableau Server. _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task) and [Create subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#create_subscription_cloud)._ Schedules are not specific to sites. For more information, see [Creating a Flow Schedule](https://help.tableau.com/current/server/en-us/prep_conductor_create_schedule_definitions.htm), [Extracts and Refresh Schedules](https://help.tableau.com/current/server/en-us/publish.htm) and [Create or Modify a Schedule](https://help.tableau.com/current/server/en-us/help.htm#schedule_manage_create.htm) in the Tableau Server documentation. Scheduling flows requires Tableau Prep Conductor to be enabled on your Tableau Server. For more information, see [Enable Tableau Prep Conductor](https://help.tableau.com/current/prep/en-us/prep_conductor_config_server_overview.htm). **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/schedules #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body ``` ``` #### Attribute Values
schedule-name The name to give to the schedule. This name identifies the schedule in the server environment when users select a schedule and manage schedule information.
schedule-priority An integer value between 1 and 100 that determines the default priority of the schedule if multiple tasks are pending in the queue. Lower numbers have higher priority.
schedule-type Flow to create a flow schedule, Extract to create an extract refresh schedule, Subscription to create a subscription schedule, or DataAcceleration to create a data acceleration schedule. Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.
schedule-execution-order Parallel to allow jobs associated with this schedule to run at the same time, or Serial to require the jobs to run one after the other.
schedule-frequency

This represents the granularity of the schedule.

  • Hourly. Jobs can be scheduled to run at intervals specified in run one or more times per day at intervals specified in minutes or hours. Valid intervals are 15 and 30 minutes and 2, 4, 6, 8, and 12 hours.

  • Daily. Jobs can be scheduled to run once per day.
  • Weekly. Jobs can be scheduled to run one or more times per week.
  • Monthly. Jobs can be scheduled to run once per month on a specific day.

The value you provide for schedule-frequency determines whether you must include an end-time value, and what is required in the contents of the <intervals> element.

start-time The time of day on which scheduled jobs should run (or if the frequency is hourly, on which they should start being run), in the format HH:MM:SS (for example, 18:30:00). This value is required for all schedule frequencies. The entered time will be applied based on the time zone of your server.
end-time If the schedule frequency is Hourly, the time of day on which scheduled jobs should stop being run, in the format HH:MM:SS (for example, 23:30:00). Hourly jobs will occur at the specified intervals between the start time and the end time. For other schedule frequencies, this value is not required; if the attribute is included, it is ignored. The entered time will be applied based on the time zone of your server.
interval-expression A value that specifies the interval between jobs associated with the schedule. The value you specify here depends on the value specified in schedule-frequency.

Hourly

The interval expression is only one of the following:

  • hours="interval" where interval is 1, 2, 4, 6, 8, or 12, representing how many hours between jobs.
  • minutes="interval" where interval is 15 or 30, representing how many minutes between jobs.

You can specify an interval in hours or minutes, but not both.

Daily

If the schedule frequency is Daily, no interval is specified. Any information specified in the <intervals> element is ignored.

Weekly

The interval expression is weekDay="weekday", where weekday is Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

You can specify multiple <interval> elements to indicate that scheduled jobs should run on multiple days during the week.

Monthly

The interval expression is monthDay="day", where day is either the day of the month (1, 2, etc.) or LastDay.

Note: If you want to specify multiple days in the month, you can do this using the web interface. You cannot create or update such a monthly schedule using REST API.

#### 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:schedules: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 ``` ``` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400064Error creating scheduleAn unspecified error occurred while trying to create the schedule.
400409004Bad requestThe content of the request body is missing or incomplete. For hourly, daily, or monthly schedules, this often means that the content of the <intervals> element does not match the expected format. The <detail> element of the error provides detail about the expected format.
405405000Invalid request methodRequest type was not POST.
409409021Schedule name conflictThe schedule name in the request already belongs to an existing schedule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/schedules/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-schedule.xml` **Content of create-schedule.xml for an hourly schedule** ``` ``` **Response body** ``` ``` **Content of create-schedule.xml for a daily schedule** For a daily schedule, frequencyDetails is set to `Daily`. The start attribute is required. No intervals element is required. **Daily schedules on any recurrence must have the same start and end minute. The hour can be different. However, if the daily schedule is set to only happen once a day, then it needs only a start time and not an end time.** ``` ``` **Response body** ``` ``` **Content of create-schedule.xml for a weekly schedule** For a weekly schedule, frequencyDetails is set to `Weekly`. A start attribute is required. The intervals element is required, and must include between 1 and 7 interval subelements that contain a weekDay attribute. Valid values for the weekDay attribute are `Sunday`, `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, or `Saturday`. ``` ``` **Response body** ``` ``` **Content of create-schedule.xml for a monthly schedule** For a monthly schedule, frequencyDetails is set to `Monthly`. A start attribute is required. The intervals element is required, and must include 1 interval subelement that contains a monthDay attribute. Valid values for the monthDay attribute are integers between 1 and 31 and the string `LastDay`. ``` ``` **Response body** ``` ``` ## Create Site Creates a site on Tableau Server. To make changes to an existing site, call [Update Site](#update_site). This method isn’t available for Tableau Cloud. For more information, see [Work with Sites](https://help.tableau.com/current/server/en-us/help.htm#sites_intro.htm) and [Add or Edit Sites](https://help.tableau.com/current/server/en-us/help.htm#sites_add.htm) in the Tableau Server documentation. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/sites #### Request Body ``` ``` #### Attribute Values
site-name The name of the site.
content-url The subdomain name of the site's URL. This value can contain only characters that are upper or lower case alphabetic characters, numbers, hyphens (-), or underscores (_). If you provide unsupported special characters, Tableau creates the site content URL by omitting those characters from the string. For example, if you provide the site URL as "test.site", Tableau converts it to "testsite" and returns this new URL in the response.
admin-mode

(Optional) Specify ContentAndUsers to allow site administrators to use the server interface and tabcmd commands to add and remove users. (Specifying this option doesn’t give site administrators permissions to manage users using the REST API.) Specify ContentOnly to prevent site administrators from adding or removing users. (Server administrators can always add or remove users.)

Note: You can’t set adminMode to ContentOnly and also set userQuota. The default value is ContentAndUsers.

storage-quota (Optional) The maximum amount of space for the new site, in megabytes. If you set a quota and the site exceeds it, publishers will be prevented from uploading new content until the site is under the limit again.
disable-subscriptions

(Optional) Specify true to prevent users from being able to subscribe to workbooks on the specified site. The default is false.

editing-flows-enabled-flag

(Optional) Specify true to enable and false to disable editing flows for a site. For more information on flows, see Enable and Configure Tableau Prep Conductor.

The default is set to true, which means editing flows is enabled by default. For more information, see Implication of disabling Tableau Prep Conductor.

scheduling-flows-enabled-flag

(Optional) Specify true to enable and false to disable scheduling flows for a site. For more information on flows, see Enable and Configure Tableau Prep Conductor.

The default is set to true which means scheduling flows is enabled by default. For more information, see Implication of disabling Tableau Prep Conductor.

flows-enabled-flag

The flowsEnabled attribute is deprecated as of API version 3.10.

allow-subscription-attachments-flag

(Optional) If true, and subscription to attachments is enabled on the server, then users can create subscriptions that send an email with images of a workbook or view in a PDF attachment. The default value is true. If subscription to attachments is disabled in the server settings, then making this value true will have no effect. Default is true.

guest-access-enabled-flag

(Optional) Specify true to enable and false to disable the ability for guests, users without specific site access permission, to access the site. Default is false.

cache-warmup-enabled-flag

This attribute is removed in API 3.19 and later (Tableau Cloud September 2021). For current methods to improve Tableau performance see, View Acceleration.

(Optional) Set this value to true to enable cache warm up to improve workbook load time. Set the value to false to disable cache warmup. Default is true.

commenting-enabled-flag

(Optional) Specify true to enable and false to disable the ability for user comments on views in the site. Default is true.

revision-history-enabled (Optional) true if the site maintains revisions for changes to workbooks and data sources; otherwise, false. The default is false.
num-revision-limit (Optional) An integer between 2 and 10000 to indicate a limited number of revisions for content.

Setting this value to -1 removes any value that was set previously, and effectively removes any limit to the number of revisions that are maintained.

subscribe-others-enabled-flag

(Optional) Specify true to enable and false to disable the ability for view owners to subscribe other users to a view. Default is true.

extractEncryptionMode

(Optional) Specify enforced, enabled, or disabled. Default is disabled. For more information, see Extract and Encryption Methods.

requestAccessEnabled (Optional) Specify true to allow users send access request emails to content or project owners. Specify false if you don’t want users to be able to request access. The default is false.
runNowEnabled

(Optional) Specify true to allow users to run flows, extract refreshes, and schedules manually. Specify false if you don’t want users to be able to run flows, extract refreshes, and subscriptions manually. The default is true. If this attribute is set to false, the following methods will fail and will return an error message.

Run Flow Now

Run Flow Task

Update Data Source Now

Run Extract Refresh Task

Licensing attributes

For user-based license types, the maximum number of users is set by the licenses activated on that server. For core-based licensing, there’s no limit to the number of users; if you specify a maximum value, only licensed users are counted, and server administrators are excluded.

The REST API enables administrators to set licensing limits below the purchased maximum with two types of license-related attributes:
- User Quota - The total maximum number of licenses currently configured for a site.
- Tiered Capacities - If set, the configured maximum license count for each license type (role).

Online administrators can get these attributes. An on-premises server administrator can both get and set them but if license maximums are set using one attribute kind then the value(s) of the other kind must be null. Setting values for both kinds of attributes will result in an error.

For more information, see Licensing Overview.

User quota

all-license-limit-total

(Optional) The maximum total number of users with Creator, Explorer, or Viewer licenses currently allowed on a site.

On-premises server administrators can set userQuota with the following rules: The number can't exceed the number of licenses activated for the site; and if tiered capacity attributes are set, then userQuota will equal the sum of the tiered capacity values, and attempting to set userQuota will cause an error.

An administrator can revert the license limit to number of activated licenses on the site, or shift control of license limits to tiered capacities values, by omitting userQuota from a Create Site or Update Site request, or making its value -1.

Tiered capacity attributes

creator-license-limit
explorer-license-limit
viewer-license-limit

(Optional) The maximum number of licenses for users with the Creator, Explorer, or Viewer role, respectively, allowed on a site.

On-premises server administrators can set tiered capacity attributes with the following rules: the number can't exceed the number of licenses of a given type that are activated for the site; a value must be supplied for every tiered capacity license type every time any one or more of them is set.

A value of -1 removes the administrator-applied limit for a license type, and reverts the limit to the number of activated licenses configured for the role. Setting the value of a tiered capacity to -1 will not automatically increase the limit if more licenses are purchased and activated for the role in the future.

To use role-specific license limits, the userQuota must be set to null by omitting the attribute from Create Site or Update Site request, or setting its value to -1. Attempting to set values for both tiered capacities and userQuota will result in an error.

data-alerts-enabled-flag

(Optional, boolean) If true, data alerts are enabled on the site. Default value is true.

commenting-mentions-enabled-flag

(Optional, boolean) If true, mentions for commenting are enabled. Default value is true.

catalog-obfuscation-enabled-flag

(Optional, boolean) If true, catalog obfuscation is enabled on the site. Default value is true.

flow-auto-save-enabled-flag

(Optional, boolean) If true, flow auto save is enabled on the site. Default value is true.

run-now-enabled-flag

(Optional, boolean) If true, run now for schedules is enabled which allows non-administrators to run schedules manually. Default value is true.

metrics-content-type-enabled-flag

(Optional, boolean) If true, the metrics content type is enabled on the server. Default value is true.

notify-site-admins-on-throttle-flag

(Optional, boolean) If true, site admins will be notified if their background jobs are being throttled. Default value is false.

authoring-enabled-flag

(Optional, boolean) If true, web authoring is enabled. Default value is true.

custom-subscription-email-enabled-flag

(Optional, boolean) If true, sending custom subscription email is enabled. If set to false after being set true, the current custom subscription email is voided. Default value is false.

custom-subscription-email

A valid custom email that will be sent if customSubscriptionEmailEnabled is set to true. Default value is false.

custom-subscription-footer-enabled-flag

(Optional, boolean) If true, a custom footer will be included on subscription and data alert emails. If set to false after being set true, the current custom subscription footer is voided. Default value is false.

custom-subscription-footer

A custom subscription footer that will be added to subscription and data alerts if customSubscriptionFooterEnabled is set to true. Default value is false.

ask-data-mode

The mode of the ask data feature on the site. Can be set to one of two values:
  • DisabledByDefault - Enables creation of Ask Data lenses for all published data sources. Data sources do not have lenses created automatically.
  • DisabledAlways - Disables Ask Data lenses and related content throughout the site. Preserves information about lenses and data source indexes, which are restored if Ask Data is re-enabled.
Default value is DisabledByDefault. For more information, see Disable or Enable Ask Data for a Site.

named-sharing-enabled-flag

(Optional, boolean) If true, named sharing is enabled. Default value is true.

cataloging-enabled-flag

(Optional, boolean) If true, data catalog is enabled for the site. Default value is true.

derived-permissions-enabled-flag

(Optional, boolean) If true, derived permissions are enabled for the site. Default value is false.

user-visibility-mode

(Optional, string) When the value is FULL users can see the user of other site users. If the value is LIMITED User information on the site is not visible to other users. Default value is FULL. For more information, see User Visibility.
use-default-time-zone Optional, boolean) Set this to true, if you want the time-zone attribute use the Server time Zone at run time. This attribute is set to the official IANA name.  If this is set to false, the time-zone value must be specified.
time-zone (Optional, string) Use this attribute to specify a time zone other than the Server time zone at run time. Only canonical names in the official IANA database are supported. You can find the list of the canonical time zone names on Wikipedia.
autoSuspendRefreshEnabled (Optional) Tableau can automatically suspend extract refresh tasks for inactive workbooks to save resources. Specify true to enable or false to disable. Default is true.
autoSuspendRefreshInactivityWindow (Optional) An integer from 7 through 100 to indicate the number of days to wait before automatically suspending extract refresh tasks for inactive workbooks. The default is 30.
explainDataEnabled

(Optional, boolean) Set this attribute to false to disable Explain Data capabilities for a site. By default, this attribute is set to true. For more information about this site setting, see one of the following topics:

dqwSubscriptionsEnabled

(Optional, boolean) Set this attribute to false to exclude data quality warnings (DQWs) from subscription emails. By default, this attribute is set to true. For more information about this site setting, see one of the following topics:

groupAssertionsEnabled (Optional, boolean) Set to true to allow assertions into group membership using session info. Set to false if you do not want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for the entire site, including the following settings:
  • groupAssertionsSAMLEnabled
  • groupAssertionsOIDCEnabled
  • groupAssertionsConnectedAppsEnabled
groupAssertionsSAMLEnabled (Optional, boolean) Set to true to allow assertions into group membership using SAML session info. Set to false if you don’t want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for SAML sessions.
groupAssertionsOIDCEnabled

(Optional, boolean) Set to true to allow assertions into group membership using OIDC session info. Set to false if you don’t want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for OIDC sessions.

Note: This parameter only applies to Tableau Cloud.

groupAssertionsConnectedAppsEnabled (Optional, boolean) Set to true to allow assertions into group membership using Connected App JWT tokens. Set to false if you don’t want users to be able to be asserted in to groups via connected apps. The default is false. If this attribute is set to false, it will disable group assertions for JWT connected app connections.
groupSetsEnabled (Optional, boolean) Set to true to allow groups sets. Set to false if you don’t want group sets support for the site. The default is false. If this attribute is set to false, it will disable group sets for the site.
recycleBinEnabled (Optional, boolean) Set to true to enable the Recycle Bin. Set to false to disable it. The default is true.
#### Permissions This method can only be called by server administrators. #### Required scope for JWT authorization Introduced in Tableau Server 2022.3 (API 3.17). ``` tableau:sites: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 ``` ``` Response Body Details: - userQuota, storageQuota, and tiered capacity (tierCreatorCapacity, tierExplorerCapacity, tierViewerCapacity) attributes are only present in the response body if those quotas have been set for the site being queried. #### Response Headers Location: /api/3.29/sites/new-site-id #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing, incomplete, or contains malformed XML.
400 400000 Invalid storage quota The storage quota value wasn’t a positive number.
400 400000 Invalid user quota The user quota value wasn’t a positive number.
400 400013 Invalid administrator mode The user provided an administrator mode that isn’t ContentOnly or ContentAndUsers.

Note: An empty string or all whitespace is invalid.

405 405000 Invalid request method Request type was not POST.
409 409001 Site name conflict The site name in the request already belongs to an existing site.
409 409002 Site URL conflict The content URI in the request already belongs to an existing site.
409 409004 User quota and tiered capacity conflict The request cannot set both tiered capacity attributes and userQuota. One or the other must be null.
409 409004 License limit exceeded The request cannot set tiered capacity attributes or userQuota values that are larger than the number of active licenses configured for the site.
409 409004 Administrator mode or user quota conflict The request cannot set adminMode to ContentOnly and also specify a userQuota value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-site.xml` **Content of create-site.xml:** ``` ``` **Response body:** ``` ``` ## Create Subscription Creates a new subscription to a view or workbook for a specific user on Tableau Server and Tableau Cloud. When a user is subscribed to the content, Tableau sends the content to the user in email on the schedule that you define. For more information, see [Subscribe to Views](https://help.tableau.com/current/server/en-us/subscribe_user.htm) in the Tableau Server documentation. Tableau Server and Tableau Cloud each have a different model for schedules and tasks. On Tableau Server, you create a schedule and add a task to it. On Tableau Cloud you create a task and define it's frequency. While the Create Subscription endpoint path and parameters are the same for both Server and Cloud, because the models are different, the request and response bodies are different. - [Tableau Server Request](#create_subscription_server) - [Tableau Cloud Request](#create_subscription_cloud) **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/sites/site-id/subscriptions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to create the subscription in.
#### JWT Access Scope `tableau:tasks:create` _(this scope is included in the scope: `tableau:tasks`)_ This scope can be used to enable this REST method to be called from a unified access token (UAT) or connected app. 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), or [Tableau Cloud connected app scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Tableau Server connected apps scopes](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm). _Available in API 3.20 (Tableau Cloud June 2023) / Tableau Server 2023.3._ ### Tableau Server Request Create a subscription task and add it to a server schedule on Tableau Server. _For Tableau Cloud, see [Tableau Cloud Request](#create_subscription_cloud)._ #### Request Body ``` ``` ``` { "subscription": { "subject": "subscription-subject", "attachImage": "attach-image-flag", "attachPdf": "attach-pdf-flag", "pageOrientation": "page-orientation", "pageSizeOption": "page-size-option", "message": "message", "suspended": "suspended-flag", "content": { "id": "content-id", "type": "content-type", "sendIfViewEmpty": "send-view-if-empty-flag", "customViewId": "custom-view-id" }, "schedule": { "id": "schedule-id" }, "user": { "id": "user-id" } } } ```
subscription-subject A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment. A description is required.
attach-image-flag

(Optional) Setting this true will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default behavior if neither attachImage or attachPdf are specified.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachImage to false will cause an error.

attach-pdf-flag

(Optional) Setting this true will cause the subscriber to receive mail with a .pdf file containing images of workbooks or views attached to it.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachPdf to true will cause an error.

page-orientation (Optional) The orientation of the pages produced when attach-pdf-flag is true. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-size-option (Optional) The type of page produced, which determines the page dimensions when attach-pdf-flag is true. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid. If this parameter is not present the page type will default to Letter.
message The text body of the subscription email message.
suspended-flag (Optional) If true, the subscription is created in a disabled state, meaning it won't run until it's enabled using the Update Subscription method or Resume Subscription in the web UI. The default value is false.
content-type Workbook to create a subscription for a workbook, or View to create a subscription for a view.
send-view-if-empty-flag (Optional) Applies to views only. If true, an image is sent even if the view specified in a subscription is empty. If false, nothing is sent if the view is empty. The default value is true.
custom-view-id (Optional) Applies to views only. The LUID of a custom view to use instead of the default view.
content-id The ID of the workbook or view to subscribe to.
schedule-id The ID of a schedule to associate the subscription with. To determine what schedules are available, call List Server Schedules. The type of the schedule must be Subscription.
user-id The ID of the user to create the subscription for.

Note: The user must have an email address defined in Tableau Server.

#### Permissions The following list summarizes the permissions required to subscribe a user to specific content: - Tableau Server users who are server administrators can subscribe any user to any content. - Site administrators can subscribe any user on the site to any content on that site. - Project leaders can subscribe users to any content that they are project leaders for. - Content owners can subscribe users to any content they own. - Non-owners can subscribe themselves to any content that they have Read (view) permissions for. #### Response Code 201 #### Response Body ``` ``` ``` { "subscription": { "id": "subscription-id", "subject": "subscription-subject", "suspended": "suspended-flag", "pageOrientation": "page-orientation", "pageSizeOption": "page-size-option", "message": "message", "content": { "id": "content-id", "type": "content-type", "sendIfViewEmpty": "send-view-if-empty-flag" }, "schedule": { "id": "schedule-id", "name": "schedule-name" }, "user": { "id": "user-id", "name": "user-name" } } } ``` #### Response Headers ``` Location: /api/3.29/sites/site-id/subscriptions/new-subscription-id ``` #### Version Available in API 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400067Invalid subscription subjectThe subscription subject is null or empty.
400400068Invalid subscription targetThe content type specified in the request body is not a workbook or view.
400400069Invalid subscription typeThe subscription type is not Workbook or View.
400400069Invalid schedule typeThe schedule type is not Subscription.
403403060No permissions to create subscription.The user does not have permission to create a subscription for the specified content.
403403063No user permissions for content.The user specified in the request body does not have Read (view) permissions for the specified content.
403403064No user email address.The user does not have an email address.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
400404006Workbook not foundThe workbook ID in the request body doesn't correspond to an existing workbook.
404404011View not foundThe view ID in the request body doesn't correspond to an existing view.
404404023Schedule not foundThe schedule ID in the request body doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ### Tableau Cloud Request Create a subscription task and define its frequency on Tableau Cloud. _For Tableau Server, see [Tableau Server Request](#create_subscription_server)._ **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:** Administrators and any user with the creator or explorer role can create a custom schedule for a subscription task.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks:create     Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) #### URI POST /api/api-version/sites/site-luid/subscriptions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "subscription": { "subject": "finance report", "attachImage": "true", "attachPdf": "true", "pageOrientation": "true", "pageSizeOption": "Folio", "message": "daily finance report", "suspended": "false", "content": { "id": "13237fd-6365-44d5-925b-644e5281b605", "type": "Workbook", "sendIfViewEmpty": "false", "customViewId": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd" }, "user": { "id": "456" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Request Attributes `subject, contentId, and userId` are **required** to create a custom schedule for a subscription, other attributes are optional with defaults. All attributes are optional when updating a custom schedule for a subscription.
subscription subject (Required to create subscription) string: A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment.
subscription attachImage

boolean: Setting this true will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default behavior if neither attachImage or attachPdf are specified. Default is false.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachImage to false will cause an error.

subscription attachPdf

boolean: Setting this true will cause the subscriber to receive mail with a .pdf file containing images of workbooks or views attached to it. Default is false.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachPdf to true will cause an error.

subscription pageOrientation enumeration: The orientation of the pages produced when attach-pdf-flag is true. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
subscription pageSizeOption enumeration: The type of page produced, which determines the page dimensions when attach-pdf-flag is true. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid. If this parameter is not present the page type will default to Letter.
subscription message string: The text body of the subscription email message.
subscription suspended boolean: If true, the subscription is created in a disabled state, meaning it won't run until it's enabled using the Update Subscription method or Resume Subscription in the web UI. The default value is false.
content id (Required to create subscription) LUID: The LUID of the workbook or view the user should be subscribed to.
content type (Required to create subscription) enumeration: Workbook to create a subscription for a workbook, or View to create a subscription for a view.
content sendIfViewEmpty boolean: Applies to views only. If true, an image is sent even if the view specified in a subscription is empty. If false, nothing is sent if the view is empty. The default value is true.
content customViewID

string: Applies to views only. The LUID of a custom view to use instead of the default view.

userId (Required to create subscription) LUID: The LUID of the user to create the subscription for.

Note: The user must have an email address defined in Tableau Server.

schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### cURL Request Example `curl -X POST "https://prod-ca-a.online.tableau.com/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/subscriptions" -H "Content-Type: application/xml" --data " "` #### Response Code 200 #### Response Body ``` ``` ``` { "subscription": { "id": "789", "subject": "finance report", "attachImage": "true", "attachPdf": "true", "pageOrientation": "true", "pageSizeOption": "Folio", "message": "Daily finance report", "content": { "id": "13237fd-6365-44d5-925b-644e5281b605", "type": "Workbook", "sendIfViewEmpty": "false" }, "user": { "id": "09876fd-6365-44d5-925b-644e528d5678" } }, "schedule": { "id": "54321fd-6365-44d5-925b-644e52812345", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user is not authorized to make this request..
404404002User not foundThe user specified in the request could not be found.
404404025Subscription not foundThe task for the subscription could not be found.
409409004invalid parameter valueThe request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between start and end times are not increments of one hour, this error will result.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create subscription Creates a subscription to a specified metric for a specified user or group. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can create subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:create\` Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/subscriptions [view details](#) ## Create Tableau MCP Settings for Site Replaces the current list of Tableau MCP settings for a given site. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Server administrators and site administrators. **Access Scope**: `tableau:mcp_site_settings:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). For more information about configuring the Tableau MCP settings for a site, see [Site settings for Tableau MCP](https://tableau.github.io/tableau-mcp/docs/configuration/mcp-config/site-settings). #### URI POST /api/api-version/sites/site-id/settings/mcp #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body ``` mcp-setting-key mcp-setting-value ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "mcp-setting-key", "value": "mcp-setting-value" } ] } } ``` #### Attribute Values
mcp-setting-key (Required) String. Specifies the setting to assign a value to.

mcp-setting-value

(Required) String. Provides the value for the associated key.
#### Response Code 200 #### Response Body ``` EXCLUDE_TOOLS search-content ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "EXCLUDE_TOOLS", "value": "search-content" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid parameterThe mcpSiteSettings entity is empty; the settings key is null, missing, or invalid; or site LUID format is invalid.
401401002Invalid authentication credentialsMissing or invalid authentication credentials.
401403001Missing authentication tokenAuthentication token not provided.
403403000Insufficient permissionsUser isn't an administrator.
403403010Site mismatchAuthenticated user's site does not match the site LUID in the request.
403403157Feature disabledFeature not enabled.
403N/AInsufficient OAuth scopeThe user lacks the required OAuth scope.
404404000Site not foundA site with the specified LUID does not exist.
500500000Internal server errorUnknown server error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Work Copy Creates a work copy of a published data source and returns the work copy LUID. Composable data sources and Semantic Data Model (SDM) data sources are not supported. The call is rejected when the caller already has the maximum number of open work copies. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source (either explicitly or implicitly). **Access Scope**: `tableau:datasources:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/tds/sites/site-luid/datasource/datasource-luid/workcopy #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
datasource-luidThe LUID of the data source. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Response Code 201 Created #### Response Body Returns the created work copy's identifiers in `tdsWorkCopy`. The response includes `workCopyLuid` but not `datasourceLuid`, which only Publish Work Copy returns. ``` d9e8f7a6-b5c4-3210-fedc-ba9876543210 ``` ``` { "tdsWorkCopy": { "workCopyLuid": "d9e8f7a6-b5c4-3210-fedc-ba9876543210" } } ``` #### Attribute Values
tdsWorkCopyRequired. Work copy identifiers.
tdsWorkCopy.workCopyLuidLUID of the new work copy.
tdsWorkCopy.datasourceLuidOptional. LUID of the published data source. Not returned by this method; returned by Publish Work Copy.
#### Errors
HTTP statuserror CodeConditionDetails
400Invalid data source LUIDThe data source LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
404Data source not found or not visible to the callerThe data source LUID in the URI doesn't correspond to an existing data source in the site, or the caller doesn't have permission to access it.
405405000Method not allowedThe HTTP method is not supported for this resource.
405405003Composable data sourceCreating a work copy is not supported for composable data sources (data sources that have one or more immediate parent published data sources).
405405004Semantic Data Model (SDM) data sourceCreating a work copy is not supported for Semantic Data Model (SDM) data sources.
429429000Rate limit exceededToo many requests sent in a given time period.
429Work copy limit exceededThe maximum number of open work copies is reached. Publish an existing work copy before creating a new one.
500Unknown errorThere was an internal server error.
503Service unavailableService unavailable.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Decrypt Extracts in a Site Extract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see [Extract Encryption at Rest](https://help.tableau.com/current/server/en-us/security_ear.htm). Decrypts all extracts on a site. **Note:** Depending on the number and size of extracts, this operation may consume significant server resources. Consider running this command outside of normal business hours. #### URI POST /api/api-version/sites/site-id/decrypt-extracts #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body None #### Permissions Tableau Server administrators can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extract_encryption: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 200 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete a semantic context Delete a semantic context created and managed in Tableau Knowledge, along with its statements. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:write\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/v1/knowledge/semantic-contexts/{ctx\_id} [view details](#) ## Delete a Webhook Deletes the specified webhook. #### URI DELETE /api/3.6/sites//webhooks/ #### Parameter Values
site-idThe ID of the site that contains the workbook to be deleted.  
webhook-idThe ID of the webhook.  
#### 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. ## Delete All Recycle Bin Contents Permanently deletes all content in a site's Recycle Bin . **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2). **License**: No additional license required. **Permissions**: Server administrators, site administrators, or other users. **Access Scope**: `tableau:recyclebin_content:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Administrators delete all content in the site's Recycle Bin. Other users only delete content they own. For information about how content properties change when it's deleted or restored. See [Recycle Bin](https://help.tableau.com/current/pro/desktop/en-us/recycle_bin.htm). #### URI DELETE /api/api-version/sites/site-id/recyclebin DELETE /api/api-version/sites/site-id/recyclebin?asJob=asJob-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the Recycle Bin.
as-job-value(Optional) If true, runs as an asynchronous job. Returns job information instead of executing synchronously. Default is false. Check the status of the job by calling Query Job.
#### Request Body None #### Response Code 204 with synchronous execution (when query parameter asJob is false) 202 with asynchronous execution (when query parameter asJob is true and an `EmptyRecycleBin` job is created) #### Response Body No response body with synchronous execution(when query parameter asJob is false) Returns a job object with asynchronous execution (when query parameter asJob is true and an `EmptyRecycleBin` job is created): Datetime fields are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). ``` ``` ``` { "job":{ "id":"12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "mode":"Asynchronous", "type":"EmptyRecycleBin", "progress":"0", "createdAt":"2026-05-22T02:37:30Z", "finishCode":"1" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestCheck the request body and query string parameters.
401401000No auth credentialsCheck the authorization header.
401401002UnauthorizedSession expired or invalid.
403403004Operation on resource unauthorizedCheck user permission.
403403157Feature disabledRecycle Bin disabled.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Method not allowedRequest type unrecognized for this method.
406406000Unacceptable media typeBad Accept: header.
409409004Invalid parameterParameter type-mismatched, unknown content type, or malformed LUID.
429429000Too many requestsRequest throttled.
500500000Internal server errorUnknown error.
503500001Internal service errorInternal service error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete analytics extension connection from site Deletes a specific analytics extension connection for an external service from a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/settings/site/extensions/analytics/connections/{connection\_luid} [view details](#) ## Delete ask data lens - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Delete an ask data lens. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users with administrator and lens owner permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:delete\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/askdata/lenses/{lens\_id} [view details](#) ## Delete Ask Data Lens Permission - Retired in API 3.22 > > [!WARNING] > > > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau AI and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-ai). Deletes the specified permissions to the specified ask data lens for a user or group. #### URI DELETE /api/api-version/sites/site-luid/lenses/lens-luid/permissions/groups/group-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/lenses/lens-luid/permissions/users/user-luid/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid Required. The LUID of the site that contains the view.
lens-luid Required. The LUID of the lens to delete permissions for.
group-luid Optional (one user or group must be specified). The LUID of the group to remove the permission for.
user-luid Optional. The LUID of the user to remove the permission for.
capability-name

The capability to remove the permission for.

The valid capabilities for a view are ChangePermissions, Delete, Move, Read, Write.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions Users with server or site administrator permissions, and non-administrators that have Delete or ChangePermissions permission (either explicitly or implicitly) for the lens, can delete ask data lens permissions. #### Response Code 204 #### Response Body None #### Version Introduced Tableau Cloud June 2022 (API 3.16). Not currently available for Tableau Server. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for an ask data lense. Valid capabilities for a lens are ChangePermissions, Delete, Move, Read, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to delete permissions on the view.
403403039Project permissions lockedThe parent project that contains the specified ask data lens has its permissions locked.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn’t correspond to an existing user.
404404046Lens not foundThe ask data lens LUID in the URI doesn't correspond to an existing view.
404404012Group not foundA group LUID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or an invalid capability value (other than Allow or Deny).
404404014Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Authentication Configuration Delete an authentication instance. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/authn-service/auth-configurations/{id} [view details](#) ## Delete Bridge Client Permanently removes a Bridge client from the site. This operation is irreversible; the Bridge client cannot be recovered through the API. Pool assignments are revoked and the client must be re-registered to reconnect. Data sources and scheduled refreshes using this client will be affected; consider moving to unassigned status for temporary deactivation instead of deleting. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/sites/site-luid/bridge-clients/bridge-client-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
bridge-client-idThe unique identifier for the Bridge client to delete.
#### Request Body None #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
404503001Bridge client not foundBridge client with the specified ID does not exist on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503003Unexpected server errorAn unexpected error occurred while deleting the Bridge client.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Bridge Pool Permanently deletes a Bridge pool and all its associated domain mappings. The pool must have no Bridge clients assigned (move clients first). Cannot delete reserved system pools. The operation is irreversible; domain mappings are removed and the pool ID becomes invalid. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/sites/site-luid/bridge-pools/pool-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
pool-idThe unique identifier (UUID) of the pool to delete.
#### Request Body None #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid pool ID or pool not foundPool ID must be valid UUID and exist on the site.
400503902System poolCannot delete reserved system pools.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503902Unexpected server errorAn unexpected error occurred while deleting the pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Collection Permission Removes the specified collection permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/collections/collection-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/collections/collection-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the collection.
collection-id The ID of the collection to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for. The only valid capability for a collection is Read. The only valid capability mode is Allow or Deny.

For more information, see Permissions.

capability-mode Allow to delete an allow permission, or Deny to delete a deny permission. This value is case sensitive.
#### Request Body None #### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a collection. The only valid capability for a collection is Read.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the collection.
404404000Resource not foundThe site ID in the URI wasn't found.
404404002Resource not foundThe user ID in the URI wasn't found.
404404012Resource not foundThe group ID in the URI wasn't found.
404404013Resource not foundThe capability in the URI isn't recognized.
404404014Resource not foundThe user or group permission wasn't found on the collection. Check the permissions on the collection that you're trying to remove and try again.
404404038Resource not foundThe collection ID in the URI wasn't found.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete collections Deletes collections. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:delete. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/collections [view details](#) ## Delete collections Deletes collections. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:delete. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/collections/{luid} [view details](#) ## Delete Connected App Permanently remove a connected app. Deleting the connected app also deletes the secrets associated with the connected app. For more information about deleting a connected app, see one of the following:  - For Tableau Server: [Effects of deleting a connected app](https://help.tableau.com/current/server-linux/en-us/connected_apps.htm#effects) - For Tableau Cloud: [Effects of deleting a connected app](https://help.tableau.com/current/online/en-us/connected_apps_direct.htm#effects) #### URI DELETE api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, DELETE api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_, was added in version 3.17. The original resource, DELETE api/_api-version_/sites/_site-id_/connected-applications/_client-id_, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## Delete Connected App Secret Permanently remove a secret associated with a connected app. For more information about deleting a connected app, see one of the following: - For Tableau Server: [Effects of deleting a secret](https://help.tableau.com/current/server-linux/en-us/connected_apps.htm#effects) - For Tableau Cloud: [Effects of deleting a secret](https://help.tableau.com/current/online/en-us/connected_apps_direct.htm#effects) #### URI DELETE api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets/_secret-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
secret-idThe unique ID of the connected app secret.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_app_direct_trust_secrets: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 #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, DELETE api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets/_secret-id_, was added in version 3.17. The original resource, DELETE api/_api-version_/sites/_site-id_/connected-applications/_client-id_/secrets/_secret-id_, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
404404042Secret not foundThe requested secret for the connected app could not be found.
## Delete custom domain settings Deletes the custom domain setup for a Tableau site. **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Only users with administrator permissions can view a site's custom domain settings. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:delete\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/customdomains/settings/site/{site\_luid} [view details](#) ## Delete Custom View Deletes the specified custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1). _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** Tableau administrators can delete a custom view. Other users can delete any custom view that they own.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:views:update - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 DELETE /api/api-version/sites/site-luid/customviews/custom-view-luid #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body None. #### Required scope for JWT authorization _Introduced in Tableau Cloud December 2022 (API 3.18) ._ Authorize use of this method in your connected app by including this scope in its JSON Web Token (JWT). For more information, see [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help. ``` tableau:views:update ``` #### cURL Request Example `curl -L -X DELETE "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/37d015c6-bc28-4c88-989c-72c0a171f7aa" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg|wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq|a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 201 #### Response Body None. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Data Acceleration Task Deletes a data acceleration task. This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI DELETE /api/api-version/sites/site-id/tasks/dataAcceleration/dataAcceleration-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the task.
dataAcceleration-idThe ID of the task to remove.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:data_acceleration_tasks: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 200 #### Response Body None #### Version In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15) data acceleration is supported. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403409087Permission deniedThe user isn't authorized to view data acceleration tasks.
403409087Permission deniedThe user isn't authorized to access the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404026Task not foundThe task id in the URI doesn't correspond to an existing task.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/dataAcceleration/7a2a7c6d-5e4f-3a2b-1c0d-9e8f7a6b3r4q" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Delete Data Quality Certification by ID Delete a data quality certification from an asset using the data quality certification ID. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Label](#delete_label) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/dataQualityCertifications/_certification-luid_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
certification-luidThe unique ID of the data quality certification.
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete a data quality certification: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400105Generic data quality certification errorThe data quality certification could not be deleted for some reason other than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Data Quality Certifications by Content Delete multiple data quality certifications from assets. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Labels](#delete_labels_on_assets) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/dataQualityCertifications #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
indicator-idThe unique ID of the data quality certification.
#### Request body ``` ``` #### Attribute Values
content

The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:

  • database
  • table
  • datasource
  • virtualconnection
  • virtualconnectiontable
database-id The unique ID of the database asset.
table-id The unique ID of the table asset.
datasource-id The unique ID of the data source content.
virtualconnection-id The unique ID of the virtual connection.
virtualconnectiontable-id The unique ID of the virtual connection table.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete data quality certifications: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400106Generic data quality certification errorThe data quality certifications could not be deleted for some reason other than those specified in this table.
404404029Content not foundThe content does not exist.
403403004Unauthorized operationInsufficient permissions to perform the operation.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Data Quality Warning by Content Delete the data quality warnings from an asset. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Labels](#delete_labels_on_assets) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/api-version/sites/site-id/dataQualityWarnings/content-type/content-luid #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of asset that the data quality warning is being attached to. To specify the type, use:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable

Types are not case sensitive.

content-luid The LUID of the content (database, table, column, published data source, flow, virtual connection, or virtual connection table).
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
409400106Data quality warning delete errorAn unknown error occurred and the data quality warning could not be deleted.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Delete Data Quality Warning by ID Delete a data quality warning from an asset using the data quality warning ID. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Delete Label](#delete_label) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/dataQualityWarnings/_dataqualitywarning-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
dataqualitywarning-idThe unique ID of the data quality warning.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400105Data quality warning delete errorAn unknown error occurred and the data quality warning could not be deleted.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Delete Data Source Deletes the specified data source from a site. When a data source is deleted, its associated data connection is also deleted. Workbooks that use the data source are not deleted, but they will no longer work properly. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to delete.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a data source for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasources: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user called this method but doesn't have Read (view) and Delete permission for the data source.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source in the site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Data Source from Favorites Deletes the specified data source from the user's favorites. If the specified data source is not a favorite, the operation has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/datasources/datasource-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
user-idThe ID of the user to remove the favorite from.
datasource-idThe ID of the data source to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Forbidden favorites accessA non-administrator user attempted to delete a data source from a different user's favorites.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user
404404010Data source not a favoriteThe data source ID in the URI exists but is not a favorite of the specified user.
404404011Data source not foundThe data source ID in the URI doesn't correspond to an existing data source
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Data Source Permission Removes the specified data source permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/datasources/datasource-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the data source.
datasource-id The ID of the data source to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for. Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, ExtractRefresh, Read (view), Write, and SaveAs.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can call this method only if they have permission to delete permissions from the data source (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a data source. Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, Read, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the data source.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the specified data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
**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
HTTP statuserror CodeConditionDetails
403403004Delete forbiddenA user called this method who does not have the required permissions
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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 Database Permissions Permanently remove the permissions applied to a database asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/api-version/sites/site-luid/databases/database-luid/permissions/users/user-luid/capability-name/capability-mode DELETE api/api-version/sites/site-luid/databases/database-luid/permissions/groups/group-luid/capability-name/capability-mode #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site.
database-luidThe LUID of the database asset.
user-luidThe LUID of the user to remove the permissions for.
group-luidThe LUID of the group to remove the permissions for.
capability-nameThe explicit permissions capability to remove. Capabilities that can be removed are Read, Write, ChangePermissions, or ChangeHierarchy.
capability-modeThe permissions mode to remove. Modes that can be removed are Allow or Deny.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users have permissions to delete the permissions on the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400120Bad requestPermissions could not be deleted because support for explicit permissions is available for database assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403117Database lockedPermissions for the database asset cannot be deleted because the database asset is locked.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Delete Default Database Permissions Permanently remove the default permissions on a database asset. Removing the default permissions from the database asset means that any new child table assets that are indexed by Catalog won't have any default permissions set. Note: If a database is in a project, default database permissions are not evaluated to determine table permissions. Use the [Delete Default Permissions](#delete_default_permissions) method to control default permission capabilities on tables through projects instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-luid_/databases/_database-luid_/default-permissions/tables/users/user-luid/capability-name/capability-mode DELETE api/_api-version_/sites/_site-luid_/databases/_database-luid_/default-permissions/tables/groups/group-luid/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The LUID of the site asset.
database-luid The LUID of the database asset.
user-luid The LUID of the user to remove the default permission for.
group-id The LUID of the group to remove the default permission for.
capability-name

The capability to remove the permissions for.

Valid capabilities for databases are the following:

  • Read (view)
  • Write (edit)
  • ChangePermissions (set permissions)
  • ChangeHierarchy (move)

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users have permissions to delete the permissions on the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Response Code 200 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400120Bad requestPermissions could not be deleted because support for explicit permissions is available for database assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403117Database lockedDefault permissions cannot be deleted because the database asset is locked.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Delete Default Permission Removes default permission rules for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, also removes default permission rules for database or table resources in a project for a user or group. After removing default permission rules, new resources of the type you specify that are added to the project will no longer have those permission rules. If permissions are [locked to the project](https://help.tableau.com/current/server/en-us/permissions.htm#LockProject), then the same is true for all existing child content of the project. #### URI Workbooks: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks/groups/group-luid/capability-name/capability-mode Data sources: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources/groups/group-luid/capability-name/capability-mode Data roles: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles/groups/group-luid/capability-name/capability-mode Lenses: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/lenses/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/lenses/groups/group-luid/capability-name/capability-mode Metrics: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/metrics/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/metrics/groups/group-luid/capability-name/capability-mode Flows: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows/groups/group-luid/capability-name/capability-mode Virtual Connections _(endpoints introduced in [API version](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm#rest_and_tableau_version_table) 3.23)_: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/virtualconnections/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/virtualconnections/groups/group-luid/capability-name/capability-mode Databases: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases/groups/group-luid/capability-name/capability-mode Tables: DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables/users/user-luid/capability-name/capability-mode DELETE /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables/groups/group-luid/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The LUID of the site that contains the project.
project-id The LUID of the project to remove the default permission for.
group-id The LUID of the group to remove the default permission for.
user-id The LUID of the user to remove default permission for.
capability-name

The capability to remove the permissions for.

Valid capabilities for a workbook are

  • AddComment
  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • ExportData
  • ExportImage
  • ExportXml
  • Filter
  • Read (view)
  • ShareView
  • ViewComments
  • ViewUnderlyingData
  • WebAuthoring
  • Write
  • RunExplainData
  • CreateRefreshMetrics

Valid capabilities for a data source are

  • ChangePermissions
  • Connect
  • Delete
  • ExportXml
  • SaveAs
  • Read (view)
  • Write

Valid capabilities for a flow are

  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • ExportXml (download)
  • Execute
  • Read (view)
  • WebAuthoringForFlows
  • Write

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Users who are not server administrators can remove permissions for a project only if they have ProjectLeader permissions for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version - Version 2.1 and later. - Version 3.23 and later for the virtual connection default permissions methods. - For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permissions to remove permissions for the project.
403403095Delete permissions for flows forbiddenA non-administrator user called this method but doesn't have permissions to remove permissions for the project where the flow is located.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404002User not foundA user LUID in the URI doesn't correspond to an existing user.
404404005Project not foundThe project LUID in the URI doesn't correspond to an existing project.
404404012Group not foundA group LUID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI isn't assigned to the specified user or group.
404404013Capability not foundThe capability in the URI doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
404404027Flow not foundThe flow LUID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Domain Removes a domain mapping from the system. The domain is no longer associated with any pool and can be re-added later if needed. For blocked domains, deletion unblocks the domain. Deletion is immediate; existing connections may be terminated and Bridge clients from that domain lose access until the domain is re-added to a pool. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-domain-maps/remove-domain #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "example.com" } } ``` #### Attribute Values
existingDomainNameRequired. The domain name to remove from the system.
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid domain name or domain not foundDomain must conform to valid format and must exist in the system.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503907Unexpected server errorAn unexpected error occurred while deleting the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete EAS Delete a registered external authorization server (EAS). #### URI DELETE api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers/_eas-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
eas-idThe unique ID of the registered EAS.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404047EAS not foundThe requested EAS could not be found.
## Delete Extract from Data Source Delete the extract from a data source. #### URI POST /api/api-version/sites/site-id/datasources/datasource-id/deleteExtract #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site.
datasource-idThe LUID of the datasource whose extract is to be deleted.
#### Permissions Extracts for data sources can be deleted by Tableau server or site administrators, and by users who own the data source or are an owner or leader of the project where the data source resides. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extracts: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 No Content` #### Response Body None. #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
409409070Invalid request methodThe data source cannot be extracted because it is file based or in another unsupported form.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/deleteExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE"` ## Delete Extract Refresh Task Deletes the specified extract refresh task on Tableau Server or Tableau Cloud. On Tableau Cloud, deleting a task also deletes its custom schedule. On Tableau Server, it removes the item from the shared schedule but doesn't delete the schedule. #### URI DELETE /api/api-version/sites/site-id/tasks/extractRefreshes/task-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site that contains the extract refresh task.
task-idThe LUID of the extract refresh task to remove.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). Not available for Tableau Server. `tableau:tasks:delete` (this scope is included in the scope: `tableau:tasks`) 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 #### Permissions Tableau Server or Cloud users who are not server administrators or site administrators can delete an extract refresh task for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Response Code 204 #### Response Body None #### Version Version 3.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404026Task not foundThe task id in the URI doesn't correspond to an existing extract refresh task.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Extracts from Virtual Connection Deletes the extracts from a virtual connection, which changes it from extract to live mode. This operation applies to the entire virtual connection. You can't target individual tables. **Version**: Available in API 3.30. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Extracts for virtual connections can be deleted by Tableau server or site administrators, and by users who own the virtual connection or are an owner or leader of the project where the virtual connection resides. **Access Scope**: `tableau:extracts:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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-id/virtualconnections/virtualconnection-id/deleteExtract #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection whose extract is to be deleted.
#### Request Body The request body is an empty tsRequest element. `` ``` {} ``` #### cURL Request Example ``` curl --request POST 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/deleteExtract' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409128No extract to delete.The virtual connection has no extract. Neither the active revision nor any of its tables has extracts enabled.
400409099Unable to delete the extract.A generic error occurred while converting the virtual connection to live and deleting its extract.
403409098User not authorized to delete the extract.The user must be able to see the virtual connection and must have permission to convert its extract to live.
404404049Virtual connection not found.Check the virtual connection LUID. This error also occurs if the virtual connection has no active revision.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Extracts of Embedded Data Sources from a Workbook Delete all extracts of embedded data sources in a workbook. **Note:** Depending on the number and size of extracts, this operation may consume significant server resources. Consider running this command outside of normal business hours. #### URI POST /api/api-version/sites/site-id/workbooks/workbook-id/deleteExtract #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site.
datasource-idThe LUID of the workbook containing the extract to be deleted.
#### Permissions Extracts for data sources can be deleted by Tableau server or site administrators, and by users who own the data source or are an owner or leader of the project where the data source resides. #### Request Body ``` ``` #### Request Parameter Values None. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extracts: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 `200` #### Response Body None. #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
409409070Invalid request methodThe data source cannot be extracted because it is file based or in another unsupported form.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/deleteExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE" -d "@delete-extracts-for-workbook.xml"` **Content of** `create-extracts-for-workbook.xml` ```
``` **Response body:** None. Response code is `200`. ## Delete Flow Deletes a flow. When a flow is deleted, its associated connections, the output and input steps, any associated scheduled tasks, and run history are also deleted. #### URI DELETE /api/api-version/sites/site-id/flows/flow-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to delete.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a flow for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user called this method but doesn't have Read (view) and Delete permission for the flow.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Flow from Favorites Deletes the specified flow from the user's favorites. If the specified flow is not a favorite, the operation has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/datasources/datasource-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
user-idThe ID of the user to remove the favorite from.
datasource-idThe ID of the data source to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read (view) permissions on the data source (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Forbidden favorites accessA non-administrator user attempted to delete a data source from a different user's favorites.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user
404404010Flow not a favoriteThe flow ID in the URI exists but is not a favorite of the specified user.
404404027Data source not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Flow Permission Deletes the specified permission from the specified flow for a group or user. #### URI DELETE /api/api-version/sites/site-id/flows/flow-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/flows/flow-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the flow.
flow-id The ID of the flow to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name The capability to remove the permission for. Valid capabilities for a flow are:
  • ChangeHierarchy
  • ChangePermissions
  • Delete
  • Execute
  • ExportXml (Download)
  • Read (view)
  • WebAuthoringForFlows
  • Write

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete permissions from a flow only if they have ChangePermissions permission for flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:permissions: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 #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a flow. Valid capabilities for a flow are ChangeHierarchy, ChangePermissions, Delete, Execute, ExportXml (Download), Read (view), and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the flow.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not foundThe capability in the URI doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allowor Denyat the end of the URI.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allowor Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Group Deletes the group on a specific site. Deleting a group does not delete the users in group, but users are no longer members of the group. Any permissions that were previously assigned to the group no longer apply. **Note**: You cannot delete the All Users group. #### URI DELETE /api/api-version/sites/site-id/groups/group-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
group-idThe ID of the group to delete.
#### Request Body None #### Permissions This method can be called by site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 #### Version Version 2.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group or the group is not part of the specified site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. ## Delete Group Set Deletes the group set on a specific site. Deleting a group set doesn’t delete the users in the group set, but users are no longer members of the group set. Any permissions that were previously assigned to the group set no longer apply. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI DELETE /api/api-version/sites/site-id/groupsets/group-set-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
group-set-idThe ID of the group set to delete.
#### Request Body None #### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type wasn’t DELETE.
409409120Group set not foundThe group set ID in the URI doesn't correspond to an existing group set or the group set isn’t part of the specified site.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Identity Pool Delete an identity pool. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/authn-service/identity-pools/{uuid} [view details](#) ## Delete Identity Store Delete an identity store. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/authn-service/identity-stores/{id} [view details](#) ## Delete Label Deletes a data label by its LUID. You can't delete extract refresh or flow run monitoring warnings (the extract\_refresh\_failure and flow\_run\_failure label values) using this method because those warnings are set and cleared automatically, depending on their triggers. See also "How to set a monitoring quality warning" in the [Tableau Server](https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) and [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) Help and the quality warning trigger methods in [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI DELETE api/api-version/sites/site-luid/labels/label-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-luidThe unique LUID of the label asset.
#### Request Body None #### Permissions - To delete a data label other than a certification label, you must have write permission on the associated asset. - To delete a certification label, you must be an administrator, or else you must be a project leader or product owner for the project the asset is in. - To delete a certification label for an external asset _not_ in a project, you must have the change permissions permission on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401400105Generic delete label errorAn unknown error occurred. Confirm that the LUID in the URI is correct.
403403004Operation on resource unauthorizedInsufficient permissions to perform the operation.
409409004Invalid parameterThe URI does not contain a properly-formatted LUID.
## Delete Label Category Deletes a label category. Note that category is one property of a label value (labelValue), which is itself a property of a label on an asset. Other properties of a labelValue include name and description. These properties determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label categories, but one is required to create, update, delete, and see labels on assets. #### URI DELETE api/api-version/sites/site-luid/labelCategories/label-category-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-category-nameThe label category name. URL encode the label category name (as it appears in the Tableau web interface) if it has spaces or non-alphanumeric characters in it.
#### Request Body None #### Permissions Only a site or server administrator can create, update, or delete label categories. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_categories: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 200 #### Version Introduced in Tableau Cloud October 2023 (API 3.21) / Server 2023.3 (API 3.21). #### Response Body None #### Errors
HTTP status error Code Condition Details
400 400191 Generic delete label category error An unknown error occurred.
403 403004 Operation on resource unauthorized

You must be an administrator to create, update, or delete label values.

409 409004 Invalid parameter
  • The category name in the URI must exist.
  • The category name can't be one of the built-in categories.
## Delete Labels Deletes the data labels on one or more assets. You can optionally limit the data labels to delete by category using a query string. You can't delete extract refresh or flow run monitoring warnings (the extract\_refresh\_failure and flow\_run\_failure label values) using this method because those warnings are set and cleared automatically, depending on their triggers. See also "How to set a monitoring quality warning" in the [Tableau Server](https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) and [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) Help and the quality warning trigger methods in [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI DELETE api/api-version/sites/site-luid/labels DELETE api/api-version/sites/site-luid/labels?categories=category-list #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site.
category-list(Optional) A comma-separated list of label value categories used to limit the label deletions to only the listed categories. See Data Labels in the REST API for information on label values and categories.
#### Request Body ``` ``` #### Attribute Values
asset-type

The type of asset. Valid asset types are:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
asset-luid The asset LUID.
#### Permissions - To delete a data label other than a certification label, you must have write permission on the associated asset. - To delete a certification label, you must be an administrator, or else you must be a project leader or product owner for the project the asset is in. - To delete a certification label for an external asset _not_ in a project, you must have the change permissions permission on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401400106Generic delete labels errorAn unknown error occurred.
403403004Operation on resource unauthorizedInsufficient permissions to perform the operation.
404404029Resource not foundThe contentType and contentID attribute combination does not correspond to an asset on the server. This can be caused by an incorrect contentType, an incorrect contentID, or both.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete labelValue Deletes a label value. If you use this method on a built-in label value that was customized, this method reverts the label to its built-in defaults instead of deleting it. (Afterwards, assets with the label that you reverted will reflect the built-in default.) Note that a label value (labelValue) is one property of a label. A label value has its own properties like name, category, and description that determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label values, but one is required to create, update, delete, and see labels on assets. #### URI DELETE api/api-version/sites/site-luid/labelValues/label-value-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-value-nameThe label value name. URL encode the label value name if it has spaces or non-alphanumeric characters in it.
#### Request Body None #### Permissions Only a site or server administrator can create, update, or delete label values. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_values: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 200 #### Version Introduced in Tableau Cloud June 2023 (API 3.20) and Tableau Server 2023.3 (API 3.21). #### Response Body None #### Errors
HTTP status error Code Condition Details
403 403004 Operation on resource unauthorized You must be a site or server administrator to create or update label values.
409 409004 Invalid parameter
  • The label value name in the URI must exist.
  • The label value name can't be one of the built-in labels, unless that label has a customized description (in which case, this method reverts the description to the built-in default).
401 4000173 Generic add labels to content error An unknown error occurred.
## Delete metric Deletes a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can delete a metric from a definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:delete\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/pulse/metrics/{metric\_id} [view details](#) ## Delete Metric - Retired in API 3.22 **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Deletes a specified metric from a site. #### URI DELETE /api/api-version/sites/site-id/metrics/metric-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the metric.
metric-luidThe unique ID of the metric to remove.
#### Request Body None #### Permissions Users who are not administrators can delete a metric for which they have explicit or implicit Read (view) and Delete permission. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:metrics: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Metric not foundThe metric ID in the URI doesn't correspond to an existing metric.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.9/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/metrics/6561daa3-20e8-407f-ba09-709b178c0b4a" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. ## Delete metric definition Deletes a metric definition. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can delete a metric definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions:delete\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/pulse/definitions/{definition\_id} [view details](#) ## Delete metric tag Deletes the specified metric tag. **Version:** Available in API 3.25 (Tableau Cloud March 2025) 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) **Permissions:** Anyone can make this request but users will see results only for metrics they have permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/pulse/metrics/{metric\_id}/tag/{tag\_id} [view details](#) ## Delete Project Deletes the specified project on a specific site. When a project is deleted, all Tableau assets inside of it are also deleted, including assets like associated workbooks, data sources, project view options, and rights. External assets, such as databases and tables, are not deleted. Starting in Tableau Cloud December 2022 / Server 2023.1, external assets from deleted projects are moved to the External Assets Default Project, and can also be found in External Assets. In Tableau Cloud October 2022 / Server 2022.3 and earlier, external assets are not moved to any other project, but can be found in External Assets. Use this method with caution. #### URI DELETE /api/api-version/sites/site-luid/projects/project-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the project.
project-luidThe LUID of the project to delete.
#### Request Body None #### Permissions Only server administrators and site administrators can call this method. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:projects: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403003Deletion forbiddenYou attempted to delete a default project that cannot be deleted.
404404000Site not foundThe site LUID or URL namespace in the URI doesn't correspond to an existing site.
404404005Project not foundThe project LUID in the URI doesn't correspond to an existing project or the project is not found on this site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/projects/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. ## Delete Project from Favorites Deletes the specified project from the user's favorites. If the specified project is not a favorite, the operation has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/projects/project-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
user-idThe ID of the user to remove the favorite from.
project-idThe ID of the project to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a project only from their own favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 3.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Forbidden favorites accessA non-administrator user attempted to delete a project from a different user's favorites.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/favorites/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/projects/89a82d78-664f-45a1-8256-d4d2961a070b" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Delete Project Permission Removes the specified project permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/projects/project-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/projects/project-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the project.
project-id The ID of the project to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove project the permission for.
capability-name The capability to remove the permission for. In Tableau Server 10.0, valid capabilities for a project are ProjectLeader, Read (view), and Write.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can remove permissions for a project only if they have ChangePermissions (version `2.0`) or ProjectLeader (version `2.1`) permissions for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a project. For a list of valid capabilities, see the capability-name attribute earlier.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permissions to remove default permissions for the project.
403403004Delete forbiddenA non-administrative user tried to update the project, but does not have permissions to the project.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundA user ID in the URI doesn't correspond to an existing user.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
404404012Group not foundA group ID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI isn't assigned to the specified user or group.
404404013Capability not foundThe capability in the URI doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Pulse subscription Deletes a specified subscription to a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can delete subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:delete\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/pulse/subscriptions/{id} [view details](#) ## Delete Quality Warning Trigger by ID Permanently remove a quality warning trigger using the quality warning trigger ID. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/dataQualityTriggers/_trigger-id_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
trigger-id

The unique ID of the quality warning trigger.

#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete a quality warning trigger: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 200 #### Response Body None #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400138Generic quality warning trigger errorThe quality warning trigger could not be deleted for some other reason than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404037Quality warning not foundThe requested quality warning trigger was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Quality Warning Triggers by Content Permanently remove all quality warning triggers for one or more data sources or flows, or both. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI **Delete one quality warning trigger** DELETE api/_api-version_/sites/_site-id_/dataQualityTriggers/_content-type_/contentIds?filter=contentId:in:\[_content-luid_\] **Delete multiple quality warning triggers** DELETE api/_api-version_/sites/_site-id_/dataQualityTriggers/_content-type_/contentIds?filter=contentId:in:\[_content-luid1_,_content-luid2_,_content-luid3_,...\] #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content the quality warning trigger has been applied to. In this case, use one of the following values:

  • datasource
  • flow

These values are not case sensitive.

content-luid The unique ID of the asset. This is the same as the content ID.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete quality warning triggers: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 200 #### Response Body None #### Version Version 3.10 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400138Generic quality warning trigger errorThe quality warning trigger could not be deleted for some other reason than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404037Quality warning not foundThe requested quality warning trigger was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Delete Recycle Bin Content Item Permanently deletes the specified Recycle Bin content item. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2). **License**: No additional license required. **Permissions**: Server administrators, site administrators, or other users. **Access Scope**: `tableau:recyclebin_content:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Administrators can delete any content in the site's Recycle Bin. Other users can only delete content they own. For information about how content properties change when it's deleted or restored. See [Recycle Bin](https://help.tableau.com/current/pro/desktop/en-us/recycle_bin.htm). #### URI DELETE /api/api-version/sites/site-id/recyclebin/content-type/content-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the Recycle Bin.
content-typeContent type in plural form: workbooks, datasources, flows, or projects.
content-idThe LUID of the Recycle Bin content item to delete.
#### Request Body None #### Response Code 204 #### Response Body None #### Version Version 3.29 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestCheck the request body and query string parameters.
401401000No auth credentialsCheck the authorization header.
401401002Invalid auth credentialsSession expired or invalid.
403403004Operation on resource unauthorizedCheck user permission.
403403157Feature disabledRecycle Bin disabled.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404003Unknown resourceRequested content item not found.
405405000Method not allowedRequest type unrecognized for this method.
406406000Unacceptable media typeBad Accept: header.
409409004Invalid parameterParameter type-mismatched, unknown content type, or malformed LUID.
429429000Too many requestsRequest throttled.
500500000Internal server errorUnknown error.
503500001Internal service errorInternal service error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Routing Rule Permanently deletes a Bridge routing rule identified by its ID. This method applies to both allow rules and block rules. Deletion is immediate; the domain is no longer routed (or blocked) by the removed rule. If no rule matches the ID, a 404 error is returned. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/sites/site-luid/bridge-routing-rules/routing-rule-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the routing rule to delete.
#### Request Body None #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedThe routing-rule-id is not a valid UUID.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503920Unexpected server errorAn unexpected error occurred while deleting the rule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete SCIM Configuration Permanently removes the System for Cross-domain Identity Management (SCIM) configuration from the Tableau Cloud site. Deleting the SCIM configuration deletes the associated SCIM token. You must be the user who created the SCIM configuration to delete the SCIM configuration unless the creator of the SCIM configuration is no longer a member of the site. After the SCIM configuration is deleted, ensure the SCIM token's secret is also removed from the identity provider's (IdP's) SCIM settings. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_configurations:delete` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI DELETE /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body None #### cURL Request Example ``` DELETE request: curl --location --request DELETE 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations/065693d8-436a-4738-a8f1-375953a2a888' ``` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
403403182ForbiddenThe SCIM configuration can only be deleted by the user who created the SCIM configuration.
404404057Resource Not FoundThe SCIM configuration cannot be deleted because it does not exist on this site.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete SCIM Token Permanently removes the System for Cross-domain Identity Management (SCIM) token. You must be the user that created the SCIM configuration to delete the associated SCIM token unless the creator of the SCIM configuration is no longer a member of the site. After the SCIM token is deleted, ensure the SCIM token's secret is also removed from the identity provider's (IdP's) SCIM settings. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_api_tokens:delete` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI DELETE /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id/apiToken #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body None #### cURL Request Example ``` DELETE request: curl --location --request DELETE 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations/065693d8-436a-4738-a8f1-375953a2a888/apiToken' ``` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
404404050Resource Not FoundThe SCIM configuration does not have an associated SCIM token.
404404057Resource Not FoundThe SCIM configuration ID is not valid.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Server Schedule Deletes the specified schedule on Tableau Server. _For Tableau Cloud, see [Delete Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#delete_extract_refresh_task) and [Delete Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#delete_subscription)._ #### URI DELETE /api/api-version/schedules/schedule-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
schedule-idThe ID of the schedule to delete. To determine what schedules are available, call List Server Schedules.
#### 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:schedules: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 #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400059Error deleting the schedule.An unspecified error occurred during the deletion operation.
404404023Schedule not foundThe specified schedule doesn't correspond to an existing schedule on the site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Server Session Deletes a specified session. This method is not available for Tableau Cloud and is typically used in programmatic management of the life cycles of embedded Tableau sessions. #### URI DELETE api/_api-version_/sessions/_session-id_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
session-id

The unique ID of the session to be deleted. A session's ID and other metadata can be queried from the Tableau Server Postgres repository.

Reading the Postgres repository excessively can impact performance and that writing directly to the repository is not supported in any form. For more information, see Collect Data with the Tableau Server Repository and Tableau Server Postgres Data Dictionary.

#### 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:sessions: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400105Session delete errorAn unknown error occurred and the session could not be deleted.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
## Delete Site Deletes the specified site. You can specify the site to delete by using the site ID, the site name, or the content URL. You use the key query string parameter to indicate how you are specifying the site, as shown in the URIs. Beginning in API version 3.18, you can delete a site asynchronously, which allows you to track the site deletion progress. This method is not available for Tableau Cloud. **Note**: You must have previously called the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_in) method and signed in to a site in order to delete the site. When you call this method, you must include the authentication token that you got back when you signed into the site. #### URI **Delete site** DELETE /api/api-version/sites/site-id DELETE /api/api-version/sites/site-name?key=name DELETE /api/api-version/sites/content-url?key=contentUrl **Delete site asynchronously** (beginning in API 3.18) DELETE /api/api-version/sites/async-delete/site-id DELETE /api/api-version/sites/async-delete/site-name?key=name DELETE /api/api-version/sites/async-delete/content-url?key=contentUrl #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site to delete.
site-name The name of the site to delete. If you specify a site name, you must also include the parameter key=name.
content-url

The permanent name of the site to sign in to. The content URL appears in the URL path of Tableau content in your browser address bar after the Tableau Server URL.

mySite is the content URL in the following example:

http://<server or cloud URL>/#/site/mySite/explore

#### 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:sites: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 **Delete site** 204 **Delete site asynchronously** (beginning in API 3.18) 201 #### Response Body **Delete site** None **Delete site asynchronously** (beginning in API 3.18) ``` ``` The `` element returns the following attributes: - job-id is a unique identifier for the job. You can use the value of this attribute to check the status of the delete job by passing it to the [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) method. - mode has the value of `Asynchronous`. - type has the value of `SiteDelete`. - progress is set to `0` when the asynchronous delete job is created, and then changes to `100` when the job is complete. This value indicates percentage of job progress. - createdAt provides a complete date and time that indicates when asynchronous delete was initiated. - finishCode is set to `1` when the asynchronous delete job is created, and then changes to `0` when the job is complete. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403002Deletion not allowed.An attempt was made to delete the default Tableau Server site.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Request Example **Delete site** `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` `curl "http://MY-SERVER/api/3.29/sites/marketing-site?key=contentUrl" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. **Delete site asynchronously** (beginning in API 3.18) `curl "http://MY-SERVER/api/3.29/sites/async-delete/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` `curl "http://MY-SERVER/api/3.29/sites/async-delete/marketing-site?key=contentUrl" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` `curl "http://MY-SERVER/api/3.29/sites/async-delete/marketing-site-name?key=name" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The responses above will return the job ID for a successful delete operation. You can use the value to check the status of the delete job by passing it to the [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) method. ## Delete Subscription Deletes the specified subscription on Tableau Server or Tableau Cloud. #### URI DELETE /api/api-version/sites/site-id/subscriptions/subscription-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the subscription.
subscription-idThe ID of the subscription to delete. To determine what subscriptions are available, call Query Subscriptions.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). Not available for Tableau Server. `tableau:tasks:delete` (this scope is included in the scope: `tableau:tasks`) 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 #### Permissions Tableau Server users can call this method to delete any subscription that they had permission to create. For details, see [Create Subscription](#create_subscription). #### Response Code 204 #### Response Body None #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400062Error deleting the subscription.An unspecified error occurred during the deletion operation.
401401002User not authenticated.The user making the request has not been authenticated for this site.
403403059Delete forbidden.A non-administrator user called this method but doesn't have permission to delete the subscription.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Table Permissions Permanently remove the permissions applied to a table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/api-version/sites/site-luid/tables/table-luid/permissions/users/user-luid/capability-name/capability-mode DELETE api/api-version/sites/site-luid/tables/table-luid/permissions/groups/group-luid/capability-name/capability-mode #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
table-luidThe LUID of the table asset.
user-luidThe LUID of the user to remove the permissions for.
group-luidThe LUID of the group to remove the permissions for.
capability-nameThe explicit permissions capability to remove. Capabilities that can be removed are Read, Write, ChangePermissions, or ChangeHierarchy.
capability-modeThe permissions mode to remove. Modes that can be removed are Allow or Deny.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete the permissions on a table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 204 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400120Bad requestPermissions could not be deleted because support for explicit permissions is available for table assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
403403117Database lockedPermissions for the table asset cannot be deleted because the database asset is locked.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Delete Tag from Column Delete a tag from a column. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI DELETE api/api-version/sites/site-id/columns/column-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
column-idThe unique ID of the column asset.
tag-nameThe keyword text of the tag.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:column_tags: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404007Tag not foundThe tag does not exist.
409409062Generic database tag errorThe tag or tags could not be deleted (or added) for some other reason than those specified in this table.
409409066Column not foundThe column asset does not exist.
## Delete Tag from Data Source Deletes a tag from the specified data source. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to remove the tag from.
tag-nameThe name of the tag to remove from the data source.
#### Request Body None #### Permissions Tableau Server users who are not server administrators, site administrators, or data source owners can delete a tag from a data source only if they are project leaders or if they originally added the tag. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasource_tags: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400077Error deleting tagThere was a problem deleting the tag from the specified data source.
403403004Deleting tags forbiddenA non-administrator user called this method but doesn't have permission to delete a tag from the specified data source.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404007Tag not foundThe tag in the URI doesn't exist for the specified data source.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Tag from Database Delete a tag from a database. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI DELETE api/api-version/sites/site-id/databases/database-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
database-idThe unique ID of the database asset.
tag-nameThe keyword text of the tag.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:database_tags: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404007Tag not foundThe tag does not exist.
404404031Database not foundThe database asset does not exist.
409409048Generic database tag errorThe tag or tags could not be deleted (or added) for some other reason than those specified above.
## Delete Tag from Table Delete a tag from a table. For more information about tags, see [Tag Items](https://help.tableau.com/current/pro/desktop/en-us/tags.htm) in the Tableau User Help. #### URI DELETE api/api-version/sites/site-id/tables/table-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
tag-nameThe keyword text of the tag.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to delete tags: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:table_tags: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404007Tag not foundThe tag does not exist.
404404032Table not foundThe table asset does not exist.
409409055Generic database tag errorThe tag or tags could not be deleted (or added) for some other reason than those specified above.
## Delete Tag from View Deletes a tag from the specified view. #### URI DELETE /api/api-version/sites/site-id/views/view-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
view-idThe ID of the view to remove the tag from.
tag-nameThe name of the tag to remove from the view.
#### Request Body None #### Permissions Tableau Server users who are not server administrators, site administrators, or workbook owners can delete a tag from a workbook only if they are project leaders or if they originally added the tag. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:view_tags: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400078Error deleting tagThere was a problem deleting the tag from the specified view.
403403004Deleting tags forbiddenA non-administrator user called this method but doesn't have permission to delete a tag from the specified workbook.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404007Tag not foundThe tag in the URI doesn't exist for the specified workbook.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Tag from Virtual Connection Deletes a tag from a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the View permission for the virtual connection and your site role must be at least Explorer.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connection\_tags:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
tag-nameThe text of the tag.
#### Request Body None #### cURL Request Example `curl --location --request DELETE 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/tags/office' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400077Error deleting tagThere was a problem deleting the tag from the specified virtual connection.
403403004Deleting tags forbiddenThe user doesn't have permissions to add delete tags from the virtual connection.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404004Virtual connection not foundThe virtual connection ID in the URI doesn't correspond to an existing virtual connection.
404404007Tag not foundThe tag in the URI doesn't exist for the specified virtual connection.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Tag from Workbook Deletes a tag from the specified workbook. #### URI DELETE /api/api-version/sites/site-id/workbooks/workbook-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to remove the tag from.
tag-nameThe name of the tag to remove from the workbook.
#### Request Body None #### Permissions Tableau Server users who are not server administrators, site administrators, or workbook owners can delete a tag from a workbook only if they are project leaders or if they originally added the tag. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbook_tags: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400051Error deleting tagThere was a problem deleting the tag from the specified workbook.
403403004Deleting tags forbiddenA non-administrator user called this method but doesn't have permission to delete a tag from the specified workbook.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404007Tag not foundThe tag in the URI doesn't exist for the specified workbook.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the specified data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
user-idThe ID (not name) of the user to remove from the data-driven alert.
**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
HTTP statuserror CodeConditionDetails
403403004Delete forbiddenA user called this method who does not have the required permissions.
403409029Deleting recipient from data-driven alert forbiddenThe user is not authorized to remove the recipient from the data-driven alert.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002Resource Not FoundThe user ID specified in the request body is invalid.
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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 Users from Site with CSV Creates a job to remove a list of users, specified in a .csv file, from a site. The .csv file should comply with the rules described in one of the following topics: - For Tableau Cloud - [CSV Import File Guidelines](https://help.tableau.com/current/online/en-us/csvguidelines.htm) - For Tableau Server - [CSV Import File Guidelines](https://help.tableau.com/current/server/en-us/csvguidelines.htm) #### URI POST /api/_api-version_/sites/_site-id_/users/delete #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that users are being deleted from.
#### Request Body Because this method involves a file that is external to Tableau a multi-part request is required. For more information on multi-part requests, See [Importing CSV files with Multipart Requests](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm#multipart_requests). ``` --boundary-string Content-Disposition: form-data; name=\"tableau_user_delete\"; filename=\"users.csv\" Content-Type: text/csv --boundary-string-- ``` #### 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:users: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 #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request payload is missing or incomplete, or contains malformed XML.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ``` curl -X POST \ http://10.108.21.238//api/3.15/sites/8aa3291f-1b5a-4f52-a3be-6512661f574d/users/delete \ -H 'cache-control: no-cache' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -H 'x-tableau-auth: AVjAKZb3SQimzoqyMmQXEg|9OSHQrwCXF83SIR2XCuDEK91AM7v3FZr' \ -F tableau_user_delete=@users.csv ``` ## Delete View Deletes a view from a workbook. Use the [Get Workbook](#query_workbook) method or the [Query Views for Workbook](#query_views_for_workbook) method to find the view ID. If you delete the only view in a workbook, the workbook is deleted. #### URI DELETE /api/api-version/sites/site-id/views/view-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
view-idThe ID of the view to remove.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a view for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:views: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 #### Version Introduced in Tableau Cloud December 2025 / Server 2025.3 (API 3.27). For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400212Generic errorAn unknown error occurred. Try again.
403403004Operation on resource unauthorizedInsufficient permissions to perform the operation. Confirm you have Read and Delete permissions for the view.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site. Confirm the site ID.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view. Confirm the view ID.
405405000Invalid request methodThe HTTP request method was wrong. Confirm you're using the HTTP DELETE method.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete View from Favorites Deletes the specified view from user's favorites. If the specified view is not a favorite, the operation has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/views/view-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
user-idThe ID of the user to remove the favorite from.
view-idThe ID of the view to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a view only from their own favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Forbidden Favorites accessA non-administrator user attempted to delete a view from a different user's favorites.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user
404404010View not a favoriteThe view ID in the URI exists but is not a favorite of the specified user.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete View Permission Deletes permission to the specified view (also known as a sheet) for a Tableau Server user or group. #### URI DELETE /api/api-version/sites/site-id/views/view-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/views/view-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the view.
view-id The ID of the view to delete permissions for. You can obtain this ID by calling Query Views for Site.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for.

The valid capabilities for a view are AddComment, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can delete permissions from a view only if they have ChangePermissions permissions on the view (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 3.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a view.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to delete permissions on the view.
403403039Project permissions lockedThe parent project that contains the specified view has its permissions locked.
403403096Parent workbook tabs enabledThe specified view currently has permissions inherited from its parent workbook. View permission can be deleted if the parent workbook has its tabs disabled.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn’t correspond to an existing user.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or an invalid capability value (other than Allow or Deny).
404404014Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/fbfa6f03-982c-4930-8ec1-d5949a19125d/views/0524c7ce-250b-45b1-adf2-d08f1648643c/permissions/users/ff43cb47-f208-4d2f-9a22-0fbb6d29f7f1/AddComment/Allow" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Delete Virtual Connection Deletes a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Delete permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl --request DELETE 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' ``` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
403403004User not authorized.Check to make sure the user has the required permissions.
404404049Virtual connection not foundCheck the virtual connection LUID.
409409122Generic errorAn unknown error occurred.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Virtual Connection Permission Removes the specified virtual connection permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the virtual connection.
virtualconnection-id The ID of the virtual connection to remove the permission for.
group-id The LUID of the group to remove the permission for. A request does not need to include both a user and a group grantee.
user-id The LUID of the user to remove the permission for. A request does not need to include both a user and a group grantee.
capability-name

The capability to remove the permission for. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions You must be an administrator or have the Delete permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe specified capability is invalid for a virtual connection. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.
403403004Permissions setting forbiddenThe user tried to change permissions for a virtual connection but doesn't have the permission to change them.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
404404014Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not DELETE.
400409004Invalid LUIDThe virtual connection LUID in the URI was not found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request DELETE 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/read/allow' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` ## Delete Work Copy Elements Deletes elements from a work copy. Send `elementType` and `name` for each element. Other content is ignored. Returns HTTP 200 when every element is deleted. The success body omits the elements that succeeded. If any element fails, the HTTP status is the status of the first failure and the body lists only the failed elements. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:datasources:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/tds/sites/site-luid/workcopy/workcopy-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Request Body ``` FieldDescription Sales TableDescription Orders ``` ``` { "tdsElementList": [ { "elementType": "FieldDescription", "name": "Sales" }, { "elementType": "TableDescription", "name": "Orders" } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements to delete. Must contain at least one element. An empty or missing list is HTTP 400 with error code 400008.
tdsElementList[].elementTypeRequired for this method. Element type of the element to delete (Column, FieldDescription, or TableDescription). Any other value is forwarded and reported as a per-element failure.
tdsElementList[].nameRequired. Name of the element to delete.
tdsElementList[].columnNot applicable to this method. Delete uses elementType and name only; other content is ignored.
tdsElementList[].descriptionNot applicable to this method. Delete uses elementType and name only; other content is ignored.
#### Response Code 200 OK #### Response Body On full success the response is an empty `tsResponse` — `tdsElementResult` is omitted entirely rather than returned as an empty list. When one or more elements fail, the HTTP status is the status of the first failure and the body carries `tdsElementResult` for the failed elements only; see the Attribute Values table below and the Errors table for the failure shape. ``` ``` ``` {} ``` #### Attribute Values
tdsElementResult[]Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.
tdsElementResult[].elementTypeRequired. Element type of the failed element, copied from the request.
tdsElementResult[].nameRequired. Name of the failed element, copied from the request.
tdsElementResult[].statusRequired. Failure status for this element.
tdsElementResult[].status.codeRequired (within status). The translated HTTP status for this element (200, 400, 401, 403, 404, 500, or 503). Not a Tableau 6-digit error sub-code.
tdsElementResult[].status.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400400008Missing tdsElementListtdsElementList is missing or empty. The list is required and must contain at least one element.
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Per-element invalid argumentOne or more elements were rejected as invalid. The body lists only the failed elements, and each status.code is the HTTP status 400.
400Unmapped per-element gRPC statusThe TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
401Per-element unauthenticatedThe TDS service rejected an element as unauthenticated. The body lists only the failed elements.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
403Per-element permission deniedThe TDS service rejected an element because permission was denied. The body lists only the failed elements.
404Per-element not foundOne or more elements were not found. The body lists only the failed elements. This is not error code 404065, which the read methods return for a missing named element.
405405000Method not allowedThe HTTP method is not supported for this resource.
429429000Rate limit exceededToo many requests sent in a given time period.
500Per-element internal errorThe TDS service failed while editing an element. The body lists only the failed elements.
503Per-element unavailableThe TDS service was unavailable while editing an element. The body lists only the failed elements.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Workbook Deletes a workbook. When a workbook is deleted, all of its assets are also deleted, including associated views, data connections, and so on. #### URI DELETE /api/api-version/sites/site-id/workbooks/workbook-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to remove.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a workbook for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbooks: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Workbook from Favorites Deletes a workbook from a user's favorites. If the specified workbook is not a favorite of the specified user, this call has no effect. #### URI DELETE /api/api-version/sites/site-id/favorites/user-id/workbooks/workbook-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to remove the favorite from.
workbook-idThe ID of the workbook to remove from the user's favorites.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can remove a workbook only from their own favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Access to Favorites forbiddenA non-administrator user attempted to delete a workbook from a different user's favorites.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404010Workbook not a favoriteThe workbook ID in the URI exists but belongs to a different user.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Workbook Permission Deletes the specified permission from the specified workbook for a group or user. #### URI DELETE /api/api-version/sites/site-id/workbooks/workbook-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/workbooks/workbook-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the workbook.
workbook-id The ID of the workbook to remove the permission for.
group-id The ID of the group to remove the permission for.
user-id The ID of the user to remove the permission for.
capability-name

The capability to remove the permission for. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, ExtractRefresh, Filter, Read (view), ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, Write, RunExplainData, and CreateRefreshMetrics.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission. This value is case sensitive.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can delete permissions from a workbook only if they have ChangePermissions permission for workbook (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read, Share_view, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to delete permissions from the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not foundThe capability in the URI doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny at the end of the URI.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Disallow dashboard extension on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Deletes a specific dashboard extension from the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} [view details](#) ## Download Data Source Downloads a data source in `.tdsx` format. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/content GET /api/api-version/sites/site-id/datasources/datasource-id/content?includeExtract=extract-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to download.
extract-value(Optional) The extract-value is a Boolean value (False or True). When the data source specified for download has an extract, if you add the parameter ?includeExtract=False, the extract is not included when you download the data source. You can use this parameter to improve performance if you are downloading workbooks or data sources that have large extracts.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can download a data source only if they have ExportXml permission for the data source (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:datasources:download ``` 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 The data source content in `.tdsx` format (`Content-Type: application/octet-stream`). The response will have the following content disposition header: `Content-Disposition: name="tableau_datasource"; filename="datasource-filename"` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403028Read forbiddenA non-administrator user attempted to download a data source, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/content" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" > my-datasource.tdsx` The response is a file that contains the data source. ## Download Data Source Encrypted Keychain Gets an encrypted version of the embedded credentials from the data source. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:embedded\_credentials:download - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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/datasources/datasource-luid/retrieveKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
datasource-luidThe LUID of the data source to download the encrypted keychain from.
#### Request Body ``` site1 d56023b5-8f8b-4241-aa74-8974ced85827 http://example.com ``` ``` { "destinationSiteUrlNamespace": "site1", "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827", "destinationServerUrl": "http://localhost" } ``` #### Request Attributes
destinationSiteUrlNamespace

(Required) The site name on Tableau Cloud.

destinationSiteLuid (Required)  The site ID on Tableau Cloud.
destinationServerUrl

(Required) The destination Tableau Cloud URL.

#### cURL Request Example ``` curl --location "https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/retrieveKeychain" -X POST --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data " site19a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4dhttp://example.com" ``` #### Response Code 200 #### Response Body ``` BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidList": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404004 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Data Source Revision Downloads a specific version of a data source prior to the current one in `.tdsx` format. To down load the current version of a data source use the [Download Data Source](#download_data_source) method. **Note:** This method is available only if version history is enabled for the specified site. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/revisions/revision-number/content #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to download.
revision-numberThe revision number of the data source to download. To determine what versions are available, call Get Data Source Revisions.
#### Request Body None #### Permissions Tableau Server users who are site administrators can download data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 The data source content in `.tdsx` format (`Content-Type: application/octet-stream`). The response will have the following content disposition header: `Content-Disposition: name="tableau_datasource"; filename="datasource-filename"` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403028Read forbiddenA non-administrator user attempted to download a data source, but the caller doesn't have required permissions.
403403053Version history not enabledversion history is not enabled for the specified site.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404024Data source revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Flow Downloads a flow in .tfl or .tflx format. #### URI GET /api/api-version/sites/site-id/flows/flow-id/content #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to download.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can download a flow only if they have download permission for the flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows:download ``` 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 None #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403097Read forbiddenA non-administrator user attempted to download a flow, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/flows/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/content" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" >` **Response:** The response is a file that contains the flow. ## Download Flow Encrypted Keychain Gets an encrypted version of the embedded credentials in a flow. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server. **Version**: Available in API 3.25 (Tableau Cloud February 2025 / Tableau Server 2025.1) and later. **License**: No additional license required. **Permissions**: This method can only be called by Tableau Cloud site and Tableau Server administrators. **Access Scope**: tableau:embedded\_credentials:download - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/flows/flow-luid/retrieveKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
flow-luidThe LUID of the flow to download the encrypted keychain from.
#### Request Body ``` site1 d56023b5-8f8b-4241-aa74-8974ced85827 http://localhost ``` ``` { "destinationSiteUrlNamespace": "site1", "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827", "destinationServerUrl": "http://localhost" } ``` #### Request Attributes
destinationSiteUrlNamespace

(Required) The site name on the destination site.

destinationSiteLuid (Required)  The site LUID of the destination site.
destinationServerUrl

(Required) The destination Tableau Server or Tableau Cloud URL.

#### cURL Request Example ``` curl --location "https://myserver/api/3.25/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/flows/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/retrievekeychain" -X POST --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data "site1 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4dhttp://localhost" ``` #### Response Code 200 #### Response Body ``` BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidList": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site LUID in the URI doesn't correspond to an existing site.
404 404004 Flow not found The flow LUID in the URI doesn't correspond to an existing flow.
405 405000 Invalid request method Request type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download User Credentials Gets credentials for a user who is being migrated to another Tableau Cloud or Tableau Server site. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:oauth\_credentials:download - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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/users/user-luid/retrieveSavedCreds #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
user-luidThe LUID of the user whole credentials you want to download.
#### Request Body ``` site1 d56023b5-8f8b-4241-aa74-8974ced85827 http://example.com ``` ``` { "destinationSiteUrlNamespace": "site1", "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827", "destinationServerUrl": "http://localhost" } ``` #### Request Attributes
destinationSiteUrlNamespace

(Required) The site name on Tableau Cloud.

destinationSiteLuid (Required)  The site ID on Tableau Cloud.
destinationServerUrl

(Required) The destination Tableau Cloud URL.

#### cURL Request Example ``` curl --location "https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/retrieveKeychain" --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data " site1 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d http://example.com " ``` #### Response Code 200 #### Response Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidList": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The user ID in the URI doesn't correspond to an existing user.
405 405000 Invalid request method Request type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download View Crosstab Excel Downloads an Excel (`.xlsx`) file containing crosstab data from a view that the user has permission to access in a workbook. If a crosstab is exported from a dashboard, data from only the first view in the dashboard will appear in the `.xlsx` file. Downloads of data from story dashboards are not supported at this time. If you make multiple requests for an `.xlsx`, subsequent calls return a cached version of the file. This means that the returned `.xlsx` might not include the latest changes to the workbook. To decrease the amount of time that a workbook is cached, use the maxAge parameter. Note the data exported is at a summary level only. Detail level data is only available as a download option in the user interface. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-id/views/view-id/crosstab/excel GET /api/api-version/sites/site-id/views/view-id/crosstab/excel?maxAge=max-age-minutes GET /api/api-version/sites/site-id/views/view-id/crosstab/excel?vf\_=_filter-value_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
view-idThe ID of the view to use as the source of the crosstab to be downloaded as an .xlsx file.
max-age-minutes(Optional) The maximum number of minutes an .xlsx file will be cached on the server before being refreshed. To prevent multiple .xlsx requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
filter-valueThe value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /excel?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
#### Request Body None #### Permissions To export a crosstab to an `.xlsx` of a view, users who are not server administrators or site administrators need Read and ExportData permissions for the workbook containing the view and for the view itself. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:views:download ``` 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 This method has no response body. The response is in the form of a downloaded `.xlsx` file. The response header content will have Content-Type: `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`. #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400101 Unknown error

There was a problem downloading or querying this file.

400 400130 Unknown error

The view ID in the URI doesn't correspond to a view available on the specified site.

401 4001XX Unauthorized

The authentication token for the request is missing, invalid, or expired.

403 4031XX Unauthorized

A user attempted to download a .xlsx file without Read and/or ExportData permissions for the workbook or view, and is not an administrator.

404 404xxx Site or view not found The site or view specified in the request could not be found.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.9/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/crosstab/excel?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response is a file that contains the crosstab, whose data is no older than 60 minutes, saved as an `.xlsx` file. ## Download Virtual Connection Downloads a virtual connection in `.tvcx` format. _To download a JSON representation of a virtual connection instead, see [Download Virtual Connection as JSON](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json)._ A `.tvcx` file is a packaged virtual connection. You can publish a downloaded `.tvcx` file with [Publish Virtual Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#publish_virtual_connection). **Version**: Available in API 3.30 and later. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: You must have the Overwrite permission for the virtual connection and your site role must be at least Creator, or you must be a site or server administrator. **Access Scope**: `tableau:virtual_connections:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/content #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site that contains the virtual connection.
virtualconnection-idThe LUID of the virtual connection to download. To get the LUID, use List Virtual Connections.
Unlike [Download Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#download_data_source), this method has no `includeExtract` parameter. If the virtual connection uses extracts, the download always includes them. Encrypted extracts are decrypted before packaging, so the downloaded `.tvcx` file can be published to any site. #### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/content" -X GET -H "X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3" -o my-virtualconnection.tvcx ``` The response is a file that contains the virtual connection. #### Response Code 200 #### Response Headers `Content-Type: application/octet-stream` `Content-Disposition: name="tableau_virtual_connection_content"; filename="virtualconnection-filename.tvcx"` #### Response Body The virtual connection in `.tvcx` format, a binary ZIP archive with the following contents: ``` virtualconnection-name.tvcx (ZIP) virtualconnection-name.tvc The virtual connection schema (tables, columns, connections, and policy collection) Data/Extracts/*.hyper Hyper extracts. Present only if the virtual connection uses extracts. ``` A `.tvcx` file for a virtual connection that has only live tables contains just the `.tvc` schema file. #### Errors
HTTP statuserror CodeConditionDetails
400400200Download virtual connection errorThe virtual connection ID is not a valid ID, or the .tvcx file could not be built.
403403174Download virtual connection forbiddenThe user does not have permission to download the virtual connection.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404049Virtual connection not foundThe virtual connection does not exist.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Virtual Connection as JSON Downloads a JSON-representation of a virtual connection. _To download a virtual connection as a `.tvcx` file, see [Download Virtual Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection)._ **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Overwrite permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd" -X GET -H "Content-Type: application/xml" -H "X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3" ``` #### Response Code 200 #### Response Body ``` virtualconnection-as-json ``` ``` { "virtualConnection": { "project": { "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" }, "owner": { "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" }, "content": "virtualconnection-as-json", "name": "virtualconnection-name" } } ``` The response body contains the project LUID, owner LUID, and a content element (for XML output) or content property (for JSON output) containing the virtual connection schema rendered as JSON. If the response is XML, the content element is unescaped JSON. If the response is JSON, the content property is escaped JSON. #### Errors
HTTP statuserror CodeConditionDetails
400400200Generic errorAn unknown error occurred.
403403174User not authorized.Check to make sure the user has the required permissions.
404404049Virtual connection not foundCheck the virtual connection LUID.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Virtual Connection Revision as JSON Downloads a JSON-representation of an earlier revision of a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Overwrite permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/revisions/revision-number #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
revision-numberThe revision number (revisionNumber) of the virtual connection, as returned by the Get Virtual Connection Revisions method. This is an integer, not a LUID.
#### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/revisions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' ``` #### Response Code 200 #### Response Body ``` virtualconnection-as-json ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "owner": { "id": "owner-id" }, "content": "virtualconnection-as-json", "name": "virtualconnection-name" } } ``` The response body contains the project LUID, owner LUID, and a content element (for XML output) or content property (for JSON output) containing the virtual connection schema rendered as JSON. If the response is XML, the content element is unescaped JSON. If the response is JSON, the content property is escaped JSON. #### Errors
HTTP statuserror CodeConditionDetails
400400200Generic errorAn unknown error occurred. Check to make sure the revision number is a revision and not the active virtual connection.
403403174User not authorized.Check to make sure the user has the required permissions.
404404049Virtual connection not foundCheck the virtual connection LUID. Check that the revision number exists.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Workbook Downloads a workbook in `.twb` or `.twbx` format. **Security note:** Content in .twb or .twbx files downloaded using this method is stored in plain text. All data, including filter values that may give semantic clues to the data, will be readable by anyone who opens the files. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/content GET /api/api-version/sites/site-id/workbooks/workbook-id/content?includeExtract=extract-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to download.
extract-value(Optional) The extract-value is a Boolean value (False or True). When the workbook specified for download has an extract, if you add the parameter ?includeExtract=False, the extract is not included when you download the workbook. You can use this option to improve performance if you are downloading workbooks or data sources that have large extracts.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can download a workbook only if they have ExportXml permission for the workbook (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:workbooks:download ``` 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 One of the following, depending on the format of the workbook: - The workbook's content in `.twb` format (`Content-Type: application/xml`) - The workbook's content in `.twbx` format (`Content-Type: application/octet-stream`) In both cases, the response will have the following content disposition header: `Content-Disposition: name="tableau_workbook"; filename="workbook-filename"` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403019Read forbiddenA non-administrator user attempted to download a workbook, but the caller doesn't have ExportXml permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/content" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" > c:\files\my-workbook.twbx` The response is a file that contains the workbook. ## Download Workbook Encrypted Keychain Gets an encrypted version of the embedded credentials from the workbook. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:embedded\_credentials:download - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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/workbooks/workbook-luid/retrieveKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
workbook-luidThe LUID of the workbook to download the encrypted keychain from.
#### Request Body ``` site1 d56023b5-8f8b-4241-aa74-8974ced85827 http://localhost ``` ``` { "destinationSiteUrlNamespace": "site1", "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827", "destinationServerUrl": "http://localhost" } ``` #### Request Attributes
destinationSiteUrlNamespace

(Required) The site name on Tableau Cloud.

destinationSiteLuid (Required)  The site ID on Tableau Cloud.
destinationServerUrl

(Required) The destination Tableau Cloud URL.

#### cURL Request Example ``` curl --location "https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/retrieveKeychain" -X POST --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data " site1 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d http://example.com " ``` #### Response Code 200 #### Response Body ``` BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidList": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` ## Download Workbook PDF Downloads a `.pdf` containing images of the sheets that the user has permission to view in a workbook. Download Images/PDF permissions must be enabled for the workbook (true by default). If Show sheets in tabs is not selected for the workbook, only the default tab will appear in the `.pdf` file. If you make multiple requests for a PDF, subsequent calls return a cached version of the file. This means that the returned PDF might not include the latest changes to the workbook. To decrease the amount of time that a workbook is cached, use the maxAge parameter. **Version**: Available in API 3.4 and later. **License**: No additional license required. **Permissions**: To download a `.pdf` of a workbook, Tableau Server users who are not server administrators or site administrators need Read and ExportImage permissions for the workbook. The user needs Read and ExportImage permissions for a view in a workbook in order for that view to appear in the `.pdf`. **Access Scope**: `tableau:workbooks:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/workbooks/workbook-id/pdf?type=page-type&orientation=orientation GET /api/api-version/sites/site-id/workbooks/workbook-id/pdf?maxAge=max-age-minutes Available in API 3.23 (Tableau Cloud December 2024 / Tableau Server 2024.3) and later: GET /api/api-version/sites/site-id/workbooks/workbook-id/pdf?vf\_fieldname\=filter-value Available in API 3.26 (Tableau Cloud June 2025/ Tableau Server 2025.3) and later: GET /api/api-version/sites/site-id/workbooks/workbook-id/pdf?vizHeight=viz-height&vizWidth=viz-width #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the workbook.
workbook-id The ID of the workbook to use as the source of the .pdf file to be downloaded.
max-age-minutes (Optional) The maximum number of minutes a workbook PDF will be cached before being refreshed. To prevent multiple PDF requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
orientation (Optional) The orientation of the pages in the .pdf file produced. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-type

(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid.

If this parameter is not present the page type will default to Legal.

fieldname=filter-value

Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later:

(Optional) An expression that applies a granular filter to the request. Returns will be based on the value (filtervalue) of the dimension or measure (fieldname) of your view data you specify. For more information, see View filter queries.

viz-height (Optional) The height of the rendered pdf image in pixels that, along with the value of vizWidth, determines its resolution and aspect ratio.
viz-width (Optional) The width of the rendered pdf image in pixels that, along with the value of vizHeight, determines its resolution and aspect ratio.
#### Request Body None #### Response Code 200 #### Response Body This method has no response body. The response is in the form of a downloaded `.pdf` file. The response header content will have `Content-Type:application/pdf`. #### Errors
HTTP status error Code Condition Details
400 400101 Unknown error

There was a problem downloading or querying this workbook.

403 403004 Unauthorized

A non-administrator user attempted to download a pdf, but they don't have Read and/or ExportImage permissions for the workbook or user does not have Read permissions for the views of the workbook.

403 403105 Unauthorized

The PDF export feature is disabled on the server or the server is not configured to allow PDF exports using the REST API.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in the URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Request Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/pdf?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -o "response.pdf" ``` The response is a file that contains the workbook, whose data is no older than 60 minutes, is saved as a pdf. ## Download Workbook PowerPoint Downloads a PowerPoint (`.pptx`) file containing slides with images of the sheets that the user has permission to view in a workbook. Download Images/PDF permissions must be enabled for the workbook (true by default). If Show sheets in tabs is not selected for the workbook, only the default tab will appear in the `.pptx` file. If you make multiple requests for a `.pptx`, subsequent calls return a cached version of the file. This means that the returned `.pptx` might not include the latest changes to the workbook. To decrease the amount of time that a workbook is cached, use the maxAge parameter. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/powerpoint GET /api/api-version/sites/site-id/workbooks/workbook-id/powerpoint?maxAge=max-age-minutes #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to use as the source of the .pptx file to be downloaded.
max-age-minutes(Optional) The maximum number of minutes a workbook .pptx will be cached before being refreshed. To prevent multiple .pptx requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
#### Request Body None #### Permissions To download a `.pptx` of a workbook, Tableau Server users who are not server administrators or site administrators need Read and ExportImage permissions for the workbook. The user needs Read and ExportImage permissions for a view in a workbook in order for that view to appear in the `.pptx`. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbooks:download ``` 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 This method has no response body. The response is in the form of a downloaded `.pptx` file. The response header content will have Content-Type: `application/vnd.openxmlformats-officedocument.presentationml.presentation`. #### Version Version 3.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400101 Unknown error

There was a problem downloading or querying this workbook.

401 4001XX Unknown error

There was a problem downloading or querying this workbook.

403 4031XX Unauthorized

A non-administrator user attempted to download a .pptx file, but they don't have Read and/or ExportImage permissions for the workbook or user does not have Read permissions for the views of the workbook.

403 403105 Unauthorized

The PowerPoint export feature is disabled on the server or the server is not configured to allow PowerPoint exports using the REST API.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in the URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/powerpoint?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -o "response.pptx"` The response is a file that contains the workbook, whose data is no older than 60 minutes, saved as a `.pptx`. ## Download Workbook Revision Downloads a specific version of a workbook in `.twb` or `.twbx` format. **Note:** This method is available only if version history is enabled for the specified site. For more information, see **Security note:** Content in .twb or .twbx files downloaded using this method is stored in plain text. All data, including filter values that may give semantic clues to the data, will be readable by anyone who opens the files. [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions/revision-number/content GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions/revision-number/content?includeExtract=extract-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to download.
revision-numberThe revision number of the workbook to download. To determine what versions are available, call Get Workbook Revisions. Note that the current revision of a workbook cannot be accessed by this call; use Download Workbook instead.
extract-value(Optional) The extract-value is a Boolean value (False or True). When the workbook specified for download has an extract, if you add the parameter ?includeExtract=False, the extract is not included when you download the workbook. You can use this option to improve performance if you are downloading workbooks or data sources that have large extracts.
#### Request Body None #### Permissions Users who are site administrators can download workbook revisions on the site that they are administrators for. Users who are not server administrators or site administrators can download workbook revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified workbook. - Save (write) permissions for the project that contains the workbook. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:workbooks:download ``` 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 One of the following, depending on the format of the workbook: - The workbook's content in `.twb` format (`Content-Type: application/xml`) - The workbook's content in `.twbx` format (`Content-Type: application/octet-stream`) In both cases, the response will have the following content disposition header: `Content-Disposition: name="tableau_workbook"; filename="workbook-filename"` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403053Version history not enabledversion history is not enabled for the specified site.
403403019Read forbiddenA non-administrator user attempted to download a workbook, but the caller doesn't have required permissions.
404404024Workbook revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Enable or disable analytics extensions on server Enables or disables analytics extensions on a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:extensions\_server\_settings:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for connected apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/server/extensions/analytics [view details](#) ## Encrypt Extracts in a Site Extract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see [Extract Encryption at Rest](https://help.tableau.com/current/server/en-us/security_ear.htm). Encrypts all extracts on a site. **Note:** Depending on the number and size of extracts, this operation may consume significant server resources. Consider running this command outside of normal business hours. #### URI POST /api/api-version/sites/site-id/encrypt-extracts #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body None #### Permissions Tableau Server administrators can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extract_encryption: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 200 #### Response Body None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Generate basic insight bundle Generates a basic insight bundle. **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/basic [view details](#) ## Generate breakdown insight bundle Generates a breakdown insight bundle. This provides the BAN and breakdown groups of insights. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/breakdown [view details](#) ## Generate current metric value insight bundle Generates a bundle the current aggregated value for each metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/ban [view details](#) ## Generate detail insight bundle Generates a detail insight bundle. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. For the [usage-based licensing model](https://help.tableau.com/current/online/en-us/license_product_keys.htm#usagebased-license-model), each call to this method counts as an analytical impression. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/detail [view details](#) ## Generate exploration insight bundle Generates an exploration insight bundle. This provides the BAN, anchor, and followup groups of insights. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/exploration [view details](#) ## Generate insight brief Generates an insight brief based on a user utterance by gathering insights for the specified metrics. For supplemental information, see **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_brief:create\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/brief [view details](#) ## Generate metric card image Generates a PNG image of a Pulse metric card with full visual parity to the web UI homepage. **Version:** Available in API 3.29 (Tableau Cloud June 2026) 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) **Permissions:** Can be called by any user. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/images/metricCard [view details](#) ## Generate springboard insight bundle Generates a springboard insight bundle. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/insights/springboard [view details](#) ## Get a node by ID Get a single node by its ID, including its semantic statements and directly connected nodes. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/v1/knowledge/nodes/{node\_id} [view details](#) ## Get a Webhook Returns information about the specified webhook. #### URI GET /api/3.6/sites//webhooks/ #### Parameter Values
site-idThe ID of the site that contains the webhook.
webhook-idThe ID of the webhook.
#### 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 ## Get allowed dashboard extension on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Gets the details of a specific dashboard extension on the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} [view details](#) ## Get analytics extension details Get the details of a specified analytics extension connection to an external service. **Version:** Available in API 3.11 (Tableau Cloud March 2021/ Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics/connections/{connection\_luid} [view details](#) ## Get ask data lens - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Get the details of the specified ask data lens. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users who have Read access to the lens. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/askdata/lenses/{lens\_id} [view details](#) ## Get batch content usage statistics Gets usage statistics for multiple content items. The batch of can include multiple content types. **Version:** Available in API 3.17 ( Tableau Cloud December 2022) 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) **Permissions:** Tableau administrators can get statistics for all content they administer. Other users can get statistics for any content they own or have at least Read permissions for. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:content:read\`. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/content/usage-stats [view details](#) ## Get blocked dashboard extension on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Gets the details of a specific dashboard extension on the blocked list of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/server/extensions/dashboard/blockListItems/{block\_list\_item\_luid} [view details](#) ## Get Bridge Client Retrieves detailed information about a single Bridge client. Lookup is site-scoped. The response includes connection status, pool assignment (poolId, assignedToDefaultPool, unassigned), version, and ownership; lastStatusConnectedTime indicates when the client last connected (empty if never connected). This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-luid/bridge-clients/bridge-client-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
bridge-client-idThe unique identifier for the Bridge client to retrieve.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "bridgeClient": { "id": "12345", "name": "Bridge-Client-1", "status": "ONLINE", "version": "2024.1.0", "poolId": "abc-123-def-456", "assignedToDefaultPool": false, "unassigned": false, "lastStatusConnectedTime": "2024-10-30T10:30:00Z", "ownerName": "John Doe", "ownerEmail": "john.doe@example.com" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
404503001Bridge client not foundBridge client with the specified ID does not exist on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503002Unexpected server errorAn unexpected error occurred while retrieving the Bridge client.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Connected App Query a connected app by its ID. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 The request returns details about the connected app, including the following: - ``: Information related to the secret only if it has been previously generated. To create a secret for a connected app, see [Create Connected App Secret](#create_connectedapp_secret). To get the secret value, see [Query Connected App Secret](#get_connectedapp_secret). - ``: Name of the connected app. - ``: Whether the connected app is enabled or not. - ``: The ID of the connected app. - `:` The project that the connected app's access level is scoped to. - `:` If specified, one or more domains that the connected app is allowed to be hosted on. - ``: Whether the connected app can be hosted on all domains. If `false` is returned, the `` attribute determines the domain access. **Example response:** ``` 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b 2021-08-10T18:48:40Z ConnectedApp_MyCo true ac95d175-c844-4779-9d58-415e01fe7dab 1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-10T18:46:30Z false ``` #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_, was added in version 3.17. The original resource, GET api/_api-version_/sites/_site-id_/connected-applications/_client-id_, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## Get Connected App Secret Query a connected app secret and the token value using the connected app's ID. Secrets are tokens shared by Tableau and a custom application, and used to establish a trusted relationship. A maximum of two secrets can be associated with a connected app. These secrets do not expire and remain valid until deleted. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets/_secret-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
secret-idThe unique ID of the connected app secret.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Response Code 200 #### Response Body The request returns details about the secret associated with the connected app, including the following: - ``: The token value of the secret. - `:` The ID of the secret. **Example response:** ``` TO7/wkW+45U001IBtyNbtyIMYQ/GBM0XlRXqsgYqPlY= 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b 2021-08-10T18:48:40Z ``` #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust/_client-id_/secrets/_secret-id_, was added in version 3.17. The original resource, GET api/_api-version_/sites/_site-id_/connected-applications/_client-id_/secrets/_secret-id_, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
404404042Secret not foundThe requested secret for the connected app could not be found.
## Get content search results Searches across all supported content types for objects relevant to the search expression specified in the querystring of the request URI. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Search results will be limited to those objects that the user has permissions to access. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:content:read\`. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/search [view details](#) ## Get Content Suggestions Returns a specified number of suggestions for auto-completion of user input as they type. You can specify content types of suggestions and prioritize recently viewed content. **Version:** Available in API 3.19 ( Tableau Cloud March 2023 / Server 2023.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Suggestions will be limited to those objects that the user has permissions to access. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:content:read\`. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/suggestions [view details](#) ## Get current analytics extension for workbook Gets basic details, including connection type and name, of the analytics extension connection to an external service that the specified workbook is currently using. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users that have permissions to the specified workbook. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection [view details](#) ## Get Current Server Session Returns details of the current session of Tableau Server. #### URI GET /api/api-version/sessions/current #### Parameter Values
api-version

The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.

#### Request Body None #### Permissions This method can be called by all authenticated users. #### Response Code 200 #### Response Body ```
``` The response for users without administrator permissions contains only the site user, id, name, and content-url attributes. #### Version Version 3.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example Response ```
``` ## Get Custom Domain Name Gets the custom domain for a Tableau site, if one is provisioned. For more information about how, see **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can be called by any user that is a member of the site associated with the custom domain. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/customdomains/site/{site\_luid} [view details](#) ## Get custom domain settings Gets the custom domain settings for a Tableau site. **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Only users with administrator permissions can view a site's custom domain settings. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/customdomains/settings/site/{site\_luid} [view details](#) ## Get Custom View Gets the details of a specified custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1). _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** Tableau administrators can get the details of a custom view. Other users can get the details of any custom view that they have **Read** permissions for.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content:read - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 GET /api/api-version/sites/site-luid/customviews/custom-view-luid #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body None. #### cURL Request Example `curl -L -X GET "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/37d015c6-bc28-4c88-989c-72c0a171f7aa" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg"wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "1", "pageSize": "100", "totalAvailable": "1673" }, "customView": { "id": "37d015c6-bc28-4c88-989c-72c0a171f7aa", "name": "New name 2", "createdAt": "2016-02-03T23:35:09Z", "updatedAt": "2022-09-28T23:56:01Z", "lastAccessedAt": "2022-09-28T23:57:12Z", "shared": "false", "view": { "id": "8e33ff19-a7a4-4aa5-9dd8-a171e2b9c29f", "name": "circle" }, "workbook": { "id": "2fbe87c9-a7d8-45bf-b2b3-877a26ec9af5", "name": "marks and viz types 2" }, "owner": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "name": "workgroupuser" } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Custom View Data Returns a specified custom view rendered as data in comma separated value (CSV) format. **Version**: Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later. **License**: No additional license required. **Permissions**: Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) and Export data permissions for the underlying view (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). CSV data is provided in the response body, rather than as a download. If the request is for a dashboard, only data for the dashboard's first view is returned. If you make multiple requests for a custom view's data, subsequent calls return a cached version of the data. This means that the returned data might not include the latest changes to the custom view. To decrease the amount of time that data of a custom view is cached, use the maxAge parameter. Default age of data is 60 minutes. For Tableau Cloud, concurrent requests to endpoints that start long-running jobs, including this one, are limited to 20 at a time. A 429 HTML response means that a request exceeded the limit and should be retried at a later time. (introduced September 2021). Note the data exported is at a summary level only. Detail level data is only available as a download option in the user interface. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-id/customviews/custom-view\_luid/data GET /api/api-version/sites/site-id/customviews/custom-view\_luid/data?maxAge=max-age-minutes GET /api/api-version/sites/site-id/customviews/custom-view\_luid/data?vf\__fieldname_\>=_filter-value_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
custom-view-luidThe ID of the view to render as data.
max-age-minutes(Optional) The maximum number of minutes view data will be cached before being refreshed. To prevent multiple view data requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
fieldname=filter-value(Optional) An expression that applies a granular filter to the request. Returns will be based on the value (filtervalue) of the dimension or measure (fieldname) of your view data you specify. For more information, see View filter queries.
#### Request Body None #### cURL Request `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/customviews/2474164d-8d37-4a4c-abc7-c2070fd25fd5/data?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body The response body contains view data in CSV format no more than 60 minutes old. ``` Month of Date,Year of Date,Above Median?,Avg. Median January,1893,below median,-1.0 January,1864,below median,-0.9 January,1861,below median,-0.9 December,1862,below median,-0.9 March,1917,below median,-0.8 December,1892,below median,-0.8 February,1862,below median,-0.8 February,1911,below median,-0.8 February,1917,below median,-0.8 May,1861,below median,-0.8 November,1862,below median,-0.8 March,1898,below median,-0.8 December,1860,below median,-0.8 January,1862,below median,-0.7 March,1850,below median,-0.7 February,1893,below median,-0.7 December,1870,below median,-0.7 ``` #### Errors
HTTP status error Code Condition Details
400 400080 Bad Request The view ID in the URI doesn't correspond to a view available on the specified site.
401 401002 Unauthorized The authentication token provided in the request header was invalid or has expired.
403 403032 Read forbidden A non-administrator user attempted to get custok views, but the caller doesn't have Read or Expot imagepermission.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
405 405000 Invalid request method Request type was not GET.
429 429000 Concurrent request limit exceeded

For Tableau Cloud, the cumulative number of concurrent requests has exceeded the limit of 20. This limit applies to long-running jobs such as exports and downloads for view data, images, .pdf or .pptx files, datasources, and crosstabs, Retry this request at a later time.

Introduced September 2021.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Custom View Image Downloads an image file of the specified custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1). _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** Tableau administrators download the image of a custom view. Other users candownload the image of any custom view that they have **Publish** permissions for.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:views:download - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 GET /api/api-version/sites/site-id/customviews/view-id/image GET /api/api-version/sites/site-id/customviews/view-id/image?resolution=image-resolution GET /api/api-version/sites/site-id/customviews/view-id/image?maxAge=max-age-minutes GET /api/api-version/sites/site-id/customviews/view-id/image?vf\_=_filter-value_ Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2 and later: GET /api/api-version/sites/site-id/customviews/view-id/image?format=image-format #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
view-idThe LUID for the custom view being updated.
image-resolution(Optional) The resolution of the image. Image width and actual pixel density are determined by the display context of the image. Aspect ratio is always preserved. Set the value to high to ensure maximum pixel density.
max-age-minutes(Optional) The maximum number of minutes a view image will be cached before being refreshed. To prevent multiple image requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
filter-valueThe value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /data?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
image-format(Optional) The format of the returned image. Valid values are png (default) or svg. Available in API 3.29 and later.
#### Request Body None. #### cURL Request Example `curl -L -X GET "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/37d015c6-bc28-4c88-989c-72c0a171f7aa/image" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg"wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body None. Tableau returns a an image file as a download. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Custom View PDF Returns a specified custom view rendered as a .pdf file. **Version**: Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later. **License**: No additional license required. **Permissions**: Tableau Serverand site administrators can get custom views as PDFs. Other users can do this only if they have Read (view) and Export image permissions for the views (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). If you make multiple requests for a PDF, subsequent calls return a cached version of the file. This means that the returned PDF might not include the latest changes to the custom view. To decrease the amount of time that an PDF is cached, use the maxAge parameter. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-luid/customviews/custom-view-luid/pdf GET /api/api-version/sites/site-luid/customviews/custom-view-luid/pdf?vizHeight=viz-height&vizWidth=viz-width GET /api/api-version/sites/site-luid/customviews/custom-view-luid/pdf?maxAge=max-age-minutes GET /api/api-version/sites/site-luid/customviews/custom-view-luid/pdf?type=page-type&orientation=orientation GET /api/api-version/sites/site-luidcustomviews/custom-view-luid/pdf?vf\_fieldname\=filter-value #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The ID of the site that contains the view.
custom-view-luid The ID of the view to render as a .pdf file.
viz-height (Optional) The height of the rendered pdf image in pixels that, along with the value of vizWidth, determines its resolution and aspect ratio.
viz-width (Optional) The width of the rendered pdf image in pixels that, along with the value of vizHeight, determines its resolution and aspect ratio.
max-age-minutes (Optional) The maximum number of minutes a view PDF will be cached before being refreshed. To prevent multiple PDF requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
orientation (Optional) The orientation of the pages in the .pdf file produced. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-type

(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid.

If this parameter is not present the page type will default to Legal.

fieldname=filter-value (Optional) An expression that applies a granular filter to the request. Returns will be based on the value (filtervalue) of the dimension or measure (fieldname) of your view data you specify. For more information, see View filter queries.
#### Request Body None #### Response Code 200 #### Response Body This method has no response body. The response is in the form of a downloaded `.pdf` file. The response header content will have `Content-Type:application/pdf`. #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84dcustomviews/2474164d-8d37-4a4c-abc7-c2070fd25fd5/pdf/maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` The response is a file that contains the view, whose data is no older than 60 minutes, saved as a pdf. #### Errors
HTTP statuserror CodeConditionDetails
400400080Bad RequestThe view ID in the URI doesn't correspond to a view available on the specified site.
401401002UnauthorizedThe authentication token provided in the request header was invalid or has expired.
403403032Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Data Acceleration Report for a Site Returns a report about data acceleration for the site. It lets you compare page load times for before and after data acceleration is enabled. This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI GET /api/api-version/sites/site-id/dataAccelerationReport #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the task.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:data_acceleration_reports: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 ``` ``` #### Attribute Values
sheetURIThe URI of the sheet in the workbook.
unacceleratedSessionCountThe number of sessions that were created to load the workbook sheet before it was accelerated. For example, if you loaded it 7 times in a row, the session is reused so the count will still be 1. Generally, the more data you compare, the better the comparison is. Note: If sheets were loaded but never accelerated, they are not shown.
averageUnAcceleratedPLTThe average page load time for the sheet before it was accelerated.
acceleratedSessionCountThe number of sessions that were created to load the workbook sheet after it was accelerated.
averageAcceleratedPLTThe average page load time for the sheet after it was accelerated.
#### Version In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15) data acceleration is supported. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
40540500Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/dataAccelerationReport" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ... ``` ## Get Data Acceleration Tasks in a Site Returns a list of data acceleration tasks for the site. This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI GET /api/api-version/sites/site-id/tasks/dataAcceleration #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the task.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:data_acceleration_tasks: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 ``` ... additional tasks ... ``` #### Version In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15) data acceleration is supported. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403409087Permission deniedThe user isn't authorized to view data acceleration tasks.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
40540500Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/dataAcceleration" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Data Source Revisions Returns a list of revision information (history) for the specified data source. **Note:** This method is available only if version history is enabled for the specified site. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. To get a specific version of the data source from revision history, use the [Download Data Source Revision](#download_data_source_revision) method. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/revisions GET /api/api-version/sites/site-id/datasources/datasource-id/revisions?pageSize\=page-size&pageNumber\=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source to get revisions for.
datasource-idThe ID of the data source to get revisions for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions Tableau Server users who are site administrators can get data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ``` If the revision element includes the attribute `deleted="true"`, the data source has been deleted and cannot be downloaded using the [Download Data Source Revision](#download_data_source_revision) method. If a user has been deleted from the site, no `` element is included in the `` element. #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400006 Invalid page number The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400 400007 Invalid page size The page size parameter is not an integer, or is less than one.
403 403014 Page size limit exceeded The specified page size is larger than the maximum page size.
403 403053 Version history not enabled version history is not enabled for the specified site.
403 403054 A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the specified data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
**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 ``` ``` The **createdAt** and **updatedAt** values are dates and times in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA user queried this method who does not have the required permissions
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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:** ``` ``` ## Get Databases and Tables from Connection Query databases and tables from the connection information in the data source (.tds or .tdsx) or workbook (.tws or .twbx) file's XML. **Note:** This method can't be used to query databases and tables when the database is an embedded asset. For more information about embedded assets see one of the following:  - For Tableau Cloud, see [Embedded asset appears in External Assets](https://help.tableau.com/current/online/en-us/dm_lineage.htm#embedded-asset-appears-in-external-assets). - For Tableau Server, see [Embedded asset appears in External Assets](https://help.tableau.com/current/server/en-us/dm_lineage.htm#embedded-asset-appears-in-external-assets). #### URI POST api/_api-version_/sites/_site-id_/databaseAndTables/lookup #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` encoded_xml ``` #### Attribute Values
embedded

(Optional) Indicates whether the database is embedded or not. Use "false" if the database is not embedded and "true" if the database is embedded. For more information about embedded databases (and tables), see one of the following topics: 

datasource-name (Optional) The data source name that can be found in the XML of the data source (.tds or .tdsx) or workbook (.tws or .twbx) file.
datasource-format (Optional) The format of the data source that can be found in the XML of the data source (.tds or .tdsx) or workbook (.tws or .twbx) file.
encoded_xml

This is the encoded version of the connection element (<connection>...</connection>) in the XML of the data source (.tds or .tdsx) or workbook (.tws or .twbx) file.

  • Before you begin, make a copy of the data source or workbook file to ensure you have a backup.
  • To encode the connection element, you can use a free online base64 encoding tool or write a simple script. Note: Make sure there are no extra spaces between the connection element's start and end tags. For example, after encoding the connection element, the generated encoding should look like <base64xml>...</base64xml>. If the generated encoding looks like <base64xml> ... </base64xml>, you might see an invalid parameter (409097) error.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query databases and tables from the connection: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Response Code 200 #### Response Body **Example response** ``` ``` **Note:** Both `databaseAnchor` and `tableAnchor` IDs returned from this request correspond to `database` and `table` IDs that you can use to retrieve additional information about databases and tables endpoints using other REST endpoints, including [Query Database](#query_database) and [Query Table](#query_table). #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
409409095Generic asset retrieval errorThe database and table information could not be queried for some reason other than those specified in this table.
409409096Unauthorized operationInsufficient permissions to perform the operation.
409409097Invalid parameterOne or more values in the request body are invalid.
## Get details of a collection Gets the details of a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:read. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/collections/{luid} [view details](#) ## Get Domain Mapping Retrieves information about all domain mappings for the site, including pool assignment and status (ALLOWED or BLOCKED). When status is ALLOWED, poolId is the pool UUID; when BLOCKED, poolId is the string "BLOCKED". URL-encode special characters in domain names in the request. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-luid/bridge-domain-maps #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "bridgeDomain": { "domain": [ { "name": "abc.test.com", "status": "BLOCKED", "poolId": "BLOCKED" }, { "name": "*.myco.lan", "status": "ALLOWED", "poolId": "185da21c-1598-4b2f-9137-fa632e935bf1" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503908Unexpected server errorAn unexpected error occurred while retrieving the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Embedding Settings for a Site Returns the current embedding settings for a specific site. Embedding settings can be used to restrict embedding Tableau views to only certain domains. This setting impacts all embedding scenarios including, Tableau Javascript API v2, Embedding API v3, and the embed code from the share dialog. For more information, see the [Tableau Site Settings for Embedding](https://help.tableau.com/current/api/embedding_api/en-us/docs/embedding_api_site.html) topic in the Tableau Embedding v3 Help. Beginning in version 2023.2 (June 2023) for Tableau Cloud and in version 2023.3 for Tableau Server, this setting might impact embedding scenarios that use Tableau connected apps. For more information, see the “[Control where content can be embedded](https://help.tableau.com/current/online/en-us/connected_apps_eas.htm#allowlist)” section in the connected apps topic in the Tableau Cloud Help. #### URI GET /api/api-version/sites/site-id/settings/embedding #### Path Parameter Values  
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the views.
#### Request Body None #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:embedding_site_settings: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 #### Permissions Any Tableau Cloud or Tableau Server user can call this method. #### Response Body ``` ``` ##### Example Response ```
``` #### Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/settings/embedding" -X GET -H "X-Tableau-Auth:1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d"` #### Version API version 3.16 and later. #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get enabled state of analytics extensions on server Gets the enabled/disabled state of analytics extensions on a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:extensions\_server\_settings:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for connected apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/server/extensions/analytics [view details](#) ## Get enabled state of analytics extensions on site Gets the enabled/disabled state of analytics extensions on a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics [view details](#) ## Get Extract Refresh Task Returns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection. #### URI GET /api/api-version/sites/site-id/tasks/extractRefreshes/task-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the extract refresh that you want information about.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). `tableau:tasks:read` (this scope is included in the scope: `tableau:tasks`) 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 #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of extract refresh tasks that they own. #### Response Code 200 #### Response Body Tableau Server and Tableau Cloud return different payloads in response to this request. Output for virtual connections includes `transactionLevel` and table ids in addition to the output that's standard for data sources and workbooks. ### Tableau Server Response For Tableau Server an extract refresh task with a server schedule is returned. ``` ``` ``` [ { "extractRefresh": { "id": "refresh_task_id", "priority": "nn", "consecutiveFailedCount": "n", "type": "REFRESH_EXTRACT", "schedule": { "id": "schedule_id", "name": "schedule_name", "state": "state", "priority": "nn", "createdAt": "DATE_TIME", "updatedAt": "DATE_TIME", "type": "Extract", "frequency": "frequency", "nextRunAt": "DATE_TIME" }, "datasource": { "id": "datasource_id" } } }, [] ] ``` ### Tableau Cloud Response For Tableau Cloud an extract refresh task with its frequency is returned. ``` ``` ``` { "task": { "extractRefresh": { "id": "0ece2369-c4eb-4382-be0f-961039d708a0", "priority": "50", "consecutiveFailedCount": "5", "type": "RefreshExtractTask", "schedule": { "frequency": "Weekly", "nextRunAt": "2023-06-08T04:50:00Z", "frequencyDetails": { "start": "21:50:00", "intervals": { "interval": [ { "weekDay": "Thursday" } ] } } }, "workbook": { "id": "7e766949-7166-4b3d-90ba-784f7575743b" } } } } ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403403004Operation unauthorizedThe user is not authorized to get the task.
404404026Task not foundThe task ID in the URI doesn't correspond to an existing task.
405405000Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Favorites for User Returns a list of favorite projects, data sources, views, workbooks, and flows for a user. #### URI GET /api/api-version/sites/site-id/favorites/user-id GET /api/api-version/sites/site-id/favorites/user-id?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
user-idThe ID of the user for which you want to get a list favorites.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they are the user for which they want to get a list of favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ``` The value of view-url-name is the name of the view in its URL. For example, if a view named `View 1` shows the URL `https://MY_SERVER/#/site/MY_SITE/views/VIEW_1` in your browser address bar, then the view-url-name would be `VIEW_1`. Modifying the name (display name) of a view will not impact the view-url-name (path element of the view's URL). #### Response when favorite items have been deleted In the case where an item selected as a favorite has been deleted the response body will contain only the label of the favorite. ``` ``` #### Version Version 2.5 and later. Support for favorite projects added in version 3.1. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403403004Forbidden Favorites accessA non-administrator user called this method but doesn't have permission to view the specified user's favorites.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/favorites/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Flow Run Gets a flow run. #### URI GET /api/api-version/sites/site-id/flows/runs/flow-run-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-run-idThe ID of the flow run.
#### Request Body None #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_runs: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 ``` ``` The status attribute can be: Pending, InProgress, Success, Cancelled, or Failed. #### Version Version 3.10 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Get forbiddenUser does not have permissions to get the flow run. A user can view a flow run if they have permission to view the flow.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404036Flow run not foundThe flow run ID in the URI doesn't correspond to an existing flow run.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Flow Run Task Returns information about the specified flow run task. This method shows you information about the scheduled task for the flow. #### URI GET /api/api-version/sites/site-id/tasks/runFlow/task-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the scheduled flow run task that you want information about.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of scheduled flow run tasks that they own. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_tasks: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 ``` ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Operation unauthorizedThe user is not authorized to get the task.
404404026Task not foundThe task ID in the URI doesn't correspond to an existing task.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/runFlow/1bff10bb-57ae-43df-8774-a86d14aef432" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ## Get Flow Run Tasks Returns a list of scheduled flow tasks for the site. #### URI GET /api/api-version/sites/site-id/tasks/runFlow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of scheduled flow tasks for the flows that they own. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_tasks: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 ``` ... additional tasks ... ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/runFlow" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Flow Runs Get flow runs. #### URI GET /api/api-version/sites/site-id/flows/runs GET /api/api-version/sites/site-id/flows/runs?filter=filter-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
filter-expression(Optional) An expression that lets you specify a subset to return. You can filter on predefined fields such as the userId of the user who started the flow run, flowId, progress, startedAt, and completedAt. You can include multiple filter expressions. For more information, see Filtering and Sorting.
#### Request Body None #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_runs: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 ``` ... additional flow runs.... ``` The status attribute can be: Pending, InProgress, Success, Cancelled, or Failed. #### Version Version 3.10 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Get forbiddenUser does not have permissions to get the flow run.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the filter doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get graph-health suggestions Get a report on the health of the graph, including a score and suggested improvements. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/suggestions/search [view details](#) ## Get Group Set Returns information about the specified group set including ID, name, and member groups. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI GET /api/api-version/sites/site-id/groupsets/group-set-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-set-idThe ID of the group set you want information for.
#### Request Body None #### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets/8cf3b6c1-839f-4eae-b41f-2144165193f2" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body Copy ```                      ``` Copy ``` {  "groupSet": {    "id": "8cf3b6c1-839f-4eae-b41f-2144165193f2",    "name": "All Users",    "groupCount": "2",    "group": [      {        "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d",        "name": "All Users"      },      {        "id": "4123e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6234",        "name": "Researchers"      }    ]  }} ``` #### Version Version 3.22 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodThe request type wasn’t GET.
409409120Group set not foundThe group set ID in the request body doesn't correspond to an existing group set.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Groups for a User Gets a list of groups of which the specified user is a member. #### URI GET /api/api-version/sites/site-id/users/user-id/groups GET /api/api-version/sites/site-id/users/user-id/groups?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
user-idThe ID of the user whose group memberships are listed.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 ``` ``` **Notes:** - Starting in July 2026 (version 3.29), the externalUserEnabled attribute (Tableau Cloud only) is omitted from the element in the response if the site isn't licensed for on-demand access. #### Version Version 3.7 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012User not foundThe group ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/groups" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Identity Pool Get information about an identity pool. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/authn-service/identity-pools/{uuid} [view details](#) ## Get Label Gets a data label by its LUID. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI GET api/api-version/sites/site-luid/labels/label-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-luidThe unique LUID of the label asset.
#### Request Body None #### Permissions To view a data label, you must have read permissions on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 ``` ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401400103Generic query label errorAn unknown error occurred.
403403004Operation on resource unauthorizedInsufficient permissions to perform the operation.
404404030Label not foundThe label LUID doesn't correspond to an existing project.
409409004Invalid parameterOne or more values in the request body are invalid.
## Get Labels Displays information about the data labels on one or more assets. You can optionally limit the data labels to show by category using a query string. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI POST api/api-version/sites/site-luid/labels POST api/api-version/sites/site-luid/labels?categories=category-list #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
category-list(Optional) A comma-separated list of label value categories used to limit the labels shown to only the listed categories. See Data Labels in the REST API for information on label values and categories.
#### Request Body ``` ``` #### Attribute Values
asset-type

The type of asset. Valid asset types are:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
asset-luid The asset LUID.
#### Permissions To view a data label, you must have read permissions on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 ``` ` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Permissions issueThe user does not have permissions to read the specified metric.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Metric not foundThe metric ID in the URI doesn't correspond to an existing metric.
#### Example `curl "http://MY-SERVER/api/3.9/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/metrics/6561daa3-20e8-407f-ba09-709b178c0b4a" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Response Body** ` ` ## Get Metric Data - Retired in API 3.22 **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. Returns the data for the specified metric as comma separated (CSV) format. The maximum number of rows returned is 10,000. #### URI GET /api/api-version/sites/site-luid/metrics/metric-luid/data #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source to get revisions for.
metric-luidThe LUID of the metric whose data should be returned.
#### Request Body None #### Permissions Tableau administrators, and non-administrator and users with Read capability for a metric, will be able to get its data. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:metrics:download ``` 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 ``` your_timestamp_column_name,your_measure_column_nametimestamp_1,measure_1timestamp_2,measure_1 ``` #### Version Introduced Tableau Cloud June 2022 (API 3.16). Not currently available for Tableau Server. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
40040000Bad requestThe LUID of the site or metric was malformed.
40140100Not authorizedThe authentication token provided in the request header was invalid or has expired.
403403054Not authorizedA non-administrator user attempted to get metric data, but does not have sufficient permissions.
404404000Site not foundThe site LUIID in the URI doesn't correspond to an existing site.
404Metric not foundThe metric LUID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not GET.
429405000Too many requestsThe concurrent request limit for the site was exceeded. Retry after a pause.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example Request command line: `curl "http://MY-SERVER/api/3.16/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/metrics/2474164d-8d37-4a4c-abc7-c2070fd25fd5/data" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` Response: ``` Timestamp,Measure 2021-12-31:11:59:57-0800,3 2021-12-31:11:59:58-0800,2 2021-12-31:11:59:59-0800,1 ``` ## Get metric definition Gets a metric definition and optionally metrics it contains. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/definitions/{definition\_id} [view details](#) ## Get Mobile Security Settings for Server Gets the mobile security settings for the server. **Version:** Available in API 3.19 (Tableau Cloud December 2022 / Server 2023.1) 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:** Only Tableau server and site administrators can get mobile security settings for the server.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:mobile\_security\_site\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/settings/mobilesecuritysettings #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### cURL Request Example `curl -L -X GET "https://qa-server.tsi.lan/api/3.18/settings/mobilesecuritysettings" -H "Accept: application/json" -H "X-Tableau-Auth: ejET2rVmS2e81XiZ9G4lzQ|Iz71DR2lu3r0zHpcOAH2OoRQZlPfxACC|a905dbfd-6550-4546-908b-3e055fcc026d" --data-raw ""` #### Response Code 200 #### Response Body Copy ```                                         true                                        false                                                        14                                        14                                                        true                         ``` Copy ``` {    "mobileSecuritySettingsList": {        "mobileSecuritySettings": [            {                "name": "mobile.security.jailbroken_device",                "enabled": true,                "iosConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                },                "androidConfig": {                    "valueList": [                        "false"                    ],                    "enabled": true,                    "severity": "critical"                }            },            {                "name": "mobile.security.max_offline",                "enabled": true                "iosConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },                "androidConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },            },            {                "name": "mobile.security.screenshot",                "enabled": false,                "androidConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                }            }        ]    }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe request is incomplete is malformed.
400400174Mobile security settings errorAn uknown mobile security settings error has occurred.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user does not have the required administrtor permissions.
403403157ForbiddenMobile security settings are not enabled on the server.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Mobile Security Settings for Site Gets the mobile security settings for the specified site. **Version:** Available in API 3.18 (Tableau Cloud December 2022) 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:** Only Tableauserver and site administrators can get mobile security settings.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:mobile\_security\_site\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-luid/settings/mobilesecuritysettings #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### 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 ```                                         true                                        false                                                        14                                        14                                                        true                         ``` Copy ``` {    "mobileSecuritySettingsList": {        "mobileSecuritySettings": [            {                "name": "mobile.security.jailbroken_device",                "enabled": true,                "iosConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                },                "androidConfig": {                    "valueList": [                        "false"                    ],                    "enabled": true,                    "severity": "critical"                }            },            {                "name": "mobile.security.max_offline",                "enabled": true                "iosConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },                "androidConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },            },            {                "name": "mobile.security.screenshot",                "enabled": false,                "androidConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                }            }        ]    }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe request is incomplete is malformed.
400400174Mobile security settings errorAn uknown mobile security settings error has occurred.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user does not have the required administrtor permissions.
403403157ForbiddenMobile security settings are not enabled on the server.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get OpenID Connect Configuration Get details about the Tableau Cloud site's OpenID Connect (OIDC) configuration. **Version:** Available in API 3.22 (Tableau Cloud February 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI GET /api/api-version/sites/site-luid/site-oidc-configuration?idpConfigurationId=idp-configuration-id **Note:** The resource, GET /api/api-version/sites/site-luid/site-oidc-configuration?idpConfigurationId=idpConfigurationId, was added in version 3.24. The original resource, PUT /api/api-version/sites/site-luid/site-oidc-configuration, continues to be a supported resource if your site is configured with only one OIDC authentication configuration. If you don’t specify an `idpConfigurationId` value starting in API 3.24, the initial OIDC configuration on the site is removed. If there is no initial OIDC configuration on the site, then no OIDC configuration is removed. #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
idp-configuration-idThe ID of the configuration. To get the idpConfigurationId value, use the List Authentication Configurations for Site method.
#### Request Body None #### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/site-oidc-configuration?idpConfigurationId=00000000-0000-0000-0000-0000000000" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body Copy ```   "    authorizationEndpoint="https://myidp.com/oauth2/v1/authorize"    tokenEndpoint="https://myidp.com/oauth2/v1/token"    userinfoEndpoint="https://myidp.com/oauth2/v1/userinfo"    jwksUri="https://myidp.com/oauth2/v1/keys"    idpConfigurationName="Initial OIDC"    endSessionEndpoint="https://myidp.com/oauth2/v1/logout"    customScope="openid, email, profile"    prompt="login,consent"    clientAuthentication="client_secret_basic"    essentialAcrValues="phr"    emailMapping="email"    firstNameMapping="given_name"    lastNameMapping="family_name"    fullNameMapping="name"    useFullName="false"    idpConfigurationId="00000000-0000-0000-0000-000000000000" /> ``` Copy ``` { "siteOIDCConfiguration": {    "enabled":"true",    "testLoginUrl":"https://sso.online.tableau.com/public/testLogin?alias=080bca2d-578b-49cc-b40d-3781b36b30ee&authSetting=OIDC",    "allowEmbeddedAuthentication":"false",    "clientId":"0oa111usf1gpUkVUt0h1",    "clientSecret":"<omit>",    "authorizationEndpoint":"https://myidp.com/oauth2/v1/authorize",    "tokenEndpoint":"https://myidp.com/oauth2/v1/token",    "userinfoEndpoint":"https://myidp.com/oauth2/v1/userinfo",    "jwksUri":"https://myidp.com/oauth2/v1/keys",    "idpConfigurationName":"Initial OIDC"    "endSessionEndpoint":"https://myidp.com/oauth2/v1/logout",    "customScope":"openid, email, profile",    "prompt":"login,consent",    "clientAuthentication":"client_secret_basic",    "essentialAcrValues":"phr",    "emailMapping":"email",    "firstNameMapping":"given_name",    "lastNameMapping":"family_name",    "fullNameMapping":"name",    "useFullName":"false",    "idpConfigurationId":"00000000-0000-0000-0000-000000000000"    }} ``` **Notes:** - The response hides the client secret and replaces it with `<omit>`. - You can use the `testloginURL` to validate the OIDC configuration. When you enter the URL in a browser, details about the configuration displays. - You can use the `idpConfigurationId` to assign the authentication method to a user using the [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get or create metric Returns the details of a metric in a definition if it exists, or creates a new metric if it does not. Also returns 'true' if a new metric was created, or 'false' if it already existed. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:create\` Access Scopes Overview: [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/pulse/metrics:getOrCreate [view details](#) ## Get Pulse subscription Gets a specified subscription to a metric. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can get the details of a subscription. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:metric\_subscriptions:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/subscriptions/{id} [view details](#) ## Get Recently Viewed for Site Gets the details of the views and workbooks on a site that have been most recently created, updated, or accessed by the signed in user. The 24 most recently viewed items are returned, though it may take some minutes after being viewed for an item to appear in the results. #### URI GET /api/api-version/sites/site-id/content/recent #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the views and workbooks.
#### Request Body None #### Permissions Users who are not server administrators or site administrators, the method returns only the views and workbooks that the user owns or has **Read** permissions for (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` ``` The value of view-url-name is the name of the view in its URL. For example, if a view named `View 1` shows the URL `https://MY_SERVER/#/site/MY_SITE/views/VIEW_1` in your browser address bar, then the the view-url-name would be `VIEW_1`. Modifying the name (display name) of a view will not impact the view-url-name (path element of the view's URL). #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl -X GET "https://qa-windows/api/3.5/sites/cd24a433-b66c-46cd-a4af-6cde73db9ee1/content/recent" -H "X-Tableau-Auth: pI8NzKb-S5-Jqiatds8jrQ|GKUYlgHjuHSPSVfS38plFpH31UkHGtNl"` **Example response:** ``` ``` #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400409109Invalid requestInvalid notification type.
400409100Invalid requestInvalid channel.
403403004Invalid permissionsInvalid permission to update site user notification settings.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodThe request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example **Example response:** ``` ``` ## Get User Personal Space Gets the details of the Personal Space for the currently authenticated user. Personal Space must be enabled for the site in order to be returned by this method. For more information see, [Create and Edit Private Content in Personal Space](https://help.tableau.com/current/pro/desktop/en-us/personal_space.htm) **Version**: Available in API 3.13 and later. **License**: No additional license required. **Permissions**: Only the user that owns a Personal Space can get its details. **Access scope**:`tableau:projects:read` - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/personalSpace #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
#### Request Body none #### cURL Example `curl "http://MY-SERVER/api/3.29/sites/7bfb590b-cfa7-4576-8bea-e9cc035/personalSpace -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body ``` ``` ``` { "personalSpace": { "luid": "b76c9984-c7a8-4ae4-826d-e08372ad7d61", "ownerLuid": "39e76bc4-737f-40c0-bca7-e635fe0e9fd9", "readOnly": false } } ``` `readOnly` is `true` only if Personal Space is disabled in site settings or the user's role for the site does not allow writing to a Personal Space. #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Users in Group Gets a list of users in the specified group. #### URI GET /api/api-version/sites/site-id/groups/group-id/users GET /api/api-version/sites/site-id/groups/group-id/users?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-idThe ID of the group to get the users for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 ``` ... additional user information ... ``` The siteRole value is returned as one of the following values: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, ReadOnly, or Viewer. The externalAuthUserId value is returned for Tableau Cloud; it represents ID stored in Tableau's single sign-on (SSO) system. For other server configurations, this field contains null, and the value of lastLogin is an empty string. #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Users on Site Returns the users associated with the specified site. #### URI GET /api/api-version/sites/site-id/users GET /api/api-version/sites/site-id/users?filter=filter-expression GET /api/api-version/sites/site-id/users?sort=sort-expression GET /api/api-version/sites/site-id/users?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/users?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the users.
filter-expression(Optional) An expression that lets you specify a subset of users to return. You can filter on predefined fields such as name and lastLogin. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the views or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the REST API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand **`&`**. #### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 ``` ``` **Notes:** - The siteRole value is returned as one of the following values: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, ReadOnly, or Viewer. - The externalAuthUserId value is returned for Tableau Cloud only; it represents ID stored in Tableau's single sign-on (SSO) system. For other server configurations, this field contains null, and the value of lastLogin is an empty string. - The authSetting attribute is only returned if you are using Tableau Server with site-specific SAML enabled, or Tableau Cloud with either SAML or OpenID Connect enabled. - Starting in API 3.24, **idpConfigurationId** indicates the authentication method assigned to the user in Tableau Cloud only. - When Tableau Cloud returns domain name, it indicates the authentication type of the user. When Tableau Server returns domain name, it indicates the domain of the user. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ... more users ... ``` `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users?filter=siteRole:eq:Unlicensed&sort=name:asc" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` This example includes a filter to return the users whose site role is Unlicensed and specifies that the results should be sorted by the name value. ## Get View Gets the details of a specific view. **Version**: Available in API 3.0 and later. **License**: No additional license required. **Permissions**: For users who are not server administrators or site administrators, the method returns only the views that the user owns or has **Read** permissions for (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/views/view-id?includeUsageStatistics=get-usage-information #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
view-idThe ID of the view whose details are requested.
(Optional) get-usage-informationtrue to return usage statistics. The default is false.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "view": { "id": "view-id", "name": "view-name", "contentUrl": "path-to-view", "createdAt": "created-date", "updatedAt": "updated-date", "viewUrlName": "view-url-name", "workbook": { "id": "workbook-id" }, "owner": { "id": "owner-id" }, "project": { "id": "project-id" }, "tags": [] } } ``` #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Resource not foundThe view ID in the URI doesn't correspond to an existing view.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6ds" -X GET -H "X-Tableau-Auth:RDEj_zqgQtGGcCiD3BXnSA|abXWv8thv5ocrXLNU7axCicQu3UdfgeX" ``` **Example response:** ``` ``` ## Get View by Path Gets the details of all views in a site with a specified name. **Version**: Available in API 3.6 and later. **License**: No additional license required. **Permissions**: For users who are not server administrators or site administrators, the method returns only the views that the user owns or has **Read** permissions for (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/views?filter=viewUrlName:eq:view-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
view-nameThe name of the view as it appears in the URL to the view. For https://MY_SERVER/#/MY_SITE/views/workbook-name/Sheet1?:iid=1, the name would be Sheet1.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "view": { "id": "view-id", "name": "view-name", "contentUrl": "path-to-view", "createdAt": "created-date", "updatedAt": "updated-date", "viewUrlName": "view-name", "workbook": { "id": "workbook-id" }, "owner": { "id": "owner-id" }, "project": { "id": "product-id" }, "tags": [] } } ``` The value of view-url-name is the name of the view in its URL. For example, if a view named `View 1` shows the URL `https://MY_SERVER/#/site/MY_SITE/views/VIEW_1` in your browser address bar, then the view-url-name would be `VIEW_1`. Modifying the name (display name) of a view will not impact the view-url-name (path element of the view's URL). #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Resource not foundThe view ID in the URI doesn't correspond to an existing view.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views?filter=viewUrlName:eq:Sheet1" -X GET -H "X-Tableau-Auth:RDEj_zqgQtGGcCiD3BXnSA|abXWv8thv5ocrXLNU7axCicQu3UdfgeX" ``` **Example response:** ``` viewUrlName="Sheet1" > ``` ## Get Workbook Returns information about the specified workbook, including information about views and tags. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version:** Available in API 2.0 and later. Data acceleration and data freshness policy setting update are added in API 3.22 (Tableau Cloud February 2024 / Server 2024.2)._[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** You can get workbok details if you are a user with implicit or explicit Read permissions for the workbook, or are a Tableau Administrator.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content: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). #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id GET /api/api-version/sites/site-id/workbooks/content-url?key=contentUrl #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the workbook.
content-url

The permanent name of the site to sign in to. The content URL appears in the URL path of Tableau content in your browser address bar after the Tableau Server URL.

mySite is the content URL in the following example:

http://<server or cloud URL>/#/site/mySite/explore

#### Request Body None #### Response Code 200 #### cURL Request Example `curl -L -X GET "http://qa-near/api/3.17/sites/a946d998-2ead-4894-bb50-1054a91dcab3/workbooks/simple-highlight?key=contentUrl" -H "X-Tableau-Auth:HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Body Copy ```                                                                                                                                                                                  ``` Copy ``` {  "workbook": {    "id": "0828bd63-dea5-454f-8f54-30f9a92760ff",    "name": "WB_Election_live",    "description": "",    "contentUrl": "WB_Election_live",    "webpageUrl": "http://MyServer/#/workbooks/4",    "showTabs": "false",    "size": "1",    "createdAt": "2024-01-25T23:42:57Z",    "updatedAt": "2024-01-25T23:42:57Z",    "encryptExtracts": "false",    "defaultViewId": "10f6d099-fe90-41a1-a77b-1512b818d23c",    "project": {      "id": "7eb51f54-bbca-11ee-9262-638afb01250c",      "name": "Default"    },    "location": {      "id": "7eb51f54-bbca-11ee-9262-638afb01250c",      "type": "Project",      "name": "Default"    },    "owner": {      "id": "09d032b6-d17d-444c-afbe-d71c22f7ee31",      "name": "test"    },    "tags": [],    "views": {      "view": {        "id": "fcc36499-fd2d-42af-8e2c-29d1c7893edd",        "name": "Votes",        "contentUrl": "WB_Election_live/sheets/Votes",        "createdAt": "2024-01-25T23:42:57Z",        "updatedAt": "2024-01-25T23:42:57Z",        "viewUrlName": "Votes",        "tags": [],        "dataAccelerationConfig": {          "accelerationEnabled": "true",          "accelerationStatus": "Pending"        }      }    },    "dataFreshnessPolicy": {      "option": "FreshAt",      "freshAtSchedule": {        "time": "08:15:00",        "frequency": "Week",        "timezone": "America/Los_Angeles",        "intervals": {          "interval": {            "weekDay": "MONDAY"          }        }      }    }  }} ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Errors
HTTP statuserror CodeConditionDetails
403403018Read forbiddenA non-administrator user attempted to query the workbook, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook LUID or contentUrl in the URI doesn't correspond to an existing workbook, or the querystring ?key=contentUrl is not capitalized correctly.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Workbook Downgrade Info Returns a list of the features that would be impacted, and the severity of the impact, when a workbook is exported as a downgraded version (for instance, exporting a v2019.3 workbook to a v10.5 version). #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/downGradeInfo?productVersion=downgrade-target-version #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook that downgrade info is being shown for.
workbook-idThe ID of the workbook being downgraded.
downgrade-target-versionThe Tableau release version number the workbook is being downgraded to.
#### Request Body None #### Permissions Tableau Server users who are site administrators can get downgrade information for workbooks on the site that they are administrators for. Users who are not server administrators or site administrators can get downgrade information for workbooks they have permissions to. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbook_downgrade_info: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 ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400114Unknown downgrade errorThe workbook cannot be exported to a downgraded version due to an unknown error.
400400115Invalid downgrade versionThe downgrade version specified is not a valid Tableau version number.
400400116Downgrade version not supportedThe downgrade version specified refers to a Tableau version that is not supported.
40340310Access to downgrade info deniedThe caller does not have permissions required to access download info for this workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Workbook Revisions Returns a list of revision information (history) for the specified workbook. **Note:** This method is available only if version history is enabled for the specified site. To get a specific version of the workbook from revision history, use the [Download Workbook Revision](#download_workbook_revision) method. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions?pageSize\=page-size&pageNumber\=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook to get revisions for.
workbook-idThe ID of the workbook to get revisions for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions Tableau Server users who are site administrators can get workbook revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get workbook revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified workbook. - Save (write) permissions for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ``` If the revision element includes the attribute `isDeleted="true"`, the workbook has been deleted and cannot be downloaded using the [Download Workbook Revision](#download_workbook_revision) method. If a user has been deleted from the site, no `` element is included in the `` element. #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400006 Invalid page number The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400 400007 Invalid page size The page size parameter is not an integer, or is less than one.
403 403014 Page size limit exceeded The specified page size is larger than the maximum page size.
403 403053 Version history not enabled version history is not enabled for the specified site.
403 403056 A non-administrator user attempted to get workbook revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in the URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Gets recommended metrics Gets personalized groups of metrics to recommend to a user. Only metric that the user has privileges to view will be returned. **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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) **Permissions:** Any user can get a batch of metrics as long as the user has read or connect access to the data source used in the definition that contains them. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_metrics:read\` Access Scopes Overview: [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/metrics:recommended [view details](#) ## Hide a Recommendation for a View - Deprecated in API 3.19 Hides a view from being recommended by the server by adding it to a list of views that are dismissed for a user. > [!WARNING] > > Starting in API version 3.19 (Tableau Server 2023.1 / Cloud March 2023), this method is deprecated, will no longer be supported, and may be retired in future releases. If hidden, a view will not be displayed on the server Home or Recommendation pages. #### URI PUT /api/api-version/sites/site-id/recommendations/dismissals #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
#### Request Body ``` ``` #### Request Parameters
view-luidThe LUID of the view to be added to the list of views hidden from recommendation for a user.
#### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:recommendation_dismissals: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 None #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe content ID in the URI doesn't correspond to an existing content of the requested type.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/dismissals -X PUT \ -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" \ -d "@hide-view.xml" ``` **Content of** hide-view.xml ``` ``` **Example response:** No response body. Response code is `204`. ## Import ask data lens - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Import an existing ask data lens on a server to a site, and optionally transform the metadata of the lens in the process. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by server administrators or site administrators. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:create\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/askdata/lenses/import [view details](#) ## Import Users to Site from CSV Creates a job to import the users listed in a specified .csv file to a site, and assign their roles and authorization settings. The .csv file should comply with the rules described in one of the following topics: - For Tableau Cloud - [CSV Import File Guidelines](https://help.tableau.com/current/online/en-us/csvguidelines.htm) - For Tableau Server - [CSV Import File Guidelines](https://help.tableau.com/current/server/en-us/csvguidelines.htm) #### URI POST api/_api-version_/sites/_site-id_/users/import #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body Because this method involves a file that is external to Tableau a multi-part request is required. For more information on multi-part requests, See [Importing CSV files with Multipart Requests](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm#multipart_requests). ``` --boundary-string Content-Disposition: name="tableau_user_import" Content-Type: file path_to_csv --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` A `request-payload` without user name or authSetting is valid, but must be present in the request in the form: ``. #### Attribute Values
path-to-csv The file path to the .csv list users to be imported.
user-name

(Optional) The name of the user. If the server uses local authentication, this can be any name. If you are using Active Directory authentication, or if you are using Tableau Cloud, there are specific requirements for the name.

Tableau Server
If Tableau Server uses Active Directory authentication, this must be the name of an existing user in Active Directory. If the user name is not unique across domains, you must include the domain as part of the user name (for example, example\Adam or adam@example.com).

Note: Active Directory specifies a user name using two attributes: sAMAccountName and userPrincipalName (UPN) prefix. For most Active Directory users, these attributes are the same. By default, if you are adding a user from Active Directory, the name that you provide in the user-name is matched against the Active Directory sAMAccountName attribute, which becomes the name that the user signs in to Tableau Server with.

Two exceptions are when the name that you provide: is longer than 20 characters; and includes an @ character. In these cases, Tableau imports the user using the Active Directory UPN. For more information, see User Naming Attributes on the MSDN site.

Tableau Cloud
The user-name is the email address that the user will use to sign in to Tableau Cloud. When you add a user to the site, Tableau Cloud sends an email invitation. The user can click the link in the invitation to sign in and update their full name and password.

auth-setting

Tableau Server

The authSetting attribute only applies when updating users on sites with site-specific SAML-enabled settings.

Tableau Cloud

The ability to create and enable multiple authentication methods simultaneously was introduced in API 3.25 (January 2025). As a result of this capability, consider the following:

  • For Tableau with MFA (or Tableau) authentication: To assign Tableau with MFA authentication (or Tableau authentication if still available for your site), you can use the authSetting or idpConfigurationId attribute, but not both.

  • For SAML and OIDC-based authentication:

    • For new configurations: To assign SAML or OIDC-based authentication, whose configurations were created during or after January 2025, you must use the idpConfigurationId attribute for assigning user authentication. Skip to idp-configuration-id.

    • For existing configurations: To assign SAML and OIDC-based authentication, whose configurations that Tableau has automatically prefixed with "Initial" (such as "Initial SAML," "Initial Google," "Initial OIDC," or "Initial Salesforce"), you can continue to use the authSetting attribute for assigning user authentication. Alternatively, you can use the idpConfigurationId attribute for assigning user authentication. Do not use both.

  • Notes:

You can assign the following values for the authSetting attribute:

  • SAML - The user signs in using the identity provider (IdP) configured for the site. For Tableau Cloud configuration, see Enable SAML Authentication on a Site. For Tableau Server, see Configure Site-Specific SAML.
  • OpenID - Tableau Cloud only: The user signs in using Google, Salesforce or OpenID Connect provider credentials. OpenID corresponds to Google, Salesforce, or OIDC authentication configuration in Tableau Cloud authentication settings.
  • TableauIDWithMFA - Tableau Cloud only: The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see About multi-factor authentication and Tableau Cloud.
  • ServerDefault - The user signs in using the default authentication method that's set for the server. For Tableau Cloud, if Tableau hasn't updated your site to require Tableau with MFA yet, you can continue to use this authentication type on a temporary basis. The ServerDefault value corresponds to TableauID in authentication settings. For Tableau Server, the SAML Server help page describes default authentication options.

Assigning user auth settings with this method

The request payload enables you to set auth settings for individual users, or all users in the .csv file. To prevent the payload from having any impact on auth settings, omit the name and authSetting attributes of the user object:
<tsrequest><user /></tsrequest>.

To set the default auth settings for all users being imported, omit the name attribute and specify the authSetting attribute of the user object:
<tsRequest><user authSetting="OpenID"/><tsRequest>

If the auth setting for a user is defined in both the imported .csv and in a request payload, the setting in the .csv will take precedence.

If no auth setting is defined for a user in either the .csv and the request payload, then the default setting of the site is assigned.

idp-configuration-id

(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).

To find the idpConfigurationId attribute value, use the List Authentication Configurations for Site method.

Notes:

  • In cases where both attributes are supported, you can use the idpConfigurationId attribute or the authSetting attribute, but not both.
  • If neither idpConfigurationId nor authSetting attribute is specified, then TableauIdWithMFA (or in some cases ServerDefault if that option is still available for your site) is the authentication assigned to the user.
isVerbose Tableau Cloud only When set to false, this method only returns the top three errors in a batch of users. When set to true, the method displays a full list of errors during CSV upload.

Available in REST API 3.22 (Tableau Cloud February 2024)

#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:users: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 #### Version REST API version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request payload is missing or incomplete, or contains malformed XML.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ``` curl -X POST \ http://10.108.21.238//api/3.15/sites/8aa3291f-1b5a-4f52-a3be-6512661f574d/users/import \ -H 'cache-control: no-cache' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -H 'x-tableau-auth: AVjAKZb3SQimzoqyMmQXEg|9OSHQrwCXF83SIR2XCuDEK91AM7v3FZr' \ -F tableau_user_import=@users.csv \ -F 'request_payload=' ``` #### Response ``` ``` ## Initiate File Upload Initiates the upload process for a file. After the upload has been initiated, you call [Append to File Upload](#append_to_file_upload) to send individual blocks of the file to the server. When the complete file has been sent to the server, you call [Publish Data Source](#publish_data_source), [Publish Flow](#publish_flow), or [Publish Workbook](#publish_workbook) to commit the upload. Initiate File Upload returns an upload session ID that you pass to [Append to File Upload](#append_to_file_upload) or one of the publishing methods in order to identify the upload session. The file size that is returned in the response is initialized to zero (0) megabytes, because no data has yet been loaded. Subsequent calls to [Append to File Upload](#append_to_file_upload) or the publishing APIs update this value. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-id/fileUploads #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to upload the file to.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can initiate a file upload only if they have publishing rights on the site. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:file_uploads: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 ``` ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403015Access to Favorites forbiddenA non-administrator user attempted to initiate a file upload, but the caller doesn't have publishing rights on the site.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List All Registered EAS Get all external authorization servers (EASs) registered to a site. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 The request returns details about the EAS, including the following: - ``: The name of the connected app. - ``: The ID of the EAS. - `:` The issuer URL of the EAS. **Example response:** ``` External Authorization Server 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 2022-04-07T03:50:34Z EAS_1 be5f8262-6ae4-407c-9765-dfe5b37cb4b5 https://dev-57741099.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 2022-05-15T13:00:34Z ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
## List allowed dashboard extensions on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extensions on the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/dashboard/safeListItems [view details](#) ## List analytics extension connections of workbook Lists basic details of each analytics extension connection available for a specified workbook, including connection type and name. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users that have permissions to the specified workbook. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/connections [view details](#) ## List analytics extension connections on site Lists a site's analytics extension connections for external services. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:read\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/analytics/connections [view details](#) ## List Ask Data Lens Permissions > > [!WARNING] > > > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau AI and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-ai). List all permissions configured for the specified ask data lens that the user has read capability for. #### URI GET /api/api-version/sites/site-luid/lens/lens-Luid/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the metrics.
lens-luidThe LUID of the ask data lens whose permissions are being listed.
#### Request Body None #### Permissions Users with server or site administrator permissions, and non-administrators that have **Read** permission (either explicitly or implicitly), can list permissions for an ask data lens. lu #### Response Code 200 #### Response Body ``` <-- ... additional capabilities ... --> <-- ... additional capabilities ... --> <-- ... additional grantee capability sets ... --> ``` **Note:** The parent element is included in the response only if the lens' permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call Create Project or for an existing project by calling Update Project. For more information, see Lock Content Permissions to the Project. #### Version Introduced Tableau Cloud June 2022 (API 3.16). Not currently available for Tableau Server. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403018Read forbiddenA non-administrator user attempted to query metrics for the site, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404046Lens not foundA lens with the requested LUID could be found.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List ask data lenses in site - Retired in API 3.22 * * * Retired in API 3.22 (Cloud February 2024 / Server 2024.2) > > [!WARNING] > > > > **Important changes for Ask Data and Metrics** > > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Returns a list of ask data lenses in a site. **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by any user. Responses will include only the lenses to the user has access to. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:lenses:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/askdata/lenses [view details](#) ## List Authentication Configurations for Site List all authentications configurations on the site. For more information, see [Authentication](https://help.tableau.com/current/online/en-us/security_auth.htm#multiple_idp) in the Tableau Cloud Help. **Version:** Available in API 3.24 (Tableau Cloud November 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI GET /api/api-version/sites/site-luid/site-auth-configurations #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/site-auth-configurations" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body Copy ```             authSetting="OIDC"      enabled="true"      idpConfigurationId="00000000-0000-0000-0000-000000000000"      idpConfigurationName="Initial Salesforce"      knownProviderAlias="Salesforce"              authSetting="SAML"      enabled="true"      idpConfigurationId="11111111-1111-1111-1111-111111111111"      idpConfigurationName="Initial SAML"       ``` Copy ``` {"siteAuthConfigurations": [     {       "authSetting":"OIDC",       "enabled":"true",        "idPConfigurationId":"00000000-0000-0000-0000-000000000000",       "idPConfigurationName":"Initial Salesforce",       "knownProviderAlias":"Salesforce"    },    {       "authSetting":"SAML",       "enabled":"true",        "idPConfigurationId":"11111111-1111-1111-1111-111111111111",       "idPConfigurationName":"Initial SAML"    }  ]} ``` **Notes:** - Use the idpConfigurationId to specify the authentication method for a user in [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods. - The knownProviderAlias is returned when the authentication type is either Google or Salesforce. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Authentication Configurations on Server List information about all authentication instances associated with identity pools. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/authn-service/auth-configurations [view details](#) ## List blocked dashboard extensions on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extensions on the blocked list of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/server/extensions/dashboard/blockListItems [view details](#) ## List Bridge Clients Retrieves a list of all Bridge clients for a specific site, with optional filtering by pool. Only one filter (poolId, onlyDefaultPool, or onlyUnassigned) can be specified at a time. Each client is in one of three states: assigned to a named pool, assigned to the default pool, or unassigned. The response includes status, pool assignment, and ownership; filtering is mutually exclusive (multiple filters return 400). This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 All clients: GET /api/api-version/sites/site-luid/bridge-clients Filter by pool: GET /api/api-version/sites/site-luid/bridge-clients?poolId=poolId Filter by default pool: GET /api/api-version/sites/site-luid/bridge-clients?onlyDefaultPool=boolean Filter by unassigned: GET /api/api-version/sites/site-luid/bridge-clients?onlyUnassigned=boolean Only one filter can be specified at a time. Specifying multiple filters returns 400 Bad Request. #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
poolIdOptional. Filter by specific pool; returns only Bridge clients assigned to this pool. Mutually exclusive with onlyDefaultPool and onlyUnassigned.
onlyDefaultPoolOptional. If true, returns only Bridge clients in the default pool. Mutually exclusive with poolId and onlyUnassigned.
onlyUnassignedOptional. If true, returns only Bridge clients not assigned to any pool. Mutually exclusive with poolId and onlyDefaultPool.
#### Request Body None #### cURL Request Example `curl "https://myco/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/bridge-clients" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body ``` ``` ``` { "bridgeClients": { "bridgeClient": [ { "id": "12345", "name": "Bridge-Client-1", "status": "ONLINE", "version": "2024.1.0", "poolId": "abc-123-def-456", "assignedToDefaultPool": false, "unassigned": false, "lastStatusConnectedTime": "2024-10-30T10:30:00Z", "ownerName": "John Doe", "ownerEmail": "john.doe@example.com" }, { "id": "67890", "name": "Bridge-Client-2", "status": "OFFLINE", "version": "2024.1.0", "poolId": null, "assignedToDefaultPool": true, "unassigned": false, "lastStatusConnectedTime": "2024-10-29T15:45:00Z", "ownerName": "Jane Smith", "ownerEmail": "jane.smith@example.com" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400BAD_REQUESTMultiple filters specifiedOnly one filter parameter can be specified at a time (poolId, onlyDefaultPool, or onlyUnassigned).
400BAD_REQUESTInvalid poolIdThe poolId specified is reserved and cannot be used as a filter.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503002Unexpected server errorAn unexpected error occurred while retrieving Bridge clients.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Bridge Pools Retrieves a list of all Bridge pools for the specified site, including pool details and associated domain mappings. Each pool includes its ID, display name, and domains with status ALLOWED or BLOCKED. There is no pagination; consider caching results for 5–15 minutes for large deployments. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-luid/bridge-pools #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "edgePool": { "poolList": [ { "pool": { "id": "abc-123-def-456", "name": "Production Pool" }, "domains": { "domain": [ { "name": "example.com", "status": "ALLOWED" }, { "name": "subdomain.example.com", "status": "ALLOWED" } ] } }, { "pool": { "id": "ghi-789-jkl-012", "name": "Development Pool" }, "domains": { "domain": [ { "name": "dev.example.com", "status": "ALLOWED" } ] } } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503903Unexpected server errorAn unexpected error occurred while retrieving pools.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Collection Permissions Returns a list of permissions for a specific collection. #### URI GET /api/api-version/sites/site-id/collections/collection-luid/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the collection.
collection-idThe ID of the collection to get permissions for.
#### Request Body None #### Permissions This method can be called by server administrators, site administrators, and collection owners. #### Required scope for JWT authorization _Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.12 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404038Resource not foundThe collection ID in the URI wasn't found.
404404000Resource not foundThe site ID in the URI wasn't found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List collections Lists collections. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:read. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/collections [view details](#) ## List Connected Apps Query all connected apps configured on a site. #### URI GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body None #### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 The request returns details about the connected app, including the following: - ``: Information related to the secret only if it has been previously generated. To create a secret for a connected app, see [Create Connected App Secret](#create_connectedapp_secret). To get the secret value, see [Query Connected App Secret](#get_connectedapp_secret). - ``: Name of the connected app. - ``: Whether the connected app is enabled or not. - ``: The ID of the connected app. - `:` The project that the connected app's access level is scoped to. - `:` If specified, one or more domains that the connected app is allowed to be hosted on. - ``: Whether the connected app can be hosted on all domains. If `false` is returned, the `` attribute determines the domain access. **Example response:** ``` 7ecc5c7c-d923-4ffd-917b-cab1bd89f03b 2021-08-10T18:48:40Z ConnectedApp_MyCo true ac95d175-c844-4779-9d58-415e01fe7dab 1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-10T18:46:30Z https://myco.com false ConnectedApp_MyCo_stage1 false 7370df14-2741-43f9-bbdd-450f707530a0 11213e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 21234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-18T00:49:05Z true ConnectedApp_MyCo_stage2 false f1e57298-ecd4-46a9-b8d9-e5ab0bf76a82 2021-08-18T00:54:30Z ``` #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, GET api/_api-version_/sites/_site-id_/connected-apps/direct-trust, was added in version 3.17. The original resource, GET api/_api-version_/sites/_site-id_/connected-applications, was deprecated in version 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## List Custom Views Gets a list of custom views on a site. The list includes details of each custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 and Tableau Server 2023.1) 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:** Tableau administrators can get the list of the custom views on a site, including details of each custom view. For details of non-administrator users' permissions, see _[Permissions Details](#list_custom_views_permissions)_ .  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content:read - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 GET /api/api-version/sites/site-luid/customviews GET /api/api-version/sites/site-luid/customviews?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/customviews?sort=sort-expression GET /api/api-version/sites/site-id/customviews?fields=field-expression GET /api/api-version/sites/site-id/customviews?fields=filter-expression #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The LUID for the site.
page-size (Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number (Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
field-expression

(Optional) An expression that lets you specify the set of available fields to return. When a request has a valid field expression, describing the attributes of a Tableau resource like a workbook or data source, only the attributes specified in the expression will be present in the response. For example, a field expression that results in a response containing only the resources LUIDs of the resources being requested would look like:

?field=id

You can qualify the expression to return values based upon predefined keywords such as _default_, which returns only default values, and _all_, which returns default and non-default values. You can include multiple field expressions in a request, and mix field, sort, and filter expressions in the same request.

The supported fields for custom views are its attributes: id, name, createdAt, updatedAt, and shared.

For more information, see Using Fields in the REST API.

filter-expression

(Optional) An expression that lets you filter which Tableau resources are present in the response. A filter expression has a resource, an operator, and a value. For example, a filter that returns only resources created after a specified date would look like:

?filter=createdAt:gt:2016-08-26T18:00:33Z (where gt is the greater-than operator)

You can include multiple filter expressions in a request, and mix field, sort, and filter expressions in the same request.

The supported filters for custom views use the eq (equals) operator, with the resources: viewId, ownerId, and workbookId.

For more information, see Filtering and Sorting in the Tableau REST API.

sort-expression

(Optional) An expression that lets you sort the Tableau resources present in the response. A sort expression contains an attribute name and a direction (asc or desc). For example, a sort expression that sorts the requested resource by creation date with the latest date first would look like:

?sort=createdAt:desc

You can include multiple sort expressions in a request, and mix field, sort, and filter expressions in the same request.

The supported filters for custom views use the eq (equals) operator, with the resources: viewId, ownerId, and workbookId.

For more information, see Filtering and Sorting in the Tableau REST API.

#### Request Body None. #### Required scope for JWT authorization _Introduced in Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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) see [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. `tableau:content:read` #### cURL Request Example `curl -L -X GET "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg"wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "1", "pageSize": "100", "totalAvailable": "1673" }, "customViews": { "customView": { "id": "37d015c6-bc28-4c88-989c-72c0a171f7aa", "name": "New name 2", "createdAt": "2016-02-03T23:35:09Z", "updatedAt": "2022-09-28T23:56:01Z", "lastAccessedAt": "2022-09-28T23:58:25Z", "shared": "false", "view": { "id": "8e33ff19-a7a4-4aa5-9dd8-a171e2b9c29f", "name": "circle" }, "workbook": { "id": "2fbe87c9-a7d8-45bf-b2b3-877a26ec9af5", "name": "marks and viz types 2" }, "owner": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "name": "workgroupuser" } } // more customViews } } ``` #### Permissions Details **For users who do not have administrator permissions:** The custom views present in the response to a request, and the details of those views that are displayed, depend on four things: - Does the user have both **Write** and **WebAuthoring** permissions for the custom view? - Is the user is the owner of the custom view - Is there filter applied in the request parameters. - Is [site user visibility](https://help.tableau.com/current/server/en-us/user_visibility.htm) set to **Limited**? The expected behavior in a response is as follows: - If the request has no filter parameters: Users will see only custom views that they own. - If the filter parameters include `ownerId`: Users will see only custom views that they own. - If the filter parameters include `viewId` and/or `workbookId`, and don't include `ownerId`: - Users will see those custom views that they have **Write** and **WebAuthoring** permissions for. - If site user visibility in not set to **Limited**, the Users will see those custom views that are "public", meaning the value of their `shared` attribute is `true`. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List dashboard extension settings of site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extension settings of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/settings/site/extensions/dashboard [view details](#) ## List Data Source Permissions Returns a list of permissions for a specific data source. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to get permissions for.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can view a data source only if they have Read (view) permission for the data source (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional grantee capability sets ... ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains data-driven alerts.
**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 ``` ``` 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/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe 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.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403004Read forbiddenA user queried this method who does not have the required permissions
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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:** ``` ``` ## List Database Permissions Get information about the permissions on a database asset. #### URI GET api/_api-version_/sites/_site-luid_/databases/_database-luid_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users have permissions to query the permissions on the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body **Example response with explicit permissions set on a database asset:** ``` ``` **Example response without explicit permissions set on a database asset:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be returned because support for explicit permissions is available for database assets associated with published data sources only.
401401000Unauthorized accessNo authorization credentials were provided.
400400120Bad requestSupport for explicit permissions is available for database assets associated with published data sources only.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
## List Default Database Permissions Get the default permissions applied to the database asset and its children tables. Note: If a database is in a project, default database permissions are not evaluated to determine table permissions. Use [Query Default Permissions](#query_default_permissions) to see default permissions for projects instead. #### URI GET /api/_api-version_/sites/_site-luid_/databases/_database-luid_/default-permissions/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset to set default permissions for.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users set default permissions for the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Response Code 200 #### Response Body **Example response** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be returned because support for explicit permissions is available for database assets associated with published data sources only.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404003Resource not foundThe database LUID in the URI doesn't correspond to a database asset on the site.
## List Default Permissions Returns details of default permission rules granted to users and groups for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, this method can also return details of default permission rules granted to users and groups for database or table resources in a project. #### URI Workbooks: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks Data sources: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources Data roles: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles Lenses: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/lenses Metrics: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/metrics Flows: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows Virtual Connections _(endpoint introduced in [API version](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm#rest_and_tableau_version_table) 3.23)_: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/virtualconnections Databases: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases Tables: GET /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the project.
project-luidThe LUID of the project to get default permissions for.
#### Request Body None #### Permissions Users who are not server administrators can query default permissions for a project only if they have the ProjectLeader permission for that project (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. **Note:** The following scope applies to data sources, workbooks, and metrics only. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` <... additional capabilities ...> <... additional grantee capabilities ...> ``` #### Version - Version 2.1 and later. - Version 3.23 and later for the virtual connection default permissions methods. - For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403035Querying data source permissions forbiddenThe caller doesn't have permissions to query the project's default permissions for data sources.
403403036Querying workbook permissions forbiddenThe caller doesn't have permissions to query the project's default permissions for workbooks.
403403035Querying flow permissions forbiddenThe caller doesn't have permissions to query the project's default permissions for flows.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404005Project not foundThe project LUID in the URI doesn't correspond to an existing project.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List edges around a node List the edges connected to a node. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/edges/search [view details](#) ## List Extract Refresh Tasks in Server Schedule Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server. To get the ID of a schedule, call the [List Server Schedules](#query_schedules) method. Note that the List Server Schedules method is global to the server; schedules are not specific to a site. Therefore, the URI for the List Server Schedules method does not include `/sites/` or a site ID. However, individual scheduled tasks are specific to a site, and the URI for Query Extract Refresh Tasks must include the site information. For more information about refresh tasks, see [Manage Refresh Tasks](https://help.tableau.com/current/server/en-us/help.htm#task.htm). _Not available for Tableau Cloud._ #### URI GET /api/api-version/sites/site-id/schedules/schedule-id/extracts GET /api/api-version/sites/site-id/schedules/schedule-id/extracts?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 2.2. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the refresh tasks.
schedule-idThe ID of the schedule to get extract information for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### JWT Access Scope Not available. 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 #### Permissions This method can only be called by server administrators and site administrators. When a site administrator calls this method, the payload contains only the tasks that are associated with the site that the user is signed in to. #### Response Code 200 #### Response Body ``` ... additional extract refresh tasks ... ``` #### Version Version 2.2 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
400400047Invalid schedule typeThe schedule type does not represent an extract refresh task. (For example, it might be a subscription task.)
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404Schedule not foundThe schedule ID in the URI doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/schedules/59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba/extracts" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List Extract Refresh Tasks in Site Returns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections. #### URI GET /api/api-version/sites/site-id/tasks/extractRefreshes #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). `tableau:tasks:read` (this scope is included in the scope: `tableau:tasks`) 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). #### cURL Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/tasks/extractRefreshes" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only access the list of extract refresh tasks that they own. #### Response Code 200 #### Response Body Tableau Server and Tableau Cloud return different payloads in response to this request. Output for virtual connections includes `transactionLevel` and table ids in addition to the output that's standard for data sources and workbooks. ### Tableau Server Response On Tableau Server, a list of extract refresh tasks with their server schedules is returned. ``` ``` ``` { "tasks": [ { "extractRefresh": { "id": "refresh_task_id", "priority": "nn", "consecutiveFailedCount": "n", "type": "REFRESH_EXTRACT", "schedule": { "id": "schedule_id", "name": "schedule_name", "state": "state", "priority": "nn", "createdAt": "DATE_TIME", "updatedAt": "DATE_TIME", "type": "Extract", "frequency": "frequency", "nextRunAt": "DATE_TIME" }, "datasource": { "id": "datasource_id" } } }, [] ] } ``` ### Tableau Cloud Response On Tableau Cloud, a list of extract tasks with their frequency is returned. ``` ``` ``` { "tasks": { "task": { "extractRefresh": { "id": "0ece2369-c4eb-4382-be0f-961039d708a0", "priority": "50", "consecutiveFailedCount": "5", "type": "RefreshExtractTask", "schedule": { "frequency": "Weekly", "nextRunAt": "2023-06-08T04:50:00Z", "frequencyDetails": { "start": "21:50:00", "intervals": { "interval": [ { "weekDay": "Thursday" } ] } } }, "workbook": { "id": "7e766949-7166-4b3d-90ba-784f7575743b" } } } } } ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
405405000Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Flow Permissions Returns a list of permissions for the specific flow. #### URI GET /api/api-version/sites/site-id/flows/flow-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to get permissions for.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:permissions: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 ``` ... additional capabilities ... ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/flows/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List followed metrics groups Gets the user's followed metrics. Optionally metrics can be grouped by characteristics like datasource, and sorted. **Version:** Available in API 3.23 (Tableau Cloud December 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) **Permissions:** Any user can create a metric in a definition as long as the user has read or connect access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insights:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/metrics:followedMetricsGroups [view details](#) ## List Group Sets Lists all group sets matching optional filter and ordered by optional sort expression. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI GET /api/api-version/sites/site-id/groupsets?pageSize\=page-size&pageNumber\=page-number GET /api/api-version/sites/site-id/groupsets?filter=filter-expression GET /api/api-version/sites/site-id/groupsets?sort=sort-expression #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group sets.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) An expression that lets you specify a subset of group sets to return. You can filter on predefined fields such as name. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which group set information is returned. If you don’t specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
#### Request Body None #### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets&[resultlevel=[members,local]]" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body Copy ```                    ``` Copy ``` {  "pagination": {    "pageNumber": "1",    "pageSize": "100",    "totalAvailable": "3"  },  "groupSets": [    {      "id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",      "name": "All Users",      "groupCount": "1",      "group": {        "id": "gs-1",        "name": "group-one"      }    },    {      "id": "9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b",      "name": "active-directory-group-import",      "group": {        "id": "gs21",        "name": "group-two"      }    },    {      "id": "7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6",      "name": "local-group-license-on-login",      "group": {        "id": "gs-3",        "name": "group-three"      }    }  ]} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter isn’t an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter isn’t an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodThe request type wasn’t GET.
409409120Group set not foundThe group set ID in the URI doesn't correspond with an existing group set.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Identity Pools List all identity pools. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/authn-service/identity-pools [view details](#) ## List Identity Stores List information about all identity store instances used to provision users. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/authn-service/identity-stores [view details](#) ## List items in a collection Lists items in a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:read. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/collections/{luid}/items [view details](#) ## List knowledge graphs List the knowledge graphs on the caller's Tableau site, each with its ID, name, description, status, and **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/v1/knowledge/graphs [view details](#) ## List knowledge sources List the data sources and workbooks connected to the graph. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/sources/search [view details](#) ## List Label Categories on Site Lists all data label categories on the site. Note that category is one property of a label value (labelValue), which is itself a property of a label on an asset. Other properties of a labelValue include name and description. These properties determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. #### URI GET api/api-version/sites/site-luid/labelCategories #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
#### Request Body None #### Permissions Any logged in user can view the label categories for their site. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_categories: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 #### Version Introduced in Tableau Cloud October 2023 (API 3.21) / Server 2023.3 (API 3.21). #### Response Body      ``` Copy ``` {  "pagination": {    "pageNumber": "pageNumber",    "pageSize": "page-size",    "totalAvailable": "total-available"  },  "subscriptions": {    "subscription": {      "id": "subscription-id",      "subject": "subscription-subject",      "attachImage": "attach-image-flag",      "attachPdf": "attach-pdf-flag",      "suspended": "suspended-flag",      "pageOrientation": "page-orientation",      "pageSizeOption": "page-size-option",      "content": {        "id": "content-id",        "type": "content-type",        "sendIfViewEmpty": "send-view-if-empty-flag"      },      "schedule": {        "id": "schedule-id",        "name": "schedule-name"      },      "user": {        "id": "user-id",        "name": "user-name"      }    }  }} ``` ### Tableau Cloud Request For Tableau Cloud, a task with frequency is returned. Copy ```                                                                                                                                                        ``` Copy ``` {  "pagination": {    "pageNumber": "1",    "pageSize": "100",    "totalAvailable": "1"  },  "subscriptions": {    "subscription": {      "id": "92cb4f51-7a15-41d4-bce4-a0fcce5fa985",      "subject": "Subscription - postman",      "message": "weekly report",      "attachImage": "true",      "attachPdf": "false",      "suspended": "false",      "content": {        "id": "be016ba6-d0a8-44ae-a057-b6df6931ccaa",        "type": "Workbook",        "sendIfViewEmpty": "true"      },      "schedule": {        "frequency": "Weekly",        "nextRunAt": "2023-06-08T17:05:00-0700",        "frequencyDetails": {          "start": "17:05:00",          "intervals": {            "interval": [              { "weekDay": "Thursday" }            ]          }        }      },      "user": {        "id": "14064b01-7d58-4978-bdeb-a5f8d7694863",        "name": "memysite.com"      }    }  }} ``` #### Version For Tableau Server: API 2.3 and later. For Tableau Cloud: API 3.20 (June 2023) and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe 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.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List subscriptions Lists the subscriptions to a specified metric and/or for a specified user. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can list subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:metric\_subscriptions:read Access Scopes [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/subscriptions [view details](#) ## List Table Permissions Get information about the permissions on a table asset. #### URI GET api/_api-version_/sites/_site-id_/tables/_table-id_/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following authorized users have permissions to query the permissions on the table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to set or "ChangePermissions" to the asset metadata #### Response Code 200 #### Response Body **Example response with explicit permissions set:** ``` ``` **Example response without explicit permissions set:** ```
``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400120Bad requestPermissions could not be returned because support for explicit permissions is available for table assets associated with published data sources (not embedded data sources) only.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Table errorAn unknown table asset error occurred.
409409053Unknown table query errorAn unknown error occurred and the table query could not complete.
## List Tableau extensions server settings Lists the settings for extensions of a server. **Version:** Available in API 3.21 (Tableau Server 2023.3) and later. Not available for Tableau Cloud. _[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 users with server administrator permissions.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:extensions\_server\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/settings/extensions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body None #### cURL Request Example `curl -X GET "http://MY-SERVER/api/3.29/settings/extensions" -H "Content-Type: application/xml" -H "X-Tableau-Auth: SBGBfOYRSN2JoFe866wpIg|hLI0ZzWmK3xfMtwD8WoztCMqfWaFdcCj|a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body Copy ```         true        https://test.com     ``` Copy ``` {  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403000Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
404404000Bad RequestThe requested resource could not be found.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Tableau extensions site settings Lists the settings for extensions of a site. **Version:** Available in API 3.21 (Tableau Cloud June 2023 / Tableau Server 2023.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:** Any authenticated user can list the extension settings for a site using this method.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:extensions\_site\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-luid/settings/extensions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### cURL Request Example `curl --location "http://MY-SERVER/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/settings/extensions " --header "X-Tableau-Auth: SBGBfOYRSN2JoFe866wpIg|hLI0ZzWmK3xfMtwD8WoztCMqfWaFdcCj|a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body Copy ```             true        false                    http://localhost:9123/Dynamic.html            true            true                true          true         true         false     ``` Copy ``` {  "extensionsEnabled": "true",  "useDefaultSetting": "false",  "safeList": [  {    "url": "http://localhost:9123/Dynamic.html",    "fullDataAllowed": true,    "promptNeeded": true    }   ],  "allowTrusted": true,    "includeSandboxed": true,    "includeTableauBuilt": true,    "includePartnerBuilt": false  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403000Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
404404000Site Not FoundThe site ID in the URI doesn't correspond to an existing site.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Users with Custom View as Default Gets the list of users whose default view is the specified custom view. **Version:** Available in API 3.21 (Tableau Cloud October 2023 / Server 2023.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:** Only Tableau administrators can list users whose default view is the specified custom view.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content: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). #### URI GET /api/api-version/sites/site-luid/customviews/custom-view-luid/default/users #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body None. #### cURL Request Example ``` curl --location 'https://qa-near.tsi.lan/api/3.21/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/3321cb71-6606-4d78-8a0c-e69a7e7d2261/default/users' --header 'Accept: application/xml' --header 'X-Tableau-Auth: LfzV48kKRUOYMYbzamWRpA|bfkD8ruGmN8ZNGmdL03PHB0gMHGtCfOk|a946d998-2ead-4894-bb50-1054a91dcab3' ``` #### Response Code 200 #### Response Body Copy ```                        ``` Copy ``` {  "pagination": {    "pageNumber": "1",    "pageSize": "100",    "totalAvailable": "1"  },  "users": {    "user": [      {        "id": "5c9a81df-7ec0-4752-a057-82cd2bb22c44"      }    ]  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions.
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List View Permissions Returns a list of permissions for the specific view. #### URI GET /api/api-version/sites/site-id/views/view-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
view-idThe ID of the view to get permissions for.
#### Request Body None #### Permissions This method can only be called by server and site administrators, and users who have Read (view) permission for the specific view. #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ... additional capabilities ... ... additional capabilities ... ... additional capabilities ... ``` **Note**: The parent element is included in the response only if the view's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 3.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the view.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/views/0524c7ce-250b-45b1-adf2-d08f1648643c/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## List Virtual Connection Database Connections Returns information about database connections in the specified virtual connection **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** Users who are not administrators can query a virtual connection only if they have explicit or implicit \[Connect\] (view) permission for the virtual connection.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/connections GET /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/connections?pageSize=page-size&pageNumber=page-number #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site that contains the virtual connection.
virtual-connection-idThe LUID for the virtual connection that includes the database connections.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### cURL Request Example `curl --location --request GET "https://MY_SERVER/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/virtualconnections/26bc30d8-90d6-4af1-922d-ac285e7b08fb/connections?X-Tableau-Auth =3bl3fJb0T6qxhaCqneNhWg"Nmv6zrJfYeiiovCuEs2grrBAZlREbRGl"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body ```            ``` ``` {  "pagination": {    "pageNumber": "pageNumber",    "pageSize": "page-size",    "totalAvailable": "total-available"  },  "virtualConnectionConnections": {    "connection": {      "id": "connection-id",      "serverAddress": "server-address",      "dbClass": "database-type",      "serverPort": "port-number",      "userName": "connection-user-name"    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for virtual connections at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
401401002UnauthorizedThe authentication token provided in the request header was invalid or has expired.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Virtual Connection Permissions Returns a list of permissions for a specific virtual connection. #### URI GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the virtual connection.
virtualconnection-idThe ID of the virtual connection to get permissions for.
#### Request Body None #### Permissions You must be an administrator or have the Read (View) permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Virtual Connection not foundThe virtual connection ID in the URI doesn't correspond to an existing virtual connection.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` ## List Virtual Connection Revisions Lists revisions for a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Overwrite permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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). **Note:** This method can only succeed if version history is enabled for the specified site. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/revisions GET /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/revisions/?pageSize\=page-size&pageNumber\=page-number #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtual-connection-idThe LUID for the virtual connection.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/revisions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3 ' ``` #### Response Code 200 #### Response Body ``` ``` ``` "pagination": { "pageNumber": "page-number", "pageSize": "page-size", "totalAvailable": "page-count" }, "revisions": { "revision": [ { "publisher": { "id": "publisher-id", "name": "publisher-username" }, "revisionNumber": "revision-number", "publishedAt": "datetime", "deleted": deleted-flag, "current": current-flag }, { "publisher": { "id": "publisher-id", "name": "publisher-username" }, "revisionNumber": "revision-number", "publishedAt": "datetime", "deleted": deleted-flag, "current": current-flag }, { ...Additional revisions... } ] } } ``` The `current` property of a revision shows `false` for all revisions except for the currently active virtual connection revision, in which case it shows `true`. #### Errors
HTTP statuserror CodeConditionDetails
400400058Generic errorAn unknown error occurred.
403403054User not authorized.User doesn't have permissions to revisions on this virtual connection. Check the user's permissions.
403403173User not authorized.User forbidden from listing virtual connection revisions. Check the user's permissions and site role.
403403053Revision history is disabled on the site.Check the revision history setting.
404404049Virtual connection not foundCheck the virtual connection LUID.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Virtual Connections Returns a list of available virtual connection names and IDs. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** By default, all users can view virtual connections.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-id/virtualconnections GET /api/api-version/sites/site-id/virtualconnections/?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/virtualconnections/?sort=sort-expression #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site that contains the virtual connection.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
sort-expression(Optional) An expression that lets you specify the order in which virtual connection information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
#### Request Body None #### cURL Request Example `curl --location --request GET "https://MY_SERVER/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/virtualconnections" \ --header "X-Tableau-Auth: 3bl3fJb0T6qxhaCqneNhWg"Nmv6zrJfYeiiovCuEs2grrBAZlREbRGl"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body ```             ``` ``` {  "pagination": {    "pageNumber": "page-number",    "pageSize": "page-size",    "totalAvailable": "total-available"  },  "virtualConnections": {    "virtualConnection": {      "createdAt": "datetime-created",      "hasExtracts": "has-extracts-flag",      "id": "virtual-connection-id",      "isCertified": "is-certified-flag",      "name": "virtualconnection-name",      "updatedAt": "datetime-updated",      "webpageUrl": "web-page-url"    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for virtual connections at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
400400008Invalid parameter valueA parameter in the request body is missing or invalid.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Webhooks Returns a list of all the webhooks on the specified site. #### URI GET /api/3.6/sites//webhooks #### Parameter Values
site-idThe ID of the site that contains the webhooks.   
#### 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 ## List Workbook Permissions Returns a list of permissions for the specific workbook. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to get permissions for.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ... additional capabilities for users ... ... additional capabilities for groups ... ... additional grantee capability sets ... ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Lists all definition tags for the site. Lists all definition tags for the site. Results can be filtered by tag value, definition name, or datasource ID. Each result includes the tag value and a count of how many definitions use it. **Version:** Available in API 3.29 (Tableau Cloud August 2026) 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) **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions\_metrics:read\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/-/pulse/definitions/tags [view details](#) ## Move Bridge Client Moves a Bridge client between pools or to unassigned status. The operation is atomic (all-or-nothing). For moveToNamedPool the pool must exist and be a valid UUID; moveToUnassigned is useful for temporarily deactivating a client without deleting it. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-clients/bridge-client-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
bridge-client-idThe unique identifier for the Bridge client to move.
#### Request Body ``` ``` ``` { "bridgeClientMoveRequest": { "moveToNamedPool": { "poolId": "abc-123-def-456" } } } ``` #### Attribute Values
poolIdRequired when using moveToNamedPool. The UUID of the Bridge pool to move the client to.
moveToDefaultPoolSet to true to move the Bridge client to the default pool. Use in place of moveToNamedPool.
moveToUnassignedSet to true to move the Bridge client to unassigned status. Use in place of moveToNamedPool.
#### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400BAD_REQUESTMultiple operations specifiedCannot specify more than one move operation in a single request.
400BAD_REQUESTNo operation / Missing poolId / Invalid poolIdRequest must contain exactly one valid move operation; poolId required for moveToNamedPool and must be a valid UUID.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
404503001Bridge client not foundBridge client with the specified ID does not exist on this site.
404503005Pool not foundThe specified poolId does not exist on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503004Unexpected server errorAn unexpected error occurred while moving the Bridge client.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Move Database Move one or more databases to a project. You can move the database and its tables, or move only the database. To move a table independently of its database, use the [Move Table](#move_table) method. Note: Starting in Tableau Cloud June 2022 and Tableau Server 2022.3, projects can contain databases and tables, and database and table permissions can be managed at the project level through inheritance. In Tableau Cloud March 2022 and Tableau Server 2022.1 and earlier, projects couldn't contain databases or tables. The Move Database method can either: - Move a database from one project to another project. - Move a database not in a project to a project. This method can't remove a database from all projects. (The only way to remove a database from all projects is to delete the project that the database is in.) This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/api-version/sites/site-luid/databases #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the database.
#### Request Body ``` ``` The contentAction element is optional. - If the contentAction element is not included, moving the database will also move its tables. - If the contentAction element is included and the action attribute is set to MoveDatabaseOnly, moving the database will not move its tables. The resourceList element can contain a minimum of 1 and a maximum of 1000 resource elements. #### Attribute Values
project-luid The LUID of the destination project.
location-type

The destination type. Currently, this value must be "PROJECT".

action-type To move a database without moving its tables, this value must be "MoveDatabaseOnly".
database-luid The LUID of the database.
asset-type The type of asset being moved. Currently, this value must be "DATABASE".
#### Permissions If you are moving a database _without_ its tables, you must have read and changeHierarchy permissions for the database, and write permission for the target project. If you are moving both a database and its tables, you must have read and changeHierarchy permissions for both the database and its tables, and write permission for the target project. Note: Currently, you can only set the ChangeHierarchy permission for databases and tables using the REST API. See [Add Database Permissions](#add_database_perms) and [Add Table Permissions](#add_table_perms) for information on adding this permission. Setting the required database and table permissions depends on whether the database is in a project or not. - If the database is in a project, the database and table permissions will follow the rules for permissions on content inside of projects. See [Set Permissions](https://help.tableau.com/current/server/en-us/permissions.htm#set-permissions) for information on these rules. - If the database is not in a project, the database and table permissions will follow the rules for permissions on external assets. See [Set permissions on individual external assets](https://help.tableau.com/current/server/en-us/dm_perms_assets.htm#set-permissions-on-individual-external-assets) for information on these rules. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:database_projects: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 **Example response when all elements were moved successfully:** ``` ``` **Example response when not all elements were moved successfully.:** When some database resource elements of a request with multiple database resource elements can’t be moved, the HTTP status 400 is returned, and the response contains additional information about failures. Resource elements from the request body that are not referenced in the response body were successfully moved. A response indicating partial success looks like: ``` Bad Request There was a problem completing one or more requests. ``` #### Version Introduced Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400409100Invalid location typeThe location element's type attribute must be "PROJECT".
400409103Invalid content typeThe resource element's contentType attribute must be "DATABASE".
403403004Operation on resource unauthorizedInsufficient permissions or operation not allowed. Make sure Tableau Catalog is enabled.
403403030Permissions deniedThe user does not have permission to move the database.
403403112Invalid OperationThe database may be embedded, and therefore cannot be moved.
403403156External assets can not be movedThe user does not have appropriate permissions.
404404005Project not foundThe project LUID doesn't correspond to an existing project.
404404031Database not foundThe database LUID doesn't correspond to an existing database. In a case where multiple databases were specified in the request, other database moves could have succeeded.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request POST 'http://MY-SERVER/api/3.16/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/databases' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd' -d @move-database.xml` **Content of move-database.xml:** ``` ``` **Example response:** ``` ``` ## Move Table Moves one or more tables to a project. Note: Starting in Tableau Cloud June 2022 and Tableau Server 2022.3, projects can contain databases and tables, and database and table permissions can be managed at the project level through inheritance. In Tableau Cloud March 2022 and Tableau Server 2022.1 and earlier, projects couldn’t contain databases or tables. The Move Table method can either: - Move a table from one project to another project. - Move a table not in a project to a project. This method can’t remove a table from all projects. (The only way to remove a table from all projects is to delete the project that the table is in.) This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI POST api/api-version/sites/site-luid/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the table.
#### Request Body ``` ``` The resourceList element can contain a minimum of 1 and a maximum of 1000 resource elements. #### Attribute Values
project-luid The LUID of the destination project.
location-type

The destination type. Currently, this value must be "PROJECT".

table-luid The LUID of the table.
asset-type The type of asset being moved. Currently, this value must be "TABLE".
#### Permissions You must have read and changeHierarchy permissions for the table, and write permission for the target project. If you are moving both a database and its tables, you must have read and changeHierarchy permissions for both the database and its tables, and write permission for the target project. Note: Currently, you can only set the ChangeHierarchy permission for databases and tables using the REST API. See [Add Database Permissions](#add_database_perms) and [Add Table Permissions](#add_table_perms) for information on adding this permission. Setting the required table permissions depends on whether the parent database is in a project or not. - If the table is in a project, the table permissions will follow the rules for permissions on content inside of projects. See [Set Permissions](https://help.tableau.com/current/server/en-us/permissions.htm#set-permissions) for information on these rules. - If the table is not in a project, the table permissions will follow the rules for permissions on external assets. See [Set permissions on individual external assets](https://help.tableau.com/current/server/en-us/dm_perms_assets.htm#set-permissions-on-individual-external-assets) for information on these rules. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:table_projects: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 **Example response when all elements were moved successfully:** ``` ``` **Example response when not all elements were moved successfully.:** When some table resource elements of a request with multiple table resource elements can’t be moved, the HTTP status 400 is returned, and the response contains additional information about failures. Resource elements from the request body that are not referenced in the response body were successfully moved. A response indicating partial success looks like: ``` Bad Request There was a problem completing one or more requests. ``` #### Version Introduced Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400409100Invalid location typeThe location element's type attribute must be "PROJECT".
400409103Invalid content typeThe resource element's contentType attribute must be "TABLE".
403403004Operation on resource unauthorizedInsufficient permissions or operation not allowed. Make sure Tableau Catalog is enabled.
403403030Permissions deniedThe user does not have permission to move the table.
403403112Invalid OperationThe table may belong to an embedded database, and therefore cannot be moved.
403403156External assets can not be movedThe user does not have appropriate permissions.
404404005Project not foundThe project LUID doesn't correspond to an existing project.
404404032Table not foundThe table LUID doesn't correspond to an existing table. In a case where multiple tables were specified in the request, other table moves could have succeeded.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request POST 'http://MY-SERVER/api/3.16/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/tables' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd' -d @move-table.xml` **Content of move-table.xml:** ``` ``` **Example response:** ``` ``` ## Organize Favorites Move an item to organize a user's favorites. #### URI PUT /api/api-version/sites/site-id/orderFavorites/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
user-idThe ID of the user for which you want to get a list favorites.
#### Request Body ``` ``` #### Attribute Values
favorite-id The ID of the favorite you want to move.
content-type The content type of a favorite. To specify the type, use one of the following values:
  • datasource
  • workbook
  • view
  • project
  • flow
These values are not case sensitive.
favorite-id-after The ID of the favorite that should follow, or come after, the favorite you want to move.
#### Permissions Users who are not server administrators or site administrators can call this method only if they are the user for which they want to move favorites. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:favorites: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 None #### Version Version 3.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
403403004Forbidden Favorites accessA non-administrator user called this method but doesn't have permission to view the specified user's favorites.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
404404010Favorite not foundThe favorite ID specified doesn't correspond to a user's favorite.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Data Source Publishes a data source on the specified site, or appends data to an existing data source. To make other changes to a published data source, call [Update Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source) or [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection). **Version**: Available in API 2.0 and later. **License**: Available for Tableau Server and Tableau Cloud. **Permissions**: You can publish a data source if you have implicit or explicit Publish permissions for the data source, or are a Tableau administrator. Note: The `queryTaggingEnabled` attribute is returned only for administrator users. **Access Scope**: `tableau:datasources:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This method is used in two ways. You can call it to publish a data source in a single request. To do that, you include the content of the data source file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. If you want to avoid having the publishing process time out, you can use the _asJob_ parameter to make data source publication asynchronous. Alternatively, you can publish a data source in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload), and then commit the upload by calling Publish Data Source. In this case, Publish Data Source doesn't contain the file to publish. **Extracts with multiple table options** Starting in v2021.4, you can publish multi table Hyper extract files created using the [Hyper API](https://help.tableau.com/current/api/hyper_api/en-us/docs/hyper_api_create_update.html). The data must include a single [fact table](https://en.wikipedia.org/wiki/Fact_table) containing the foreign keys that relate the tables to each other. The Hyper API infers the data object model, but does not perform any validation, such as referential integrity checking. If the Hyper API can’t infer the data object model of a Hyper extract, for instance, because there is more than one fact table, then attempting to publish the extract will fail. Prior to v2021.4, there was no way to append data to an extract with multiple tables using the REST API. **Data Sources stored locally** When you publish a data source from your local computer to the server, you must make sure that the server has all the components that are required in order for other users to see and interact with the data source. For example, if the data source is based on an Excel spreadsheet, you typically publish a packaged data source (`.tdsx` file) that contains all the components for that data source. **Replace data source** Starting in version 2025.1, you can use the replace parameter. You can include `overwrite`, `append`, and `replace` in a single request, but only one of these parameters can be set to true. If more than one is set to true, the request returns an HTTP 400 error. **Working with Parquet files** \- When publishing a Parquet file to a data source through a live-to-Hyper connection, the files are converted to Hyper files. You may want to publish a copy of your original Parquet file to retain that data in its native format. \- A data source with a live-to-Hyper connection to data in a Hyper file converted from Parquet can only have a single connection. \- When incrementally updating that data from that connection, using the Update Hyper in Data Source method, the Parquet file is not converted to Hyper. **Composed data sources and extended data sources** Starting in REST API version 3.29 (Cloud 262 and Server 2026.2), you can publish composed and extended data sources. When you publish a composed data source, you must include a `parentDataSourceUrls` element in addition to the `.tds` file so the composed data source is correctly linked to its parents. Include one entry for every published data source that is a direct parent of the composed data source. These correspond to the `datasource-url` tags serialized in the `.tds` file's data source tree. Include only the immediate parent data sources that the data source you are publishing depends on. When you publish an extended data source, include the `.tds` file as usual; no `parentDataSourceUrls` element is required. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-luid/datasources POST /api/api-version/sites/site-luid/datasources?overwrite=overwrite-flag&asJob=asJob-value POST /api/api-version/sites/site-luid/datasources?append=append-flag POST /api/api-version/sites/site-luid/datasources?uploadSessionId=upload-session-id&datasourceType=datasource-file-type&overwrite=overwrite-flag&append=append-flag&replace=replace-flag #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The LUID of the site to publish to.
overwrite-flag true to overwrite a data source that has the same name, or false to fail if the specified data source already exists. The default is false. If overwrite-flag is set to true but the data source doesn't already exist, the operation succeeds.

You can include both the overwrite and append parameters in a request, but they cannot both be true.

replace-flag (New in 2025.1) A boolean value (true or false). Set to true to replace the data in an existing data source. The default is false.
asJob-value A Boolean value that is used to publish data sources asynchronously. If you set this value to false (the default), the publishing process runs as a synchronous process. If a data source is very large, the process might time out before it finishes. If you set this value to true, the process runs asynchronously, and a job will start to perform the publishing process and return the job ID. You can check the status of the import job by calling Query Job.
append-flag true to append the data being published to an existing data source that has the same name. The default is false. If append-flag is set to true but the data source doesn't already exist, the operation fails.

In order to append data to a published data source on Tableau Server, both the source file and the published file must be an extract with the file extension .hyper or .tde. The schema of the source and the published extract must match.

If an extract was stored using the multiple tables option, you can't append data to it.

You can include both the overwrite and append parameters in a request, but they cannot both be true.

upload-session-luid If you are calling this method to commit a file that was uploaded in parts, this value contains the upload session LUID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
datasource-file-type hyper, tds, tdsx, or tde the kind of file that you are uploading. This value is required if you are calling Publish Data Source in order to commit a file that was previously uploaded using Append to File Upload. The value is not used if you upload a file in the body of the request.
#### Request Body The content type in the header of requests to publish a data source must use the mixed multipart content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml parent-datasource-url --boundary-string Content-Disposition: name="tableau_datasource"; filename="SALES.TDSX" Content-Type: application/octet-stream content-of-datasource-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml parent-datasource-url --boundary-string-- ``` **Publishing a file in the request body** ``` Content-Length: 16301 Content-Type: multipart/form-data; boundary=----------------------my_boundary_string ----------------------my_boundary_string Content-Disposition: form-data; name="part1.json" Content-Type: application/json { "datasource": { "name": "datasource-name", "useRemoteQueryAgent": "remote-query-agent-flag", "description": "datasource-description", "connectionCredentials": { "name": "connection-username", "password": "connection-password", "embed": "embed-flag", "oAuth": "oauth-flag" }, "project": { "id": "project-id" }, "parentDataSourceUrls": [ "parent-datasource-url" ] } } ----------------------my_boundary_string Content-Disposition: form-data; name="datasource.tdsx" Content-Type: application/octet-stream content-of-datasource-file ----------------------my_boundary_string-- ``` **Committing a file previously uploaded** ``` Content-Length: 16301 Content-Type: multipart/form-data; boundary=----------------------my_boundary_string ----------------------my_boundary_string Content-Disposition: form-data; name="part1.json" Content-Type: application/json { "datasource": { "name": "datasource-name", "connectionCredentials": { "name": "connection-username", "password": "connection-password", "embed": "embed-flag", "oAuth": "oauth-flag" }, "project": { "id": "project-id" }, "parentDataSourceUrls": [ "parent-datasource-url" ] } } ----------------------my_boundary_string-- ``` #### Request Attributes
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

datasource-name (Required) The name to assign to the data source when it is saved on the server.
remote-query-agent-flag (Optional) When true, this flag will allow your Tableau Cloud site to use Tableau Bridge clients. Bridge allows you to maintain data sources with live connections to supported on-premises data sources.
datasource-description (Optional) A description of the data source.
connection-username (Optional) If the data source connection requires credentials, the <connectionCredentials> elements is included and this attribute specifies the connection username. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

connection-password (Optional) If the data source connection requires credentials, the <connectionCredentials> elements is included and this attribute specifies the connection password. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

embed-flag (Optional) If the data source connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials.
oauth-flag (Optional) If the data source connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the connectionCredentials element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the data source.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

project-id The LUID of the project to assign the data source to. If the project is not specified, the data source will be published to the default project.
datasource-file-name The file name (including extension) of the data source file to upload. This attribute is used in the request body only if the request also includes the content of the data source file; it is not used if you are committing a file uploaded using previous requests.
content-of-datasource-file The content of the data source file, if the request includes the file. The maximum size of a file that can be uploaded in one call is 64 MB.
askDataEnablement This attribute is not available in API 3.12 and later (Tableau Cloud September 2021 / Server 2021.3).
parentDataSourceUrls The name (URL) of the immediately referenced published data source that the data source being published depends on. For a composed data source, you must include one entry for each top-level parent data source in the data model.
#### cURL Example `curl "http://MY_SERVER/api/3.4/sites/ff2a8360-3c2b-4b05-a793-7607c602e1fb/datasources" -X POST -H "X-Tableau-Auth:6fSulU7ET8yjpHteQj56MQ|LrkEdTHcmPkWFcD8wOEy29hlVXm8iPo4" -H "Content-Type: multipart/mixed;" -F "request_payload=@publish-datasource.xml" -F "tableau_datasource=@data-source.tds"` **Content of publish-datasource.xml**: ``` ``` #### Response Code 201 #### Response Body ``` ``` ``` { "datasource": { "id": "75b71d2f-e8d3-42af-b654-d953659326ee", "name": "Sales", "contentUrl": "mySite", "description": "Sales Data Source", "useRemoteQueryAgent": "True", "webpageUrl": "https://my_server/#/datasources/222", "type": "excel-direct", "createdAt": "2016-02-12T23:36:09Z", "updatedAt": "2020-12-16T15:33:03Z", "isCertified": "False", "certificationNote": "This is a certification note.", "encryptExtracts": "True", "project": { "id": "56c86f04-b834-4a08-a561-86497bb4b2df", "name": "Visualization" }, "owner": { "id": "20148c74-7818-4eb8-b2a1-9f3f5f582613" }, "tags": [] } } ``` The `createdAt` and `updatedAt` attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Response Headers `Location: /api/3.29/sites/site-id/datasources/id-from-server` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe request message is missing or incomplete, or contains malformed XML. Make sure that the Content-Length value is set.
400400000Missing data sourceThere is no attachment in the request for the data source.
400400008Invalid overwrite valueThe overwrite parameter must be set to true or false.
400400008Invalid append valueThe append parameter must be set to true or false.
400400008Invalid embed valueThe request body contains a <connectionCredentials> element and it has an embed attribute whose value is not true or false.
400400010Invalid data source filenameThe name of the data source file did not end with the suffix .hyper, .tds, .tdsx, or .tde.
400400010Missing or invalid file typeThe request included an uploadSessionId parameter but no file type, or the file type was something other than hyper, tds, tdsx, or tde.
400400010Unexpected attachmentsThe message had both a uploadSessionId parameter and an attachment, or the message contained more than one attachment.
400400011Publishing errorThe data source could not be published for some other reason than those specified earlier.
400400011Bad RequestThe request is invalid. This can occur if more than one of the conflict resolution parameters (overwrite, append, or replace) is set to true. Only one of these parameters can be true in a single request.
400400019Malformed request bodyThe request message is missing or incomplete, or contains malformed XML. Make sure that the Content-Length value is set.
400400055Incompatible overwrite and append valuesThe overwrite and append parameter cannot both be set to true.
400400129Invalid Ask Data enablementThe enablement setting in the request body is not valid for the current server configuration.
403403007Insufficient publishing permissionA non-administrator user attempted to publish a data source, but the caller doesn't have sufficient project permissions.
403403007Unlicensed publishing forbiddenA non-administrator user who is unlicensed attempted to publish a data source. This is disallowed for all projects (including the default project).
403403007Overwrite forbiddenA data source with the specified name already exists and the overwrite parameter was not set to true.
403403007Problem connecting to data sourceThere was a problem connecting to a data source. This can be due to missing or invalid connection credentials or because the referenced data source is not available on the server.
403403008Insufficient storage quotaThe data source could not be published because there is not enough storage remaining on the server to accommodate its size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe append parameter is true but the data source name specified in the request body does not correspond to an existing data source.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404015File upload not foundThe file upload session ID in the request body doesn't correspond to an existing file upload on the site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Flow Publishes a flow on the specified site. To make other changes to a published flow, call [Update Flow](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow) or [Update Flow Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow_connection). **Version**: Available in API 3.3 and later. **License**: No additional license required. **Permissions**: Users who are not server administrators or site administrators can publish a flow only if the flow belongs to a project that they have permissions to publish to, have a site role that allows publishing and have write permissions on the flow if overwriting. **Access Scope**: `tableau:flows:create` - Scope added in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). You can publish a flow in a single request or in multiple parts. To publish a flow in a single request you include the content of the workbook file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. To publish a flow in multiple parts, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload), and then commit the upload by calling Publish Flow. In this case, Publish Flow doesn't contain the file to publish but the `uploadSessionId` and the `flowType` parameters are required. #### URI POST /api/api-version/sites/site-id/flows POST /api/api-version/sites/site-id/flows?overwrite=overwrite-flag POST /api/api-version/sites/site-id/flows?overwrite=overwrite-flag&uploadSessionId=upload-session-id&flowType=flow-file-type #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to publish to.
overwrite-flag(Optional) true to overwrite a flow that has the same name, or false to fail if the specified flow already exists. The default is false. If overwrite-flag is set to true but the flow doesn't already exist, the operation succeeds.
upload-session-idIf you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
flow-file-typetfl or tflx to indicate whether you have uploaded a flow file (tfl) or a packaged flow file (tflx). This value is only necessary and required if you upload a file in multiple parts. In the Publish Flow call after completing file upload, specify the file type.
#### Publishing a file in the Request Body ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_flow"; filename="flow-file-name" Content-Type: application/octet-stream content-of-flow-file --boundary-string-- ``` #### Attribute Values
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

name The name to assign to the flow when it is saved on the server.
description The description of the flow.
server-address Specify the server address for an input connections.
port-number Specify the port number for input connections.
connection-username (Optional) If the flow input connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection username. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

connection-password (Optional) If the flow input connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection password. If the element is included but is not required, the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

embed-flag (Optional) If the flow input connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials.
oauth-flag

(Optional) If the flow input connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the connectionCredentials element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the data source.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

project-id The ID of the project to assign the flow to.
content-of-flow-file The file itself if you are including it in the request body.
#### Response Code 201 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Malformed request bodyThe XML content in the MIME multipart request is not empty.
400400089Missing flow nameFlow name is required and was not specified.
403403007Invalid permissionsThe caller does not have the necessary permissions to publish the flow. 
400400090Missing flow payloadThe flow information (the structure containing the flow description, flow project) was not included in the request body.
400400086Invalid flow attachmentThe name of the flow doesn't end in .tfl or .tflx.
400400087Generic flow publishing errorThe flow could not be published for some other reason than those specified earlier.
409409041Flow already found in destinationThe flow name should be unique, or the overwrite flag parameter should be set to true.
403403008Insufficient storage quotaThe flow could not be published because there is not enough storage remaining on the server to accommodate its size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Virtual Connection Publishes a virtual connection on the specified site, either from a packaged virtual connection file (`.tvcx`) or from a downloaded JSON representation. If the virtual connection does not exist, it is published as a new virtual connection. If it already exists and you choose to overwrite it, the virtual connection is published as a revision of the existing virtual connection. You can publish in either of these ways: - **`.tvcx` file**. Send a packaged virtual connection file, as returned by [Download Virtual Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection). A `.tvcx` file can include extracts. - **JSON representation**. Send the virtual connection schema, as returned by [Download Virtual Connection as JSON](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json), inline in the request body. **Version**: Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. Support for publishing a `.tvcx` file added in API 3.30. **License**: Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions**: You must have the Overwrite permission for the virtual connection and your site role must be at least Creator, or you must be a Tableau administrator. **Access Scope**: `tableau:virtual_connections:create`. Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). To publish a `.tvcx` file, you can call this method in two ways. You can publish a virtual connection in a single request. To do that, you include the content of the `.tvcx` file in the body of the request. The maximum size of a file that can be published in a single request is about 64 MB. Alternatively, you can publish a `.tvcx` file in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload), and then commit the upload by calling Publish Virtual Connection. In this case, Publish Virtual Connection doesn't contain the file to publish. We recommend this approach for files larger than about 64 MB, such as files that include large extracts. **Virtual connections with extracts** A `.tvcx` file for a virtual connection that uses extracts contains the Hyper extract files, in addition to the virtual connection schema. A `.tvcx` file for a live virtual connection contains only the schema. This method accepts both kinds of file. **Draft or active** When you publish a JSON representation, the virtual connection can be published as a draft or as an active virtual connection, as set by the `publishAsDraft` parameter. A virtual connection that you publish from a `.tvcx` file is always published as an active virtual connection, whether or not the file includes extracts. The `publishAsDraft` parameter does not apply to a `.tvcx` file. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-id/virtualconnections POST /api/api-version/sites/site-id/virtualconnections?publishAsDraft=publish-as-draft-flag POST /api/api-version/sites/site-id/virtualconnections?overwrite=overwrite-flag POST /api/api-version/sites/site-id/virtualconnections?uploadSessionId=upload-session-id&overwrite=overwrite-flag #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The LUID of the site to publish to.
publish-as-draft-flag (Optional) true to publish the virtual connection as a draft, or false to publish it as an active virtual connection. The default is true. This parameter applies only when you publish a JSON representation. The parameter is case sensitive.

If the virtual connection contains an extract, the publishAsDraft parameter value is ignored and the virtual connection is published as a draft.

Note: If you are using the REST API to publish a virtual connection as a draft, note the virtual connection's LUID (virtualconnection id) in the response body. Use that LUID to build a URL to further edit, create extracts for, or publish the virtual connection using the virtual connection editor in the regular web interface. For more information, see "Draft in Progress" in the Tableau Cloud Product Help and Tableau Server Product Help.

overwrite-flag true to overwrite a virtual connection that has the same name in the target project, or false to fail if the specified virtual connection already exists. The default is false. If overwrite-flag is set to true but the virtual connection doesn't already exist, the operation succeeds.
upload-session-id (Optional, .tvcx files only) If you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
#### Request Body The request body depends on whether you publish a `.tvcx` file or a JSON representation. **Publishing a .tvcx file** The content type in the header of requests to publish a `.tvcx` file must use the mixed multipart content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. The server uses this content type to tell a `.tvcx` request from a JSON request. A request with any other content type, such as `application/octet-stream` or `multipart/form-data`, is handled as a request to publish a JSON representation and fails. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_virtual_connection"; filename="virtualconnection-name.tvcx" Content-Type: application/octet-stream content-of-virtualconnection-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` **Publishing a JSON representation** ``` virtualconnection-as-json ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "owner": { "id": "owner-id" }, "content": "virtualconnection-as-json", "name": "virtualconnection-name" } } ``` #### Request Attributes **For a .tvcx file**
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

virtualconnection-name (Required) The name to assign to the virtual connection when it is saved on the server. This is typically derived from the file name.
project-id (Optional) The LUID of the project to publish to. If you omit it, the virtual connection is published to the default project.
owner-id (Optional) The LUID of the owner of the virtual connection. If you omit it, the authenticated user becomes the owner.
tableau_virtual_connection file part The .tvcx file. Include it when you publish in a single request. Omit it when you commit a file that was uploaded in parts. If you include both a file part and the uploadSessionId parameter, or if you include neither, the request fails.
**For a JSON representation**
virtualconnection-name The name of the virtual connection you are publishing. If publishing an existing virtual connection as a revision, the virtual connection name is ignored.
project-id The LUID of the project you are publishing to.
owner-id This attribute is required, but is ignored.
virtualconnection-as-json

The virtual connection schema rendered as JSON, as obtained using the Download Virtual Connection as JSON or Download Virtual Connection Revision as JSON method. The schema appears in the content element (for XML output) or content property (for JSON output).

Note: Changing the downloaded schema and then using it with this method isn't supported.

When using the Publish Virtual Connection method, we recommend using the virtual connection schema format that matches the format you used for downloading it. This is important because the virtual connection schema returned by the download methods has escape characters in it if the output was JSON. If you download and publish using different formats, you will have to make changes to the JSON representation of the virtual connection.

In other words:

  • If the output of the Download Virtual Connection as JSON method was XML (except for the content element, which is always a form of JSON), use XML when using this Publish Virtual Connection method.
  • If the output of the Download Virtual Connection as JSON method was JSON (in which case it will have escape characters in the content property), use JSON when using this Publish Virtual Connection method.
  • Alternatively, you can escape or unescape the schema yourself if you are downloading and publishing using different formats.

For more information on the difference between using XML and using JSON with the REST API, see Fundamentals of the Tableau Server REST API.

#### cURL Example **Publishing a .tvcx file** `curl "http://MY_SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections?overwrite=false" -X POST -H "X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3" -H "Content-Type: multipart/mixed; boundary=----TabBoundary" --data-binary @publish-vconn-request.txt` The file `publish-vconn-request.txt` contains the multipart request body shown above in **Publishing a file in the request body**. **Publishing a JSON representation** `curl --location 'http://MY_SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections?overwrite=true&publishAsDraft=false' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data @data.xml` **Content of data.xml**: ``` virtualconnection-as-json ``` Replace virtualconnection-as-json in this example with the virtual connection schema you downloaded using the [Download Virtual Connection as JSON](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json) method. #### Response Code 201 #### Response Body The response is the same whether you publish a JSON representation or a `.tvcx` file. ``` ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "id": "virtualconnection-id", "name": "virtualconnection-name" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request

When you publish a .tvcx file, the request is not valid for one of these reasons:

  • The request does not include request_payload or the virtualConnection element.
  • The virtualConnection element does not include a name.
  • The request includes both the .tvcx file and uploadSessionId, or it includes neither. Include only one.
  • The file for the uploadSessionId is no longer available.
  • The .tvcx file is not valid.
  • The virtual connection could not be published with the extract in the .tvcx file.
400 400201 Publish virtual connection error The virtual connection could not be published. This includes content that is not valid virtual connection JSON, or a .tvcx file or its contents that could not be read.
403 403008 Insufficient site storage The content would exceed the site's storage quota. Applies when publishing a .tvcx file.
403 403175 Publish virtual connection forbidden The user does not have permission to publish the virtual connection.
404 404015 File upload not found The uploadSessionId does not match an upload owned by the user. Applies when publishing a .tvcx file.
404 404049 Virtual connection not found The virtual connection could not be found while publishing it with the extract in the .tvcx file.
405 405000 Invalid request method Request type was not POST.
409 409123 Virtual connection exists A virtual connection with the same name already exists in the project and overwrite is false. Applies when publishing a .tvcx file.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Work Copy Publishes a work copy as a data source. Send the published data source `name` and an optional `description`. The response returns the new data source LUID. A blank name is rejected. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:datasources:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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/tds/sites/site-luid/workcopy/workcopy-luid/publish #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Request Body ``` ``` ``` { "datasource": { "name": "Quarterly Sales", "description": "Quarterly sales rollup." } } ``` #### Attribute Values
datasourceRequired. Published data source name and optional description. Other data source fields are not read by this method.
datasource.nameRequired. Name of the data source to publish. A null, empty, or whitespace-only value is HTTP 400 with error code 400008.
datasource.descriptionOptional. Description of the published data source. May be null, empty, or whitespace.
#### Response Code 201 Created #### Response Body Returns the published data source's identifiers in `tdsWorkCopy`. The response includes `datasourceLuid` but not `workCopyLuid`. ``` a1b2c3d4-e5f6-4321-8765-1234567890ab ``` ``` { "tdsWorkCopy": { "datasourceLuid": "a1b2c3d4-e5f6-4321-8765-1234567890ab" } } ``` #### Attribute Values
tdsWorkCopyRequired. Work copy and published data source identifiers.
tdsWorkCopy.workCopyLuidOptional. LUID of the work copy. Not returned by this method; returned by Create Work Copy.
tdsWorkCopy.datasourceLuidLUID of the newly published data source.
#### Errors
HTTP statuserror CodeConditionDetails
400400008Datasource name missingThe published data source name is missing or blank.
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
404Work copy not found or not visible to the callerThe work copy LUID in the URI doesn't correspond to an existing work copy, or the caller doesn't have permission to access it.
405405000Method not allowedThe HTTP method is not supported for this resource.
429429000Rate limit exceededToo many requests sent in a given time period.
500Unknown errorThere was an internal server error.
503Service unavailableService unavailable.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Workbook Publishes a workbook on the specified site. To make changes to a published workbook, call [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook) or [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection). **Version**: Available in API 2.0 and later. **License**: No additional license required. **Permissions**: Users who are not server administrators or site administrators can publish a workbook only if the workbook belongs to a project that they have permissions to publish to. **Access Scope**: `tableau:workbooks:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This method is used in two ways. You can call it to publish a workbook in a single request. To do that, you include the content of the workbook file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. If you want to avoid having the publishing process time out, you can use the _asJob_ parameter to make workbook publication asynchronous. Alternatively, you can publish a workbook in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload), and then commit the upload by calling Publish Workbook. In this case, Publish Workbook doesn't contain the file to publish. **Hiding views in a published workbook** To exclude certain sheets (also known as views) when you publish a workbook, configure them in the request as `hidden`. You cannot publish a workbook if all sheets are hidden. **Extracts with multiple table options** If an extract was stored using the multiple tables option, you can't append data to it. **Workbooks that rely on external local resources** When you publish a workbook from your local computer to the server, the publish process will fail if the workbook relies on resources (such as an Excel file or other data file) that are on your local computer but are not available on the server. (Unlike the publish process that is used in Tableau Desktop, the REST API publish process cannot automatically include extracts or other resources that the workbook uses.) If you are publishing a workbook that gets its data from a source on your computer, save the workbook as a packaged workbook (`.twbx` file) and publish the package so that workbook has all the resources it needs on the server. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-id/workbooks POST /api/api-version/sites/site-id/workbooks?overwrite=overwrite-flag POST /api/api-version/sites/site-id/workbooks?skipConnectionCheck=skip-connection-check-flag POST /api/api-version/sites/site-id/workbooks?uploadSessionId=upload-session-id&workbookType=workbook-file-type&overwrite=bool&asJob=asJob-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to publish to.
overwrite-flag(Optional) true to overwrite a workbook that has the same name, or false to fail if the specified workbook already exists. The default is false. If overwrite-flag is set to true but the workbook doesn't already exist, the operation succeeds.
asJob-value(Optional, boolean) If false, the workbook publishing process runs as a synchronous process. If a workbook is very large, the process might time out before it finishes. If you set this value to true, the process runs asynchronously, and a job will start to perform the publishing process and return the job ID. You can check the status of the import job by calling Query Job. Default value is false.
skip-connection-check-flag(Optional, boolean) If true, then the Tableau server will not check if a non-published connection of a workbook is reachable. Publishing will succeed but unchecked connection issues may result in a non-functioning workbook. If you encounter this issue, follow Keep Data Fresh guidelines. Default value is false.
upload-session-idIf you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
workbook-file-typetwb or twbx to indicate whether you have uploaded a workbook file (twb) or a packaged workbook file (twbx). This value is required if you are calling Publish Workbook in order to commit a file that was previously uploaded using Append to File Upload. The value is not used if you upload a file in the body of the request.
#### Request Body The content type in the header of requests to publish a workbook must use the mixed multi-part content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_workbook"; filename="workbook-file-name" Content-Type: application/octet-stream content-of-workbook-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` **Hiding a view when publishing a workbook** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` #### Attribute Values
boundary-string A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

workbook-name The name to assign to the workbook when it is saved on the server.
workbook-description (Optional) Starting in API 3.20, the description for the workbook.
show-tabs-flag (Optional) Specify true to have the published workbook show views in tabs; otherwise, false. The default is false.
user-luid (Optional) The LUID of the user to generate thumbnails as. You can get the user LUID by calling Get Users on Site.
server-address (Optional) Specify the server address for a data source connection if that data source does not use OAuth.
port-number (Optional) Specify the port number for a data source connection if that data source does not use OAuth.
connection-username (Optional) If the workbook's data source connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection username. If the element is included but is not required (for example, if the data source uses OAuth), the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

Note: Even if credentials are embedded in a workbook, you must still provide credentials when connecting to a data source that requires credentials, unless that data source uses OAuth.

connection-password (Optional) If the workbook's data source connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection password. If the element is included but is not required (for example, if the data source uses OAuth), the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

Note: Even if credentials are embedded in a workbook, you must still provide credentials when connecting to a data source that requires credentials, unless that data source uses OAuth.

embed-flag (Optional) If the workbook's data source connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials for when the data source is used.
oauth-flag (Optional) If the workbook's data source connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the <connectionCredentials> element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the workbook, and the server address and port number are not required.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

hide-view-flag Setting this flag to true will cause the named view to be hidden in the published workbook. The default value is false. You can specify any number of views to hide. If all views in a workbook are hidden the server will not perform a publish.
project-id The ID of the project to assign the workbook to. If the project is not specified, the workbook will be published to the default project.
workbook-file-name The file name (including extension) of the workbook file to upload. This attribute is used in the request body only if the request also includes the content of the workbook file; it is not used if you are committing a file uploaded using previous requests.
content-of-workbook-file The content of the workbook file, if the request includes the file. The maximum size of a file that can be uploaded in one call is 64 MB.
encryptExtracts (Optional) true to encrypt the extracts or false to not encrypt extracts. For more information, see Extract and Encryption Methods.
#### Response Code 201 #### Response Body ``` ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### cURL Request Example ``` curl "http://MY_SERVER/api/3.4/sites/ff2a8360-3c2b-4b05-a793-7607c602e1fb/workbooks" -X POST -H "X-Tableau-Auth:7T_33sOfS8Ks_0cht4tYxw|8tsTYQyyOZXfOgxZEHWQ4jUTCQ08GhRr" -H "Content-Type: multipart/mixed;" -F "request_payload=@publish-workbook.xml" -F "tableau_workbook=@MY_WORKBOOK.twbx" ``` **Content of publish-workbook.xml** (publish the Test1 workbook, hide the Test Sheet 1 view): ``` ``` **Example response:** ``` ``` #### Response Headers Location: /api/3.29/sites/site-id/workbooks/workbook-id #### Errors
HTTP statuserror CodeConditionDetails
400400000Malformed request bodyThe XML content in the MIME multipart request is not empty.
400400000Missing workbookThere is no attachment in the request and no uploadSessionID parameter.
400400000Unexpected attachmentsThe message had both an uploadSessionId parameter and an attachment, or the request body contained more than one attachment.
400400008Invalid embed valueThe request body contains a <connectionCredentials> element and it has an embed attribute whose value is not true or false.
400400008Invalid overwrite valueThe overwrite parameter must be true or false.
400400011Publishing errorThe workbook could not be published for some other reason than those specified earlier.
400400020Invalid workbook file nameThe name of the workbook doesn't end in .twb or .twbx.
400400035Missing or invalid file typeThe request included an uploadSessionId parameter but no file type, or the file type was something other than .twb or .twbx.
403403007Insufficient publishing permissionA non-administrator user attempted to publish a workbook, but the caller doesn't have sufficient project permissions.
403403007Unlicensed publishing forbiddenA non-administrator user attempted to publish a workbook. This is disallowed for all projects (including the default project).
403403007Overwrite forbiddenA workbook with the specified name already exists and the overwrite parameter was not set to true.
403403007Problem connecting to data sourceThere was a problem connecting to a data source used by the workbook. This can be due to missing or invalid connection credentials or because the referenced data source is not available on the server.
403403008Insufficient storage quotaThe workbook could not be published because there is not enough storage remaining on the server to accommodate its size.
403403130Publishing overwriteA workbook with the same name already exists.
403403131Concurrent updateThe workbook is already being published in another process.
403403132Failed connection checkOne or more data sources used by the workbook could not be reached.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404006Workbook not foundThe user specified overwrite as true but no workbook with the specified name exists on the site.
404404015File upload not foundThe file upload session ID in the uploadSessionId parameter doesn't correspond to an existing file upload on the site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query All Quality Warning Triggers by Content Get information about all quality warning triggers for a content item. #### URI GET api/_api-version_/sites/_site-id_/dataQualityTriggers/content-type/_content-luid_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content that the quality warning trigger has been applied to. To specify the type, use one of the following values:

  • datasource
  • flow

These values are not case sensitive.

content-luid The unique ID of the asset. This is the same as the content ID.
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query quality warning triggers: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400134Generic quality warning trigger errorThe quality warning triggers could not be queried for some other reason than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404037Quality warning not foundThe requested quality warning trigger was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Query Column in a Table Get information about a column in a table asset. #### URI GET api/_api-version_/sites/_site-id_/tables/_table-id_/columns/_column-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
column-idThe unique ID of the column asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query a column asset in a table: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:columns: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
409409059Unknown column errorAn unknown column asset error occurred.
409409060Unknown column query errorAn unknown error occurred and the column query could not complete.
409409066Column not foundThe requested column asset could not be found.
## Query Columns in a Table Get information about the columns in a table asset. #### URI GET api/_api-version_/sites/_site-id_/tables/_table-id_/columns #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query column assets in a table: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:columns: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
409409059Unknown column errorAn unknown column asset error occurred.
409409060Unknown column query errorAn unknown error occurred and the column query could not complete.
409409066Column not foundThe requested column assets could not be found.
## Query Data Quality Certification by ID Get information about a data quality certification. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Get Label](#get_label) method instead. #### URI GET api/_api-version_/sites/_site-id_/dataQualityCertifications/_certification-luid_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
certification-luidThe unique ID of the data quality certification.
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query a data quality certification: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` id="d5a4006c-0276-4c5a-bb98-712815c91ce7" userDisplayName="Mark Nguyen" contentId="a34884d0-1d80-4505-bf21-c6b7ce10814a" contentType="DATASOURCE" message="Marketing approved" type="CERTIFIED" active="true" createdAt="2021-06-08T17:22:20Z" updatedAt="2021-09-08T17:27:57Z" severe="false"/> siteID="284e2a17-65c8-47bf-b88f-ff96d69c2303" ownerID="f95180e7-0c64-4a58-86da-b9f4d3db2583" ``` #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400103Generic data quality certification errorThe data quality certification could not be queried for some reason other than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404030Data quality indicator not foundThe requested data quality certification was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Query Data Quality Certifications by Content Get all data quality certifications for content or asset items. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Get Labels](#get_labels_on_assets) method instead. #### URI GET api/_api-version_/sites/_site-id_/dataQualityCertifications/_content-type_/_content-luid_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content the data quality certification has been applied to. To specify the type, use one of the following values:

  • database
  • table
  • datasource
  • virtualconnection
  • virtualconnectiontable

These values are not case sensitive.

content-luid The LUID of the content (database, table, published data source, flow, virtual connection, or virtual connection table).
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query data quality certifications: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` id="d5a4006c-0276-4c5a-bb98-712815c91ce7" userDisplayName="Mark Nguyen" contentId="a34884d0-1d80-4505-bf21-c6b7ce10814a" contentType="DATASOURCE" message="Marketing approved" type="CERTIFIED" active="true" createdAt="2021-06-08T17:22:20Z" updatedAt="2021-09-08T17:27:57Z" severe="false"/> siteID="284e2a17-65c8-47bf-b88f-ff96d69c2303" ownerID="f95180e7-0c64-4a58-86da-b9f4d3db2583" ``` #### Version Version 3.13 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400104Generic data quality certification errorThe data quality certification could not be queried for some reason other than those specified in this table.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404029Data quality indicator not foundThe requested data quality certification was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Query Data Quality Warning by Content Get information about the data quality warning for the database, table, column, published data source, flow, virtual connection, or virtual connection table. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Get Labels](#get_labels_on_assets) method instead. #### URI GET api/_api-version_/sites/_site-id_/dataQualityWarnings/_content-type_/_content-luid_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type The type of asset that the data quality warning is being attached to. To specify the type, use one of the following values:
  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable

These values are not case sensitive.

content-luid The LUID of the content (database, table, column, published data source, flow, virtual connection, or virtual connection table).
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400104Unknown data quality warning query errorAn unknown error occurred and the data quality warning query could not complete.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Query Data Quality Warning by ID Get information about a specific data quality warning. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Get Label](#get_label) method instead. #### URI GET api/_api-version_/sites/_site-id_/dataQualityWarnings/_dataqualitywarning-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
dataqualitywarning-idThe unique ID of the data quality warning.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400103Unknown data quality warning query errorAn unknown error occurred and the data quality warning query could not complete.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Query Data Source Returns information about the specified data source. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe site that contains the data source.
datasource-idThe ID of the data source to get.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can view a data source only if they have Connect permission for the data source (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` ... additional tags ... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA non-administrator user attempted to query a data source, but the caller doesn't have Connect permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` useRemoteQueryAgent="false" webpageUrl="https://MYSERVER/#/datasources/4414" ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. ## Query Data Source Connections Returns a list of data connections for the specified data source. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/connections #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to return connection information about.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can query a data source only if they have Read (view) permission for the data source (either explicitly or implicitly). `queryTaggingEnabled` is returned only for administrator users. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` HTTP statuserror CodeConditionDetails403403021Read forbiddenA user who is not a server administrator user attempted to query the data source connections, but the caller doesn't have Read permission.404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.404404011Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.405405000Invalid request methodRequest type was not GET. For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/datasources/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. ## Query Data Sources Returns a list of published data sources on the specified site, with optional parameters for specifying the paging of large results. To get a list of data sources embedded in a workbook, use the [Query Workbook Connections](#query_workbook_connections) method. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version**: Available in API 1.0 and later. **License**: No additional license required. **Permissions**: Tableau Server users who are not server administrators or site administrators can view a data source only if they have Connect permissions for the data source (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/datasources GET /api/api-version/sites/site-id/datasources?pageSize\=page-size&pageNumber\=page-number GET /api/api-version/sites/site-id/datasources?filter=filter-expression GET /api/api-version/sites/site-id/datasources?sort=sort-expression GET /api/api-version/sites/site-id/datasources?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data sources.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) An expression that lets you specify a subset of data sources to return. You can filter on predefined fields such as name and updatedAt. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the data sources or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the Rest API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand (**`&`**). #### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "pageNumber", "pageSize": "page-size", "totalAvailable": "total-available" }, "datasources": { "datasource": [ { "id": "datasource1-id", "description": "data-source-description", "name": "datasource-name", "size": "datasource-size", "type": "datasource-type", "contentUrl": "datasource-content-url", "createdAt": "datetime-created", "updatedAt": "datetime-updated", "encryptExtracts": "encrypt-extracts-flag", "hasExtracts": "has-extracts-flag", "isCertified": "is-certified-flag", "useRemoteQueryAgent": "use-remote-query-agent-flag", "webpageUrl": "datasource-webpage-url", "project": { "id": "project-id", "name": "project-name" }, "owner": { "id": "datasource-owner-id" }, "tags": [ { "label": "tag" } ] } ] } } ``` #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/datasources" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` **Example response:** ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Database Get information about a database asset. #### URI GET api/_api-version_/sites/_site-luid_/databases/_database-luid_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query a database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:databases: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 **Example response:** ``` ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409046Unknown database query errorAn unknown error occurred and the database query could not complete.
## Query Databases Get information about all database assets for a site. #### URI GET api/_api-version_/sites/_site-luid_/databases #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query database assets: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:databases: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 **Example response:** ``` ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested databases could not be found.
409409045Database errorAn unknown database asset error occurred.
409409046Unknown database query errorAn unknown error occurred and the database query could not complete.
## Query Flow Returns information about the specified flow, including information about the project, owner, and output steps. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/flows/flow-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to return information about.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can query a flow only if they have Read(view) permission for the flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 ``` ...additional output steps... ...additional parameters... ``` **Note:** Parameters is only shown in the response if parameters are enabled on the site and the flow contains parameters. #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA non-administrator user attempted to query the flow, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not GET.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/flows/ d00700fe-28a0-4ece-a7af-5543ddf38a82" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Flow Connections Returns a list of data connections for the specific flow. #### URI GET /api/api-version/sites/site-id/flows/flow-id/connections #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to return connection information about.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can query a flow only if they have Read(view) permission for the flow (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_connections: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 ``` ... additional connections ... ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403092Read forbiddenA user who is not a server administrator user attempted to query the flow connections, but the caller doesn't have Readpermission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/flows/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Flows for a Site Returns the flows on a site. If the user is not an administrator, the method returns just the flows that the user has permissions to view. #### URI GET /api/api-version/sites/site-id/flows GET /api/api-version/sites/site-id/flows?filter=filter-expression GET /api/api-version/sites/site-id/flows?sort=sort-expression GET /api/api-version/sites/site-id/flows?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flows.
filter-expression(Optional) An expression that lets you specify a subset of flows to return. You can filter on predefined fields such as name, tags, and createdAt. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which flow information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters using an ampersand (**`&`**). #### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can get flows that they have Read (view) permissions for (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 ``` ... additional flows ... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403101Read forbiddenA non-administrator user attempted to query flows for the site, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/9954070a-581d-40fa-ae73-e815ce8b0562/flows" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ## Query Flows for User Returns the flows that the specified user owns in addition to those that the user has Read (view) permissions for. **Note:** After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/users/user-id/flows GET /api/api-version/sites/site-id/users/user-id/flows?ownedBy=isOwner&pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to get flows for.
isOwner(Optional) trueto return only flows that the specified user owns, or falseto return all flows that the specified user has at least read access to. The default is false.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions All users can call this method, but the results of the call depend on the user's permissions. Server and site administrators see all flows for the specified user. If the isOwnerparameter is true, users who are not server or site administrators see the flows that they own on the site. If isOwnerparameter is false, users who are not server administrators see the flows that they have Read (view) permissions for. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 ``` ... additional flows... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for flows at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size exceeds upper limitThe page size parameter exceeds the system-wide upper limit of 1000.
403403101Read forbiddenA non-administrator user attempted to query flows for the user, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/flows" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Groups Returns a list of groups on the specified site, with optional parameters for specifying the paging of large results. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/groups GET /api/api-version/sites/site-id/groups?pageSize\=page-size&pageNumber\=page-number GET /api/api-version/sites/site-id/groups?filter=filter-expression GET /api/api-version/sites/site-id/groups?sort=sort-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the groups.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) An expression that lets you specify a subset of groups to return. You can filter on predefined fields such as name. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 ``` ... additional groups ... ``` Notes: - If the group was imported from Active Directory, the name attribute of the element contains the group's Active Directory domain. For a group that uses local authentication, the value of that attribute is `local`. - The response body for a local group that has enabled onLogin for its grant license mode will have an import element with a domain name of `local`. Local groups with grant license mode unset, have no import element in their response. - Starting in July 2026 (version 3.29), the externalUserEnabled attribute (Tableau Cloud only) is omitted from the element in the response if the site isn't licensed for on-demand access. #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/groups/" -X GET -H "X-Tableau-Auth:e35Z608JMPHgZfVyJncnedlUeXSX8bmb"` **Example response:** ``` ``` ## Query Job Returns status information about an asynchronous process that is tracked using a job. This method can be used to query jobs that are used to do the following: - Import users from Active Directory (the result of a call to [Create Group](#create_group)). - Synchronize an existing Tableau Server group with Active Directory (the result of a call to [Update Group](#update_group)). - Run extract refresh tasks (the result of a call to [Run Extract Refresh Task](#run_extract_refresh_task)). - Publish a workbook asynchronously (the result of a call to [Publish Workbook](#publish_workbook)). - Run workbook or view subscriptions (the result of a call to [Create Subscription](#create_subscription) or [Update Subscription](#update_subscription)) - Run a flow task (the result of a call to [Run Flow Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#RunFlowTask)) - Status of Tableau Server site deletion (the result of a call to asynchronous [Delete Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#async) beginning API 3.18) **Note:** To query a site deletion job, the server administrator must be first signed into the default site (`contentUrl=" "`). **Version**: Available in API 2.0 and later. **License**: No additional license required. **Permissions**: This method can only be called by server administrators and site administrators. **Access Scope**: `tableau:jobs:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/jobs/job-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site where the job is running.
job-idThe ID of the job to get status information for.
#### Request Body None #### Response Code 200 #### Response Body ``` ... view, workbook, or datasource id and name ... ... additional job notes ... ``` The createdAt, updatedAt, and CompletedAt values are dates and times in UTC format (YYYY-MM-DDTHH:MM:SSZ). The finishCode indicates the status of the job. - For most jobs, the `finishCode` indicates the status of the job: `0` for success, `1` for error, or `2` for canceled. - For bridge extract refresh jobs, a `finishCode` of `0` indicates that the bridge client is assigned to execute the job, while a `3` indicates that the job completed. - For [asynchronous workbook publishing](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm#async) jobs, progress will switch from `0` when the job is in-progress to `100` when it is complete. `finishCode` will switch from `1` when the job is in-progress to `0` when it is complete, and no `statusNotes` elements are provided. The statusNotes element contains one or more notes that provide details about the status of a job in a format that can be used for logging, auditing, and error recovery. Each status note contains three attributes: - type. An enumerated value (a string) that indicates the classification of the note. - value. A value that indicates the number of records reported by the current status, such as the count of records processed. - text. A description of the status that can be displayed to users. If you are working with a localized (translated) version of Tableau Server, this text is also localized. You should not rely on this text for any application logic. If you need to take action based on a specific status, test the value of the type attribute. The following table lists job status types. Some values are returned only when the job is synchronizing groups (Update Group).
TypeValueText
CountOfUsersAddedToGroupIntegerDescription of how many users were added to the group during the import.
CountOfUsersAddedToSiteIntegerDescription of how many users were added to the site during the import.
CountOfUsersWithInsufficientLicensesIntegerDescription of how many users could not have their site role updated due to server lacking sufficient licenses for them.
CountOfUsersInActiveDirectoryGroupIntegerDescription of the total number of users in the Active Directory group being imported or synchronized
CountOfUsersProcessedIntegerDescription of the total number of users processed during the import or synchronization process.
CountOfUsersSkippedIntegerDescription of the total number of users skipped during the import or synchronization process
CountOfUsersInformationUpdatedIntegerDescription of the total number of users whose information was updated during the import or synchronization process.
CountOfUsersSiteRoleUpdatedIntegerDescription of the total number of users whose site role was updated during the import or synchronization process.
CountOfUsersRemovedFromGroupInteger(Synchronization process only) Description of the number of users removed from the group during the synchronization process.
CountOfUsersUnlicensedInteger(Synchronization process only) Description of the number of users who were unlicensed during the synchronization process.
SiteDeleteIntegerDescription of the site deletion progress. Can include a general error or errorCode=9 when a site can't be deleted.
#### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404018Job not foundThe job ID in the URI doesn't correspond to an existing job.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Jobs Returns a list of active jobs on the specified site. To get details on a specific job, pass a job ID returned by this method to the [Query Job](#query_job) method. To cancel an active job, pass a job ID returned by this method to the [Cancel Job](#cancel_job) method. Calls to this method can be filtered, as shown in the URI examples shown below. To learn more about filtering, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm). **Version**: Available in API 3.1 and later. **License**: No additional license required. **Permissions**: This method can only be called by server administrators and site administrators. **Access Scope**: `tableau:jobs:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/_api-version_/sites/_site-id_/jobs GET /api/_api-version_/sites/_site-id_/jobs?filter=progress:lte:0 GET /api/_api-version_/sites/_site-id_/jobs?filter=jobType:eq:refresh\_extracts GET /api/_api-version_/sites/_site-id_/jobs?filter=createdAt:gt:2018-04-18T11:00:56z GET /api/_api-version_/sites/_site-id_/jobs?filter=title:has:Superstore GET /api/_api-version_/sites/_site-id_/jobs?filter=notes:has:nightly GET /api/_api-version_/sites/_site-id_/jobs?filter=jobType:eq:run\_flow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site where the job is running.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/jobs" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Projects Returns a list of projects on the specified site, with optional parameters for specifying the paging of large results. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/projects GET /api/api-version/sites/site-id/projects?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/projects?filter=filter-expression GET /api/api-version/sites/site-id/projects?sort=sort-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the projects.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) An expression that lets you specify a subset of data sources to return. You can filter on predefined fields such as name, ownerName, and parentProjectId. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can call this method only if they have Read (view) permission for the project (either implicitly or explicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` ... additional attributes and projects ... ``` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example: Filter query by project ID `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects?filter=parentProjectId:eq:711d4c5d-60b7-4f77-a9a6-bbf05021b6ec" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` #### Example: Show all fields in the first ten query results `curl "https://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects?pageSize=10&fields=_all_" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Quality Warning Trigger Get information about a quality warning trigger. #### URI GET api/_api-version_/sites/_site-id_/dataQualityTriggers/_trigger-id_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The unique ID of the site asset.
content-type

The type of content the quality warning trigger has been applied to. To specify the type, use on of the following values:

  • datasource
  • flow

These values are not case sensitive.

trigger-id The unique ID of the quality warning trigger.
#### Request body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query a quality warning trigger: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400134Generic quality warning trigger errorThe quality warning trigger could not be queried for some reason other than those specified below.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404037Quality warning not foundThe requested quality warning trigger was not found.
409409004Invalid parameterOne or more values in the request body are invalid.
## Query Site Returns information about the specified site, with the option to return information about the storage space and user count for the site. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. You can specify the site to delete by using the site ID, the site name, or the content URL. You use the key query string parameter to indicate how you are specifying the site, as shown in the URIs. **Note**: You can only get site information for the site that you have signed in to. #### URI GET /api/api-version/sites/site-id GET /api/api-version/sites/site-name?key=name GET /api/api-version/sites/content-url?key=contentUrl GET /api/api-version/sites/site-id?includeUsage=include-usage-flag #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site to get information for.
site-name The name of the site to get information for. If you specify a site name, you must also include the parameter key=name.
content-url The URL of the site to get information for. If you specify a content URL, you must also include the parameter key=contentUrl.
include-usage-flag The boolean flag to include site usage metrics in the response body. If true, then the site element of the response will contain a usage node with the attributes numUsers (number of users) and storage (storage in megabytes).

To set the flag to include usage in the response, append includeUsage=true as a querystring element any valid query site URI.

#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:sites: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 ``` ``` Response Body Details: - userQuota, storageQuota, and tiered capacity (tierCreatorCapacity, tierExplorerCapacity, tierViewerCapacity) attributes are only present in the response body if those quotas have been set for the site being queried. - **attributeCaptureEnabled** attribute is present in the response body for Tableau Cloud starting from API version 3.19 (March 2023) and Tableau Server starting from API version 3.25 (Tableau Server 2025.1). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example **Command:** ``` curl "http://MY-SERVER/api/3.29/sites/1234abcd-12ab-12ab-12ab-1234abcd1234?includeUsage=true" -X GET \ -H "X-Tableau-Auth:ABCD1234abcdABCD|ABCD1234abcdABCDABCD1234abcd-1" ``` **Example response:** ``` ``` **Command:** ``` curl "http://MY-SERVER/api/3.29/sites/Default?key=name" -X GET \ -H "X-Tableau-Auth:ABCD1234abcdABCD|ABCD1234abcdABCDABCD1234abcd-1" ``` **Example response:** ``` userQuota="4" tierCreatorCapacity="2" tierExplorerCapacity="1" tierViewerCapacity="1" askDataMode="DisabledByDefault" useDefaultTimeZone="false" timeZone="America/Los_Angeles" /> ``` ## Query Sites Returns a list of the sites on the server that the caller of this method has access to. This method is not available for Tableau Cloud. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites GET /api/api-version/sites?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions This method can be called by all users. The method only returns the sites that the user has access to. #### Required scope for JWT authorization Introduced in Tableau Server 2022.3 (API 3.17). ``` tableau:sites: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 ``` ``` The response for users without administrative permissions contains only the site id, name, and content-url attributes. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe 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.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ``` curl "http://MY-SERVER/api/3.29/sites?pageSize=1&pageNumber=1" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` **Example response:** ``` ``` ## Query Table Get information about a table asset. #### URI GET api/_api-version_/sites/_site-id_/tables/_table-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query the table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tables: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table could not be found.
409409052Unknown table errorAn unknown table asset error occurred.
409409053Unknown table query errorAn unknown error occurred and the table query could not complete.
## Query Tables Get information about all table assets for a site. #### URI GET api/_api-version_/sites/_site-id_/tables #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to query table assets: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have "derived permissions" (if enabled) or have been granted explicit "Read" (view) permissions to the asset Otherwise, authorized users who have "derived permissions" (if enabled), and Tableau Server admins or Tableau Cloud site admins. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tables: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 **Example response:** ```
``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested tables could not be found.
409409052Unknown table errorAn unknown table asset error occurred.
409409053Unknown table query errorAn unknown error occurred and the table query could not complete.
## Query User On Site Returns information about the specified user. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/users/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to get information for.
#### Request Body None #### Permissions Using this method server administrators and site administrators can view user information directly or through the various ways that data is used throughout Tableau. Use of this method by non-administrator users to view their own information depends on the visibility settings of a site. Using the Visibility Setting in the server UI, or the [Create Site](#create_site) or [Update Site](#update_site) methods, you can change user visibility settings of a Site. For more information, see [Manage Site User Visibility](https://help.tableau.com/current/server/en-us/user_visibility.htm). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 ``` ``` **Notes:** - The lastLogin attribute value is returned as a date in UTC format (YYYY-MM-DDTHH:MM:SSZ). - The siteRole value is returned as one of the following values: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, ReadOnly, or Viewer. - The externalAuthUserId value represents an ID for the user for single sign-on (SSO) with an external identity provider. If the user is not configured to use external authentication, this value is an empty string. - In Tableau Server version 9.0.1 or API version 2.0.1 and later - if SAML is enabled, and the user was imported from Active Directory, the name attribute of the element contains the user's Active Directory domain. - Starting in API 3.24, **idpConfigurationId** indicates the authentication configuration assigned to the user in Tableau Cloud only. - Starting in API 3.26 (July 2025), email indicates an email address that is different from the username. #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
403403133Query user permissions forbiddenThe user does not have permissions to query user information for other users.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query View Data Returns a specified view rendered as data in comma separated value (CSV) format. **Version**: Available in API 2.8 and later. **License**: No additional license required. **Permissions**:Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). CSV data is provided in the response body, rather than as a download. If the request is for a dashboard, only data for the dashboard's first view is returned. If you make multiple requests for a view's data, subsequent calls return a cached version of the data. This means that the returned data might not include the latest changes to the view. To decrease the amount of time that an data is cached, use the maxAge parameter. Default age of data is 60 minutes. For Tableau Cloud, concurrent requests to endpoints that start long-running jobs, including this one, are limited to 20 at a time. A 429 HTML response means that a request exceeded the limit and should be retried at a later time. (introduced September 2021). Note the data exported is at a summary level only. Detail level data is only available as a download option in the user interface. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-id/views/view-id/data GET /api/api-version/sites/site-id/views/view-id/data?maxAge=max-age-minutes GET /api/api-version/sites/site-id/views/view-id/data?vf\_=_filter-value_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
view-idThe ID of the view to render as data.
max-age-minutes(Optional) The maximum number of minutes view data will be cached before being refreshed. To prevent multiple view data requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
filter-valueThe value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /data?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
#### Request Body None #### cURL Request `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/views/2474164d-8d37-4a4c-abc7-c2070fd25fd5/data?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body The response body contains view data in CSV format no more than 60 minutes old. ``` Month of Date,Year of Date,Above Median?,Avg. Median January,1893,below median,-1.0 January,1864,below median,-0.9 January,1861,below median,-0.9 December,1862,below median,-0.9 March,1917,below median,-0.8 December,1892,below median,-0.8 February,1862,below median,-0.8 February,1911,below median,-0.8 February,1917,below median,-0.8 May,1861,below median,-0.8 November,1862,below median,-0.8 March,1898,below median,-0.8 December,1860,below median,-0.8 January,1862,below median,-0.7 March,1850,below median,-0.7 February,1893,below median,-0.7 December,1870,below median,-0.7 ``` #### Errors
HTTP status error Code Condition Details
400 400080 Bad Request The view ID in the URI doesn't correspond to a view available on the specified site.
401 401002 Unauthorized The authentication token provided in the request header was invalid or has expired.
403 403032 Read forbidden A non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
405 405000 Invalid request method Request type was not GET.
429 429000 Concurrent request limit exceeded

For Tableau Cloud, the cumulative number of concurrent requests has exceeded the limit of 20. This limit applies to long-running jobs such as exports and downloads for view data, images, .pdf or .pptx files, datasources, and crosstabs, Retry this request at a later time.

Introduced September 2021.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query View Image Downloads an image file of the specified view. **Version**: Available in API 2.5 and later. **License**: No additional license required. **Permissions**: Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). If you make multiple requests for an image, subsequent calls return a cached version of the image. This means that the returned image might not include the latest changes to the view. To decrease the amount of time that an image is cached, use the maxAge parameter. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). **Note**: If you want to disable this endpoint, use TSM to set the `sheet_image.enabled` setting to false. For more information, see [tsm configuration set options](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm) in the Tableau Server help. #### URI GET /api/api-version/sites/site-id/views/view-id/image GET /api/api-version/sites/site-id/views/view-id/image?resolution=image-resolution GET /api/api-version/sites/site-id/views/view-id/image?maxAge=max-age-minutes GET /api/api-version/sites/site-id/views/view-id/image?vf\_=_filter-value_ Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later: GET /api/api-version/sites/site-id/views/view-id/image?resolution=image-resolution GET /api/api-version/sites/site-id/views/view-id/image?vizHeight=viz-height&vizWidth=viz-width Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2 and later: GET /api/api-version/sites/site-id/views/view-id/image?format=image-format #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the view.
view-id The ID of the view to return an image for.
viz-height

Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later: 

(Optional) The height of the rendered pdf image in pixels that, along with the value of vizWidth determine its resolution and aspect ratio.

viz-width

Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later:

(Optional) The width of the rendered pdf image in pixels that, along with the value of vizHeight determine its resolution and aspect ratio.

image-resolution (Optional) The resolution of the image. Image width and actual pixel density are determined by the display context of the image. Aspect ratio is always preserved. Set the value to high to ensure maximum pixel density.
max-age-minutes (Optional) The maximum number of minutes a view image will be cached before being refreshed. To prevent multiple image requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
filter-value The value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /data?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
image-format (Optional) The format of the returned image. Valid values are png (default) or svg. Available in API 3.29 and later.
#### Request Body None #### Response Code 200 #### Response Body The response `Content-Type` header changes based on the `image-format` parameter: - Default/PNG: `image/png` - SVG: `image/svg+xml` #### cURL Request Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/image?resolution=high&maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` #### Errors
HTTP statuserror CodeConditionDetails
400400010Bad requestInvalid query parameter. For example, attempting to query 'jpg' image-format.
403403004Read forbiddenA non-administrator user attempted to query a view preview image, but the caller doesn't have Read permission.
403403068ForbiddenThe endpoint has been disabled on the server. To enable the endpoint, a server administrator must use tsm to configure the sheet_image.enabled setting. For more information, see tsm configuration set Options in the Tableau Server help.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view in the specified workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query View PDF Returns a specified view rendered as a .pdf file. **Version**: Available in API 2.8 and later. **License**: No additional license required. **Permissions**: Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). If you make multiple requests for a PDF, subsequent calls return a cached version of the file. This means that the returned PDF might not include the latest changes to the view. To decrease the amount of time that an PDF is cached, use the maxAge parameter. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-id/views/view-id/pdf GET /api/api-version/sites/site-id/views/view-id/pdf?vizHeight=viz-height&vizWidth=viz-width GET /api/api-version/sites/site-id/views/view-id/pdf?maxAge=max-age-minutes GET /api/api-version/sites/site-id/views/view-id/pdf?type=page-type&orientation=orientation GET /api/api-version/sites/site-id/views/view-id/pdf?vf\_=_filter-value_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the view.
view-id The ID of the view to render as a .pdf file.
filter-value The value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /data?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
viz-height (Optional) The height of the rendered pdf image in pixels that, along with the value of vizWidth, determines its resolution and aspect ratio.
viz-width (Optional) The width of the rendered pdf image in pixels that, along with the value of vizHeight, determines its resolution and aspect ratio.
max-age-minutes (Optional) The maximum number of minutes a view PDF will be cached before being refreshed. To prevent multiple PDF requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
orientation (Optional) The orientation of the pages in the .pdf file produced. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-type

(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid.

If this parameter is not present the page type will default to Legal.

#### Request Body None #### Response Code 200 #### Response Body This method has no response body. The response is in the form of a downloaded `.pdf` file. The response header content will have `Content-Type:application/pdf`. #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/views/2474164d-8d37-4a4c-abc7-c2070fd25fd5/pdf/maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` The response is a file that contains the view, whose data is no older than 60 minutes, saved as a pdf. #### Errors
HTTP statuserror CodeConditionDetails
400400080Bad RequestThe view ID in the URI doesn't correspond to a view available on the specified site.
401401002UnauthorizedThe authentication token provided in the request header was invalid or has expired.
403403032Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query View Preview Image Returns the thumbnail image for the specified view. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/views/view-id/previewImage #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
workbook-idThe ID of the workbook that contains the view to return a thumbnail image for.
view-idThe ID of the view to return a thumbnail image for.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:views:download ``` 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 The view's preview image in PNG format (MIME media type `image/png`). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA non-administrator user attempted to query a view preview image, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view in the specified workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Views for Site Returns all the views for the specified site, optionally including usage statistics. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version**: Available in API 2.2 and later. **License**: No additional license required. **Permissions**: For users who are not server administrators or site administrators, the method returns only the views that the user owns or has Read permissions for (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/views GET /api/api-version/sites/site-id/views?includeUsageStatistics=get-usage-information GET /api/api-version/sites/site-id/views?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/views?includeUsageStatistics=get-usage-information&pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/views?filter=filter-expression GET /api/api-version/sites/site-id/views?sort=sort-expression GET /api/api-version/sites/site-id/views?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 2.2. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the views.
get-usage-information(Optional) true to return usage statistics. The default is false.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) Fields and operators that you can use to filter results. For more information, see Filter expressions.
sort-expression(Optional) Field and direction to sort results. For more information, see Sorting.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the workbooks or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the REST API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand (**`&`**). #### Request Body None #### cURL Request `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views" -X GET -H "X-Tableau-Auth:1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d"` #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "1", "pageSize": "100", "totalAvailable": "2" }, "views": [ { "id": "1f1e1d1c-2b2a-2f2e-3d3c-3b3a4f4e4d4c", "name": "Economic Indicators", "contentUrl": "Finance/sheets/EconomicIndicators", "workbook": { "id": "1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" }, "owner": { "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" } }, { "id": "9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b", "name": "Investing in the Dow", "contentUrl": "Finance/sheets/InvestingintheDow", "workbook": { "id": "59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" }, "owner": { "id": "9f8e7d6c5-b4a3-f2e1-d0c9-b8a7f6e5d4c" } } ] } ``` The element is included in the response only if the method has `includeUsageStatistics=true` in the URI. #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
400400008Invalid parameter valueThe includeUsageStatistics was provided with a value other than true or false.
403403004Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Views for Workbook Returns all the views for the specified workbook, optionally including usage statistics. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/views GET /api/api-version/sites/site-id/workbooks/workbook-id/views?includeUsageStatistics=get-usage-information #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to get the views for.
(Optional) get-usage-informationtrue to return usage statistics. The default is false.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ... additional views ... ``` The element is included in the response only if the method has `includeUsageStatistics=true` in the URI. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400008Invalid parameter valueThe includeUsageStatistics was provided with a value other than true or false.
403403004Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/views" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Workbook Connections Returns a list of data connections for the specific workbook. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/connections #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to return connection information about.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can query a workbook only if they have Read (view) permission for the workbook (either explicitly or implicitly). `queryTaggingEnabled` is returned only for administrator users. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` HTTP statuserror CodeConditionDetails403403021Read forbiddenA user who is not a server administrator user attempted to query the workbook connections, but the caller doesn't have Read permission.404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.405405000Invalid request methodRequest type was not GET. For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. ## Query Workbook Preview Image Returns the thumbnail image as a PNG file for the specified workbook. Usually the image that is returned is for the first sheet in the workbook. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/previewImage #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to return the thumbnail image for.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can query a workbook preview image only if they have Read (view) permission for the workbook (either explicitly or implicitly) and also have Read (view) permission for the view that is used as the preview image. If the user doesn't have Read permissions to that view, the preview image for another view might be used. If the user doesn't have Read permissions to any views in the workbook, the user is not allowed to query a workbook query image. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:workbooks:download ``` 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 The workbook's preview image in PNG format (MIME media type `image/png`). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA non-administrator user attempted to query the workbook preview image, but the caller doesn't have Read permission for the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/previewImage" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" > workbook-preview.png` The response is a graphics file in PNG format. ## Query Workbooks for Site Returns the workbooks on a site. If the user is not an administrator, the method returns just the workbooks that the user has permissions to view. #### URI GET /api/api-version/sites/site-id/workbooks GET /api/api-version/sites/site-id/workbooks?filter=filter-expression GET /api/api-version/sites/site-id/workbooks?sort=sort-expression GET /api/api-version/sites/site-id/workbooks?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/workbooks?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbooks.
filter-expression(Optional) An expression that lets you specify a subset of workbooks to return. You can filter on predefined fields such as name, tags, and createdAt. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which workbook information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the workbooks or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the REST API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand (**`&`**). #### Request Body None #### Permissions Users who are not server administrators or site administrators can get workbooks that they have Read (view) permissions for (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` ... additional tags ... ... additional workbooks ... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Response Attribute Values
accelerationEnabled true if data acceleration is enabled, otherwise false. For more information, see Data Acceleration (Retired). Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.
accelerationStatus The status can be:
  • accelerated: The acceleration job succeeded.
  • failed: The acceleration job failed.
  • inProgress: The acceleration job is running.
  • notUseful: The acceleration job completed but none of the queries in the workbook were supported for acceleration.
  • waiting: The workbook is enabled for acceleration but no background job has been submitted yet to accelerate it.
Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.
#### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size exceeds upper limitThe page size parameter exceeds the system-wide upper limit of 1000.
403403018Read forbiddenA non-administrator user attempted to query workbooks for the site, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example: Get workbooks without filter `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ...more workbooks ... ``` #### Example: Get workbooks with date/time filter The following example includes a filter to return the workbooks that were updated on 1 May 2016 at 6:00 AM or later and specifies that the results should be sorted by the workbook name. `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks?filter=updatedAt:gte:2016-05-01T06:00:00Z&sort=name:asc" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Query Workbooks for User Returns the workbooks that the specified user owns in addition to those that the user has Read (view) permissions for. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/users/user-id/workbooks GET /api/api-version/sites/site-id/users/user-id/workbooks?ownedBy=isOwner&pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to get workbooks for.
isOwner(Optional) true to return only workbooks that the specified user owns, or false to return all workbooks that the specified user has at least read access to. The default is false.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions All users can call this method, but the results of the call depend on the user's permissions. Server and site administrators see all workbooks for the specified user. If the isOwner parameter is true, users who are not server or site administrators see the workbooks that they own on the site. If isOwner parameter is false, users who are not server administrators see the workbooks that they have Read (view) permissions for. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ... additional tags ... ... additional workbooks ... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size exceeds upper limitThe page size parameter exceeds the system-wide upper limit of 1000.
403403018Read forbiddenA non-administrator user attempted to query workbooks for the user, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/workbooks" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Read Data Source Elements Reads columns, field descriptions, or table descriptions from a published data source. Set `elementType` to the kind of element, and optionally set `name` to read one element. A missing named element returns HTTP 404. When a read record fails inside a successful response, the failure is on that element's `error` field and the HTTP status stays 200. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source (either explicitly or implicitly). **Access Scope**: `tableau:content:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/tds/sites/site-luid/datasource/datasource-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
datasource-luidThe LUID of the data source. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
elementTypeRequired. The kind of element to return. Allowed values are Column, FieldDescription, and TableDescription.
nameOptional. The name of a single element to read. When omitted, the call lists elements of the requested elementType. When this value is non-empty and the TDS service returns gRPC NOT_FOUND, the API responds 404 with error code 404065.
#### Response Code 200 OK #### Response Body Returns the elements read from the data source or work copy in `tdsElementList`. Each entry carries either a `column` payload (when `elementType` is `Column`) or a `description` string (when `elementType` is `FieldDescription` or `TableDescription`). If an individual read record fails, that entry carries an `error` object instead and the overall HTTP status stays 200. ``` Column Sales Sales MEASURE REAL FieldDescription Sales Total sales amount. Orders 5 NOT_FOUND ``` ``` { "tdsElementList": [ { "elementType": "Column", "name": "Sales", "column": { "caption": "Sales", "role": "MEASURE", "type": "REAL" } }, { "elementType": "FieldDescription", "name": "Sales", "description": "Total sales amount." }, { "name": "Orders", "error": { "code": 5, "message": "NOT_FOUND" } } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements read from the data source or work copy. Empty when the TDS service returns no records.
tdsElementList[].elementTypeOptional. Element type. Not set by the read converter for this operation.
tdsElementList[].nameRequired. Name of the element, set from the gRPC read result or from the failure record when the record failed.
tdsElementList[].columnOptional. Present when the read result is a column. Mutually exclusive with description.
tdsElementList[].column.captionOptional. Column display caption from the TDS service.
tdsElementList[].column.roleOptional. Column role, FieldRole.name() from the TDS service.
tdsElementList[].column.typeOptional. Column field type, FieldType.name() from the TDS service.
tdsElementList[].descriptionOptional. Description text. Present when the read result is a field description or a table description. Mutually exclusive with column.
tdsElementList[].errorOptional. Present only when this read record failed. The HTTP status of the read stays 200.
tdsElementList[].error.codeRequired (within error). The raw gRPC status code for the failed record — not a translated HTTP code and not a Tableau 6-digit error code.
tdsElementList[].error.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400Invalid data source LUIDThe data source LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Invalid elementTypeelementType must be Column, FieldDescription, or TableDescription.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
404404065TDS element not foundNo element with the requested name exists. Returned only when the name query parameter is non-empty. A missing data source or work copy is not given this code.
405405000Method not allowedThe HTTP method is not supported for this resource.
429429000Rate limit exceededToo many requests sent in a given time period.
500Unknown errorThere was an internal server error.
503Service unavailableService unavailable.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Read Work Copy Elements Reads columns, field descriptions, or table descriptions from a work copy. Set `elementType` to the kind of element, and optionally set `name` to read one element. A missing named element returns HTTP 404. When a read record fails inside a successful response, the failure is on that element's `error` field and the HTTP status stays 200. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:content:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/tds/sites/site-luid/workcopy/workcopy-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
elementTypeRequired. The kind of element to return. Allowed values are Column, FieldDescription, and TableDescription.
nameOptional. The name of a single element to read. When omitted, the call lists elements of the requested elementType. When this value is non-empty and the TDS service returns gRPC NOT_FOUND, the API responds 404 with error code 404065.
#### Response Code 200 OK #### Response Body Returns the elements read from the work copy in `tdsElementList`. Each entry carries either a `column` payload (when `elementType` is `Column`) or a `description` string (when `elementType` is `FieldDescription` or `TableDescription`). If an individual read record fails, that entry carries an `error` object instead and the overall HTTP status stays 200. ``` FieldDescription Sales Total sales amount, updated on the work copy. TableDescription Orders Order line items. Region 5 NOT_FOUND ``` ``` { "tdsElementList": [ { "elementType": "FieldDescription", "name": "Sales", "description": "Total sales amount, updated on the work copy." }, { "elementType": "TableDescription", "name": "Orders", "description": "Order line items." }, { "name": "Region", "error": { "code": 5, "message": "NOT_FOUND" } } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements read from the data source or work copy. Empty when the TDS service returns no records.
tdsElementList[].elementTypeOptional. Element type. Not set by the read converter for this operation.
tdsElementList[].nameRequired. Name of the element, set from the gRPC read result or from the failure record when the record failed.
tdsElementList[].columnOptional. Present when the read result is a column. Mutually exclusive with description.
tdsElementList[].column.captionOptional. Column display caption from the TDS service.
tdsElementList[].column.roleOptional. Column role, FieldRole.name() from the TDS service.
tdsElementList[].column.typeOptional. Column field type, FieldType.name() from the TDS service.
tdsElementList[].descriptionOptional. Description text. Present when the read result is a field description or a table description. Mutually exclusive with column.
tdsElementList[].errorOptional. Present only when this read record failed. The HTTP status of the read stays 200.
tdsElementList[].error.codeRequired (within error). The raw gRPC status code for the failed record — not a translated HTTP code and not a Tableau 6-digit error code.
tdsElementList[].error.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Invalid elementTypeelementType must be Column, FieldDescription, or TableDescription.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
404404065TDS element not foundNo element with the requested name exists. Returned only when the name query parameter is non-empty. A missing data source or work copy is not given this code.
405405000Method not allowedThe HTTP method is not supported for this resource.
429429000Rate limit exceededToo many requests sent in a given time period.
500Unknown errorThere was an internal server error.
503Service unavailableService unavailable.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Reencrypt Extracts in a Site Extract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see [Extract Encryption at Rest](https://help.tableau.com/current/server/en-us/security_ear.htm). Reencrypt all extracts on a site with new encryption keys. If no site is specified, extracts on the default site will be reencrypted. **Note:** Depending on the number and size of extracts, this operation may consume significant server resources. Consider running this command outside of normal business hours. #### URI POST /api/api-version/sites/site-id/reencrypt-extracts #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body None #### Permissions Tableau Server administrators can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:extract_encryption: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 None #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Register EAS Create a connected app with OAuth 2.0 trust by registering an external authorization server (EAS) to a site. You can register an external authorization server (EAS) to establish a trust relationship between your Tableau Server site or Tableau Cloud site and EAS using the OAuth 2.0 standard protocol. By establishing a trust relationship, you’re able to provide your users with a single sign-on (SSO) experience to Tableau content embedded in your custom applications or REST API authorization through an identity provider (IdP) you've already configured. **Notes:** - Beginning in API version 3.22, you can register multiple EASs per site for Tableau Cloud. - Beginning in API version 3.23, Tableau Server supports site-level EAS (and multiple registrations of EASs per site). For more information, see one of the following: - For Tableau Server: [Register EAS to Enable SSO for Embedded Content](https://help.tableau.com/current/server-linux/en-us/connected_apps_eas.htm) - For Tableau Cloud: [Register EAS to Enable SSO for Embedded Content](https://help.tableau.com/current/online/en-us/connected_apps_eas.htm) #### URI POST api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body ``` ``` #### Attribute Values A combination of attributes inside the element is valid, however issuerUrl is required.
URL The entity id of your identity provider (IdP) or URL that uniquely identifies your IdP.
URI

(Optional) The JSON Web Key (JKWS) of the EAS.

name

(Optional) The name of the connected app. If the name attribute is not specified, the connected app name defaults to "External Authorization Server."

This attribute is available starting from API version 3.22 (February 2024).

#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 The request returns details about the EAS, including the following: - ``: The name of the connected app. - ``: The ID of the EAS. - `:` The issuer URL of the EAS. - `:` The JSON web key set (JWKS) of the EAS. You can use the returned EAS ID (``) in [Update EAS](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#update_connectedapp_eas) and [Delete EAS](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#delete_connectedapp_eas) requests. **Example response:** ``` EAS_1 50bdc8cd-1aa4-48fe-a0e7-68982d85daa8 https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 https://dev-57741098.okta.com/jwks.json 2022-04-07T03:50:34Z ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.1 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
400400008Issuer URL missingThe required issuer URL is missing from the request body.
400400157Unexpected EAS errorThere was a unexpected error when creating the connected app.
400400161EAS limit exceededThe site has reached its limit of EAS that can be registered or the external authorization server (EAS) ID is not in the correct format.
400400194Issuer URL already configuredAnother connected app on the site is using the same issuer URL.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
## Remove Column Permanently remove the column from a table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/tables/_table-id_/columns/_column-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
column-idThe unique ID of the column asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to remove the column: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:columns: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409059Column errorAn unknown column asset error occurred.
409409061Unknown column delete errorAn unknown error occurred and the column could not be deleted.
409409066Column not foundThe requested column asset could not be found.
## Remove current analytics extension connection for workbook Remove the currently used analytics extension connection to an external service from the specified workbook. The connection remains configured, and is available for further usage by the workbook. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users that have permissions to the specified workbook. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:delete\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection [view details](#) ## Remove Data Source Revision Removes a specific version of a data source from the specified site. The content is removed, and the specified revision can no longer be downloaded using [Download Data Source Revision](#download_data_source_revision). If you call [Get Data Source Revisions](#get_data_source_revisions), the revision that's been removed is listed with the attribute `IsDeleted="true"`. **Note:** Calling this method permanently removes the specified data source revision. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id/revisions/revision-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
datasource-idThe ID of the data source to remove the revision for.
revision-numberThe revision number of the data source to remove. To determine what versions are available, call Get Data Source Revisions.
#### Request Body None #### Permissions Tableau Server users who are site administrators can remove data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can remove data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasources: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 #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user attempted to remove a data source revision, but the caller doesn't have required permissions.
403403053Version history not enabledversion history is not enabled for the specified site.
403403055Cannot delete head revisionThe head (first) version cannot be deleted. To remove the data source, call Delete Data Source.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404024Data source revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove Database Permanently remove the database asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/databases/_database-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
database-idThe unique ID of the database asset.
#### Request Body None #### Permissions Server or site administrators only. If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to remove the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:databases: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409047Database delete errorAn unknown error occurred and the database asset could not be deleted.
## Remove Group from Group Set Removes a group from the specified group set. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/groupsets/group-set-id/groups/group-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group set.
group-set-idThe ID of the group set to remove the group from.
group-idThe ID of the group to remove.
#### Request Body None #### Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/groups/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400032Deletion failedA problem arose that prevented the group from being removed from the group set.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
405405000Invalid request methodRequest type wasn’t DELETE.
409409120Group set not foundThe group set ID in the URI doesn't correspond to an existing user.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove items from a collection Removes items from a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections: update. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/-/collections/{luid}/items/batchDelete [view details](#) ## Remove OpenID Connect Configuration Disable and clear the Tableau Cloud site's OpenID Connect (OIDC) configuration. **Important:** Before removing the OIDC configuration, make sure that users who are set to authenticate with OIDC are set to use a different authentication type. Users who are not set with a different authentication type before removing the OIDC configuration will not be able to sign in to Tableau Cloud. **Version:** Available in API 3.22 (Tableau Cloud February 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI PUT /api/api-version/sites/site-luid/disable-site-oidc-configuration?idpConfigurationId=idp-configuration-id **Note:** The resource, PUT /api/api-version/sites/site-luid/disable-site-oidc-configuration?idpConfigurationId=idpConfigurationId, was added in version 3.24. The original resource, PUT /api/api-version/sites/site-luid/disable-site-oidc-configuration, continues to be a supported resource if your site is configured with only one OIDC authentication configuration. If you don’t specify an `idpConfigurationId` value starting in API 3.24, the initial (default) OIDC configuration on the site is removed. If there is no initial OIDC configuration on the site, then no OIDC configuration is removed. #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
idp-configuration-idThe ID of the configuration. To get the idpConfigurationId value, use the List Authentication Configurations for Site method.
#### Request Body None #### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/disable-site-oidc-configuration?idpConfigurationId=b2207590-024c-4a6e-ac4a-eca6eefabb2e" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove Projects from Routing Rule Removes one or more project filtering conditions from an existing allow rule, broadening the rule so it no longer applies only to those projects. This method applies to allow rules only; removing projects from a block rule is rejected. Each project ID must be a valid UUID. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 DELETE /api/api-version/sites/site-luid/bridge-routing-rules/routing-rule-id/projects #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the allow rule to remove projects from.
#### Request Body ``` ``` ``` { "routingRuleProjects": { "mode": "remove", "project": [ { "id": "11111111-2222-3333-4444-555555555555" } ] } } ``` #### Attribute Values
modeRequired. The operation mode; must be remove for this method.
projectRequired. One or more project IDs to remove. Each entry requires an id.
#### Response Code 200 #### Response Body Returns the updated `routingRule` with the removed projects no longer present in `project`. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "example.com", "isBlocked": false, "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71", "poolName": "WindowsPool", "project": [] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedMissing or empty project list, or invalid project or rule UUID.
400503910Invariant violationAttempted to remove projects from a block rule.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
429429000Rate limit exceededToo many requests sent in a given time period.
500503922Unexpected server errorAn unexpected error occurred while removing projects.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove Table Permanently remove the table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI DELETE api/_api-version_/sites/_site-id_/tables/_table-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body None #### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to remove the table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tables: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 #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Table errorAn unknown table asset error occurred.
409409054Unknown table delete errorAn unknown error occurred and the table could not be deleted.
## Remove User from Group Removes a user from the specified group. Beginning in API 3.21, you can bulk remove users from a group by specifying multiple user IDs. #### URI **Remove a single user from a group** DELETE /api/api-version/sites/site-id/groups/group-id/users/user-id **Bulk remove users from a group** (beginning in API 3.21) PUT /api/api-version/sites/site-id/groups/group-id/users/remove #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-idThe ID of the group to remove the user from.
user-idThe ID of the user to remove.
#### Request Body **Remove a single user from a group** None **Bulk remove users from a group** (beginning in API 3.21) ``` ``` #### Attribute Values (bulk remove users only)
user-id

The ID (not name) of the user to add. You can get the user ID by calling Get Users on Site .

Beginning in API 3.21, you can bulk remove users from a group by specifying multiple user IDs.

#### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 204 #### Response Body None #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400032Deletion failedA problem arose that prevented the user from being removed from the site.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user name in the URI doesn't correspond to an existing user.
404404012Group not foundThe group name in the URI doesn't correspond to an existing group.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ##### Remove a single user from a group `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ##### Bulk remove users from a group (beginning in API 3.21) `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @bulk-remove-users-from-group.xml` **Content of bulk-remove-users-from-group.xml:** ``` ``` **Example response:** The response contains no body (data) if the user (or users) is successfully removed from the group. The HTTP response code is 204 if the delete operation succeeded. ## Remove User from Identity Pool Remove a user from a specified identity pool. This method is not available for Tableau Cloud. **Version:** Available in API 3.19 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:** Tableau Server administrators only. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:identity\_pools\_users:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/users/user-id/identityPool/idpool-uuid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that is associated with the user you want to remove from the identity pool.
user-idThe ID of the user to remove from the identity pool.
idpool-uuidThe ID of the identity pool to remove the user from. You can get the identity pool ID by calling the List Identity Pools endpoint in the Tableau REST OpenAPI.
#### Request Body None #### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/7ad8f89e-c2a1-44b4-9413-ac8a62286a7a/identityPool/" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` - `MY-SERVER` is the name or IP address of your server. - `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d` is the ID of the site, as returned by a previous call to [Sign In](#sign_in). - `7ad8f89e-c2a1-44b4-9413-ac8a62286a7a` is the ID of the user to remove. - `df47cf24-5ed3-11ed-9b6a-0242ac12000` is the ID of the identity pool. - `12ab34cd56ef78ab90cd12ef34ab56cd` is the credentials token returned by a previous call to [Sign In](#sign_in). The response contains no body (data) if the user is successfully removed from the identity pool. The HTTP response code is 204 if the delete operation succeeded. #### Permissions This method can only be called by Tableau Server administrators. #### Response Code 204 #### Response Body None #### Version Version 3.19 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not DELETE.
429429003Can't remove userThere was a problem and the user couldn't be removed from the identity pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove User from Site Removes a user from the specified site. The user will be deleted if they do not own any other assets other than subscriptions. If a user still owns content (assets) on Tableau Server, the user cannot be deleted unless the ownership is reassigned first. You can’t remove a user from the server if they own content on any site on that server. You can remove a user from a site if they no longer own content on the site. If a user is removed from all sites that the user is a member of, the user is deleted. #### URI DELETE /api/api-version/sites/site-id/users/user-id DELETE /api/api-version/sites/site-id/users/user-id?mapAssetsTo=new-user-id #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the user.
user-id The ID of the user to remove.
mapAssetsTo Optional. When included in the URI path, the contents owned by the user being removed are transferred to another user. If the user owns subscriptions and no mapAssetsTo is provided, the value of the owner is changed to unknown user. If a user owns only subscriptions, you can delete them from either server or site without having to set mapAssetsTo a different user.

If a user owns only subscriptions, you can delete the user from the server or site without setting this value.

Note: Even though both server administrators and site administrators can call this method, only server administrators can use the mapAssetsTo parameter to reassign content ownership. Site administrators can't use this parameter value. You must be a server administrator to remove a user who still owns content on Tableau Server.

new-user-id The ID of a user that receives ownership of contents of the user being remove.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Deletion failedSome other problem arose that prevented the user from being removed from the site.
403404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not DELETE.
409409003User asset conflictThe specified user still owns content on Tableau Server and cannot be deleted.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) if the user is successfully removed from the site. The HTTP response code is 204 if the delete operation succeeded. ## Remove Workbook Revision Removes a specific version of a workbook from the specified site. The content is removed, and the specified revision can no longer be downloaded using [Download Workbook Revision](#download_workbook_revision). If you call [Get Workbook Revisions](#get_workbook_revisions), the revision that's been removed is listed with the attribute `IsDeleted="true"`. **Note:** Calling this method permanently removes the specified workbook revision. #### URI DELETE /api/api-version/sites/site-id/workbooks/workbook-id/revisions/revision-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
workbook-idThe ID of the workbook to remove the revision for.
revision-numberThe revision number of the workbook to remove. To determine what versions are available, call Get Workbook Revisions.
#### Request Body None #### Permissions Tableau Server users who are site administrators can remove workbook revisions on the site that they are administrators for. Users who are not server administrators or site administrators can remove workbook revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified workbook. - Save (write) permissions for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbooks: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user attempted to remove a data source revision, but the caller doesn't have required permissions.
403403053Version history not enabledversion history is not enabled for the specified site.
403403055Cannot delete head revisionThe head (first) version cannot be deleted. To remove the workbook, call Delete Workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404024Workbook revision not foundThe revision number in the URI doesn't correspond to an existing workbook revision.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Reorder items in a collection Reorders items in a collection. **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** tableau:collections:update. Added in API 3.28. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/-/collections/{luid}/orderItems [view details](#) ## Replace Content Permissions Replaces existing permissions in the specified content. You can specify multiple sets of permissions using one call. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) 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:** Users who are not server administrators or site administrators can add permissions only to content for which they have **ChangePermissions** permission.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:permissions: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). #### URI POST /api/api-version/sites/site-luid/datasources/datasource-luid/permissions POST /api/api-version/sites/site-luid/flows/flow-luid/permissions POST /api/api-version/sites/site-luid/projects/project-luid/permissions POST /api/api-version/sites/site-luid/views/view-luid/permissions POST /api/api-version/sites/site-luid/workbooks/workbook-luid/permissions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
datasourc-luidThe LUID for the data source.
flow-luidThe LUID for the flow.
project-luidThe LUID for the project.
view-luidThe LUID for the view.
workbook-luidThe LUID for the workbook.
(Optional, but can be included for compatibility with older versions.)
#### Request Body Copy ```                                                                                              ``` Copy ``` {  "permissions": {    "granteeCapabilities": [      {        "user": {          "@id": "user-luid"        },        "capabilities": {          "capability": {            "@name": "capability-name",            "@mode": "capability-mode"          },          "#text": "... additional capabilities ..."        }      },      {        "group": {          "@id": "group-luid"        },        "capabilities": {          "capability": {            "@name": "capability-name",            "@mode": "capability-mode"          },          "#text": "... additional capabilities ..."        }      }    ],    "#text": "... additional grantee capability sets ..."  }} ``` #### Request Attributes
workbook-idThe <workbook> element is not required, but can be included for compatibility with earlier versions of the REST API. If the <workbook> element is included, the workbook-id value must match the workbook ID in the URI. Any other attributes in the <workbook> element are ignored.
user-idThe ID (not name) of the user to add permissions for.
group-idThe ID (not name) of the group to add permissions for.
#### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/datasources/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @replace-view-permissions.xml` #### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, CreateRefreshMetrics, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.
403403004Permissions setting forbiddenA non-administrator user called this method but doesn't have permission to set permissions on the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundA user ID in the request body doesn't correspond to an existing user.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404011View not foundThe view ID in the ID doesn't correspond to an existing view.
404404012Group not foundA group ID in the request body doesn't correspond to an existing group.
404404013Capability not foundThe specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than Allow or Deny for any mode value.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodThe request type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Replace Project's Default Permissions Replaces default permissions in the specified content. If Tableau Catalog is enabled, it also adds default permission rules for database or table resources in a project. After adding default permission rules, new resources of the type you specify that are added to the project will have those permission rules. If permissions are [locked to the project](https://help.tableau.com/current/server/en-us/permissions.htm#LockProject), then the same is true for all existing child content of the project. For more information, see [Permissions](https://help.tableau.com/current/server/en-us/permissions.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) 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:** Users who are not server administrators, project owners, or project leaders can replace permissions defaults for a project only if they have effective **ChangePermissions** permission.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:permissions: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). #### URI POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/dataroles POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/databases POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/datasources POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/flows POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/tables POST /api/api-version/sites/site-luid/projects/project-luid/default-permissions/workbooks #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid

The LUID for the site.

project-luid

The LUID for the project.

#### Request Body Copy ```                                                                                              ``` Copy ``` {  "permissions": [    {      "user": {        "id": "user-luid"      },      "capabilities": [        {          "name": "capability-name",          "mode": "capability-mode"        }      ]    },    {      "group": {        "id": "group-luid"      },      "capabilities": [        {          "name": "capability-name",          "mode": "capability-mode"        }      ]    }  ]} ``` #### Request Attributes
user-luid The LUID of the user to add default permissions for.
group-luid The LUID of the group to add permissions for.
capability-name

The capability to assign. Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, SaveAs, Read (view), and Write.

For more information, see Permissions.

#### cURL Request Example `curl --location "http://MY-SERVER/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/default-permissions/dataroles" --header "Content-Type: application/xml" --data @replace-default-permissions-workbook.xml` #### Response Code 200 #### Response Body None #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400009 Invalid capability The capability in the URI is invalid for a data source.

Valid capabilities for a workbook are AddComment, ChangeHierarchy, ChangePermissions, Delete, ExportData, ExportImage, ExportXml, Filter, Read (view), RunExplainData, ShareView, ViewComments, ViewUnderlyingData, WebAuthoring, and Write.

Valid capabilities for a data source are ChangePermissions, Connect, Delete, ExportXml, Read (view), and Write.

For detailed information about capabilities for each content type, see Capabilities.

400 400042 Malformed permissions qualifier The request body includes a <workbook> or <datasource> element.
403 403004 Permissions setting forbidden A non-administrator user called this method but doesn't have permission to add permissions on the project.
404 404000 Site not found The site LUID in the URI doesn't correspond to an existing site.
404 404002 User not found A user LUID in the request body as the grantee doesn't correspond to an existing user.
404 404005 Project not found The project LUID in the URI doesn't correspond to an existing project.
404 404009 Project ID mismatch A project LUID specified in the URI doesn’t match the project ID specified in the request body. (You don’t have to specify a project ID in the request body.)
404 404012 Group not found A group LUID in the request body doesn't correspond to an existing group.
404 404013 Capability not found The capability in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405 405000 Invalid request method The request type wasn’t POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Restore Recycle Bin Content Item Restores the specified content item from the Recycle Bin to a project. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2). **License**: No additional license required. **Permissions**: Server administrators, site administrators, or other users. The calling user also needs Publish permission for the project they're restoring content to. **Access Scope**: `tableau:recyclebin_content:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Administrators can restore any content from the site's Recycle Bin. Other users can only restore content they own, and need Publish permission for the project they're restoring to. For information about how content properties change when it's deleted or restored. See [Recycle Bin](https://help.tableau.com/current/pro/desktop/en-us/recycle_bin.htm). #### URI POST /api/api-version/sites/site-id/recyclebin/content-type/content-id/restore?projectId=project-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site that contains the Recycle Bin.
content-typeContent type in plural form: workbooks, datasources, flows, or projects.
content-idThe LUID of the recycle bin content item to restore.
project-idThe LUID of the project to restore the content to.
#### Request Body None #### Response Code 204 #### Response Body None #### Version Version 3.29 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestCheck the request body and query string parameters.
401401000No auth credentialsCheck the authorization header.
401401002Invalid auth credentialsSession expired or invalid.
403403004Operation on resource unauthorizedCheck user permission.
403403008Insufficient site storage remainingRestore would exceed site storage quota.
403403157Feature disabledRecycle Bin disabled.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404003Unknown resourceRequested content item not found.
405405000Method not allowedRequest type unrecognized for this method.
406406000Unacceptable media typeBad Accept: header.
409409004Invalid parameterParameter type-mismatched, unknown content type, or malformed LUID.
429429000Too many requestsRequest throttled.
500500000Internal server errorUnknown error.
503500001Internal service errorInternal service error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Revoke Administrator Personal Access Tokens Revokes all [personal access tokens](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm) (PATs) created by server administrators. This method is not available for Tableau Cloud. #### URI DELETE /api/api-version/auth/serverAdminAccessTokens #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body None #### Permissions Only Tableau Server users with server administrator permissions can use this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:server_admin_tokens: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 #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Revoke server admin tokens forbidden,The user does not have the server administrator permissions required to call this method.
404404000Server not foundThe Tableau Server in the URI doesn't correspond to an existing server.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Revoke Personal Access Token Revoke a personal access token (PAT). If you're a site admin, you can revoke a users PAT owhen you are the site admin on all sites that the PAT owner is a member of. This method is not available for Tableau Server. **Version:** Available in API 3.21 (Tableau Cloud October 2023) 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:** Any Tableau Cloud user. If you're a Tableau Cloud site admin, you can revoke the PAT of a user when you are the site admin on all sites that the PAT owner is a member of. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** Not available. #### URI DELETE /api/api-version/sites/site-luid/users/user-luid/personal-access-tokens/pat-name #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
user-luidThe LUID of the user. The user LUID is returned after you successfully authenticate to the Tableau REST API.
pat-nameThe name of the PAT you want to revoke.
#### Request Body None #### cURL Request Example `curl "http://myco/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/d5704762-603a-42b2-a9a7-f9cd2b2c4253/personal-access-tokens/my_pat" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 204 #### Response Body None #### Errors
HTTP status error Code Condition Details
401 401002 Unauthorized Access The credentials token provided in the request header was invalid or has expired.
403 403004 Forbidden You can only revoke PATs that are yours.
403 403010 Cross-site access is forbidden You're a site admin and can't revoke a PAT when you're not the site admin for all sites the PAT owner is a member of.
404 404051 Personal access token not found The PAT couldn't be revoked because it does not exist.
405 405000 Not supported This error can occur for the following reasons:
  • The URI contains an incorrect PAT name or the PAT name is missing
  • The request type is not DELETE
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Run Extract Refresh Task Runs the specified extract refresh task. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). This method runs the scheduled task for the data source extract, the published workbook that connects to the data extract, or the virtual connection extract. You must first schedule the task for the extract refresh. You can do this using the [Create Schedule](#create_schedule) method to create the task. To get information about the extract refresh task, use the [Get Extract Refresh Tasks](#get_extract_refresh_tasks) method, which returns the extractRefresh ID that you use as the task-id. The method adds the refresh task to the backgrounder queue. Depending upon the backgrounder load, the task might not run immediately. The method returns information about the backgrounder job responsible for running the extract refresh task, including a **job id** that can be used with the [Query Job](#query_job) method to query the status of the extract refresh. An extract refresh task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a refresh task will fail if the task has been put in the task queue in any of these ways, or is already in progress. #### URI POST /api/api-version/sites/site-id/tasks/extractRefreshes/task-id/runNow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the extract refresh task that you want to run.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). Not available for Tableau Server. `tableau:tasks:run` (this scope is included in the scope: `tableau:tasks`) 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 The request body is an empty tsRequest element. ``` ``` #### Permissions Tableau Server users who are not server administrators or site administrators can only run the extract refresh tasks that they own. #### Response Code 200 #### Response Body The content type (workbook, data source, or virtual connection) is indicated in the response. ``` ``` #### Version Version 2.6 and later. Virtual connection support added in 3.30. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400047Extract refresh errorThe task specified is not an extract refresh task.
400409090Extract operation not allowedThe extract operation is not allowed for the asset that the task refreshes.
403403004Operation on resource unauthorizedThe user is not authorized to run the task.
403409082Run now disabledThe Run Now setting is disabled for the site.
404404003Unknown resourceThe task ID in the URI doesn't correspond to an existing task.
404404049Virtual connection not foundThe virtual connection that the task refreshes no longer exists.
405405000Method not allowedThe request type was not POST.
409409093Operation already in queueThe extract refresh job is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/extractRefreshes/9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c/runNow" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @empty_request.xml` ## Run Flow Now Runs the specified flow. This method runs the specified flow with all the output steps if none are specified. If you want to run only a subset of output steps, you can specify one or more output steps using the output-ids by using the [List Metrics for Site - Retired in API 3.22](#Query). The Run Flow Now method is the equivalent of selecting a flow using the Tableau Server UI, and then selecting **Run Now** from the menu. A flow task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a flow task will often fail if the task has been put in the task queue in any of these ways, or is already in progress. Running the flow for a suspended task using Run Flow Now will resume the task job. **Note:** - This method is unavailable if you don't have Data Management. For more information, see [Tableau Prep Conductor](https://help.tableau.com/current/online/en-us/dm_overview.htm#tableau-prep-conductor). - This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). #### URI POST /api/api-version/sites/site-id/flows/flow-id/run POST /api/api-version/sites/site-id/flows/flow-id/run?flowOutputStepIds=flow-outputstep-id&flowRunMode=flow-run-mode #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to update.
#### Request Body ``` ``` A request body with for running a flow with no parameters: ``` ``` A request body for running a flow but not specifying output step (effectively running all output steps): ``` ``` #### Attribute Values
flow-id

The ID of the flow to add to the schedule. This will include all the output steps in the flow and any output steps created in the future.

flow-outputstep-id

The ID of the output steps you want to run. This parameter is optional. If you don't specify the output steps, all the output steps in the flow will be included. You can specify one or more output steps. Use the List Metrics for Site - Retired in API 3.22 method to get the list of flow-outputstep-ids.

flow-run-mode

The mode to use for running this flow, either full or incremental. This parameter is optional. If you don't specify an option the run mode will be full. The flow must be configured with incremental options on the input nodes to refresh incrementally.

parameter-id

The ID of the flow parameter. Use the List Metrics for Site - Retired in API 3.22 method to get the flow parameter ID. A parameter is a global placeholder value such as a number, text value, or boolean value that can replace a constant value in a flow.

Note: Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.

For more information, see Run flows with parameters.

overrideValue

The run-time value for the flow parameter. You must specify this if the parameter is required. Use the List Metrics for Site - Retired in API 3.22 method to see if the parameter is required and to get a list of allowed values if the parameter is expecting a value from an enumerated list.

Note: Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.

For more information, see Run flows with parameters.

**Note:** You must specify the flow-id value in the URI. If you are using a request body to specify the attributes, you must also include the flow-id in the request body in addition to providing it in the URI. #### Permissions In addition to the owner of a flow, Tableau server administrators, site administrators, and project leaders can run flows within their scope. Users with a creator or explorer license that have been granted permissions by an administrator, leader or owner for a flow may also run it. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows:run ``` 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 ``` ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400400132Invalid flow run modeThe specified flow run mode is not valid.
400400148Invalid parameter override valueThe run-time value specified is not valid.
400400149Parameter override value missingThe run-time value for the parameter was not specified and is required.
403403149Flow cannot be runThe flow parameter setting is disabled on the site preventing the flow run.
403403150Flow cannot be runThe flow cannot be run because flow parameters contain parameter domain type "any" but the Allow parameters that can accept any input setting is disabled on the site.
404404000Site not foundThe site ID in the URI is unknown.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
404404043Flow parameter not foundThe parameter ID specified in the request body does not match any of the existing parameters for this flow.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/flows/ d00700fe-28a0-4ece-a7af-5543ddf38a82/run?flowRunMode=incremental" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Run Flow Task Runs the specified flow run task. **Note:** \- This method is unavailable if you don't have Data Management. For more information, see [Tableau Prep Conductor](https://help.tableau.com/current/online/en-us/dm_overview.htm). \- This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). This method runs the scheduled task for the flow. You must first schedule the task for the flow. You can do this using the [Create Schedule](#create_schedule) method to create the task. The Run Flow task requires you to provide a task id. To get the task-id, use the Get Flow Run Tasks method, which returns the flowRun ID. The value of the flowRun ID is what you use as the task-id. The method adds the flow run task to the backgrounder queue. Depending upon the backgrounder load, the task might not run immediately. The method returns information about the backgrounder job responsible for running the flow run task, including a job id that can be used with the [Query Job](#query_job) method to query the status of the flow run. A flow task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a flow task will often fail if the task has been put in the task queue in any of these ways, or is already in progress. If your request results in an error code `403102`, it means that there is already a scheduled task for this within a very close time period (seconds). In this case, if the task is currently in a suspended state, it will resume. #### URI POST /api/api-version/sites/site-id/tasks/runFlow/task-id/runNow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that the user is a member of.
task-idThe ID of the flow run task that you want to run.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can only run the flow run tasks that they own. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_tasks:run ``` 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 ``` ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400084Flow run task errorThe task specified is not a flow run task.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/tasks/runFlow/9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c/runNow" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Run Linked Task Now Runs the specified linked task. This method runs the specified linked task with all the steps. Depending on the setting that the task was created with, the linked task will stop at a step on failure or continue to the next step. For more information, see [schedule linked tasks](https://help.tableau.com/current/server/en-us/prep_conductor_schedule_flow_task.htm#schedule-linked-tasks). **Version**: Available in API 3.15 and later. **License**: Data Management required. For more information, see [Tableau Prep Conductor](https://help.tableau.com/current/online/en-us/dm_overview.htm). - The **RunNow** setting for the site must be enabled by a site administrator for run linked tasks requests to succeed. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). **Permissions**: Tableau server administrators, site administrators, and project leaders can run linked tasks within their scope. Tableau users can run a linked task if they own the task or have permissions to run all the flows included in the linked task. **Access Scope**: `tableau:linked_tasks:run` - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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-id/tasks/linked/linked-task-id/runNow #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
linked-task-idThe ID of the linked task to run.
#### Request Body none #### cURL Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/tasks/linked/d00700fe-28a0-4ece-a7af-5543ddf38a82/runNow -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body ``` . ``` ``` { "linkedTaskJob": { "id": "765dfdfc-26ec-47ea-b53b-54419c8f6b61", "linkedTaskId": "cde24429-6217-48e5-8ff5-f5dcd6a7006b", "status": "InProgress", "createdAt": "2022-02-15T00:22:22Z" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400153Generic errorUnable to run the linked task for some reason other than the ones specified below.
403403155Linked task cannot be runThe linked task setting is disabled on the site.
404404045Linked task not foundThe linked task ID in the URI doesn't correspond to an existing linked task.
405405000Invalid request methodRequest type was not POST.
409409082Run now forbiddenRun now setting has been disabled.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Search graph nodes Search graph nodes using natural-language semantic search. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/nodes/search [view details](#) ## Search semantic contexts Search semantic contexts across the graph. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/semantic-contexts/search [view details](#) ## Search semantic contexts attached to a node Search the semantic contexts attached to a specific node. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/nodes/{node\_id}/semantic-contexts/search [view details](#) ## Server Info Returns the version of Tableau Server and the supported version of the REST API. #### URI GET /api/api-version/serverinfo #### Parameter Values
api-version

The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.

#### Request Body None #### Permissions This method can be called by all users and does not require authentication. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:server: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 ``` product-version api-version ``` The response contains the following information: - build-number. The build number of your installation of Tableau Server. - product-version. The product version of your installation of Tableau Server. - api-version. The REST API version that is compatible with your version of Tableau Server. #### Version Version 2.4 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Set Custom View as Default for Users Sets the specified custom for as the default view for up to 100 specified users. Success or failure for each user is reported in the response body. **Version:** Available in API 3.21 (Tableau Cloud October 2023 / Server 2023.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:** Only Tableau administrators can set a custom view as the default view for users. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:views: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). #### URI POST /api/api-version/sites/site-luid/customviews/custom-view-luid/default/users #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body Copy ```          ``` Copy ``` {  "users": {    "user": {      "id": "5c9a81df-7ec0-4752-a057-82cd2bb22c44"    }  }} ``` #### cURL Request Example ``` curl --location 'https://qa-near.tsi.lan/api/3.21/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/3321cb71-6606-4d78-8a0c-e69a7e7d2261/default/users' --header 'Accept: application/xml' --header 'X-Tableau-Auth: X4fzaa75SJqSiCjq6EI9ow|uTR4NKykLGob3VustCzOq1htrchwo0ga|a946d998-2ead-4894-bb50-1054a91dcab3' --header 'Content-Type: text/plain' --data '' ``` #### Response Code 200 #### Response Body Copy ```                    ``` Copy ``` {  "customViewAsUserDefaultResults": {    "customViewAsUserDefaultViewResult": {      "success": "true",      "user": {        "id": "5c9a81df-7ec0-4752-a057-82cd2bb22c44"      }    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions.
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Sign In Signs you in as a user on the specified site on Tableau Server or Tableau Cloud. This call returns a credentials token that you use in subsequent calls to Tableau Server or Tableau Cloud. For more information about authentication, see [Signing In and Signing Out (Authentication)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm). **Notes:** - [SAML single sign on](https://help.tableau.com/current/server/en-us/saml_requ.htm) (SSO) authentication does not validate REST API requests. For a scenario where you want to integrate Tableau authentication into a SSO environment you will need to incorporate a REST sign in request, and then use the credentials token from its response in the header of subsequent requests. - The credentials token is valid for REST API calls and Tableau Metadata API (GraphQL) queries. You cannot use the credentials token as authentication for other operations with Tableau Server. In addition, the credentials token is good only for operations in the site that you're signed in to. You cannot sign in to one site and then use the credentials token you get back to send requests to a different site. If you do, the server returns an HTTP 403 (Forbidden) error. - (Tableau Cloud only) If multi-factor authentication (MFA) is enabled with Tableau authentication, PATs are required. You must use a PAT, instead of user name and password, to make a REST API sign in request to Tableau Cloud. Alternatively, you can use a unified access token (UAT) to sign in to Tableau Cloud. **Tableau Server** Typically, a credentials token is valid for 240 minutes. With administrator permissions on Tableau Server, you can change this timeout by using the [tsm configuration set](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm) command and setting the wgserver.session.idle\_limit option. In addition, if you are a Tableau Server administrator, you can use your username and password to sign in and impersonate a specific user. You might use impersonation in order to double check or troubleshoot the impact of permissions settings for that user. **Tableau Cloud** A credentials token is valid for 120 minutes on Tableau Cloud. #### URI POST /api/api-version/auth/signin **Note:** For Tableau Cloud, the server address in the URI must contain the pod name, such as prod-ca-a or us-east-1. For example, the URI to sign in to a site in the 10ay pod would be:https://prod-ca-a.online.tableau.com/api/api-version/auth/signin. For more information, see [About the pod name](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm#pod). #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body ### PAT Signing in with a user's personal access token (PAT):  - For Tableau Server, see [personal access token](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm). - For Tableau Cloud, see [personal access token](https://help.tableau.com/current/online/en-us/security_personal_access_tokens.htm). ``` ``` ### User name and password Signing in with a user's user name and password: ``` ``` ### Impersonating user using username and password Signing in with server administrator's username and password to impersonate a user (Tableau Server only): ``` ``` ### Impersonating user using PAT Signing in with server administrator's [personal access token](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm) (PAT) to impersonate a user (Tableau Server only): ``` ``` ### Connected apps JWT Signing in with a JSON Web Token (JWT), from a [connected app](https://help.tableau.com/current/online/en-us/connected_apps.htm) (added in Tableau Cloud June 2022 (API 3.16); Tableau Server 2022.3 (API 3.17)): ``` ``` When a JWT sign-in is used, the JWT must be configured with the scopes of the REST API methods the connected app can access. You can find the scope for a JWT-supported method in a method's properties block or references details under the **Access scope** section. These sections show the scope declaration to use in the JWT that calls that method. **Note:** Beginning in API 3.20 (June 2023) for Tableau Cloud and API 3.21 (Tableau 2023.3) for Tableau Server, the Sign In (and Sign Out) method is supported by JWT authorization using connected apps but does not require a scope to use. **About connected app errors** If you encounter issues with signing in with a JWT, the response body is appended with an additional error code that you can reference in [Troubleshoot scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm#signin) (Tableau Cloud Help) or [Troubleshoot scopes](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm#signin) (Tableau Server Help). For example, in the following response body, you can reference “10084” to help troubleshoot issues with signing in to Tableau Cloud or Tableau Server using a JWT for REST API authorization. "summary": "Signin Error", "detail": "Error signing in to Tableau Cloud (10084)" ### Unified access tokens JWT Signing in with a JSON Web Token (JWT) using a unified access token (added in Tableau Cloud December 2025 (API 3.27)): XML ``` ``` JSON ``` { "credentials": { "jwt": "json-web-token", "isUat": is-uat, "site": { "contentUrl": "" } } } ``` When JWT sign-in is used, the JWT must be configured with the scopes for the REST API capabilities that should be available to the unified access token (UAT). You can find the scope for a JWT-supported method in a method's properties block. The properties block shows the scope declaration to use in the JWT that calls that method. If a scope is not listed in the method's properties block, access to that method can't be limited by a JWT. For more information about UATs, see [Unified Access Tokens](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html) in the Tableau Cloud Manager REST API Help. #### Attribute Values
personal-access-token-name

The name of the personal access token when signing in with a personal access token. The token name is available on a user’s account page on Tableau server or online.

personal-access-token-secret

The secret value of the personal access token when signing in with a personal access token. The value of the secret is available only in the dialog that appears when a user creates a personal access token as described in the Tableau Help.

username The name of the user when signing in with username and password. The name and password in the <credentials> element can represent any user in the specified site. If the user is not an administrator, they might have limited permissions to perform subsequent operations.

Note: If the server is configured to use Active Directory authentication, and if the user name is not unique across domains, you must include the domain as part of the user name (for example, domain_name\Adam).

password The password when signing in with username and password.
json-web-token A JSON Web Token (JWT) associated with a Tableau connected app or unified access token (Tableau Cloud only).

Tableau connected apps JWT: If using Tableau connected apps, the JWT uses a shared secret provided by the Tableau connected app and signed by your external application. Depending on the method used to create the connected app, a JWT can be generated by the connected app as part of the external app's call to sign in to Tableau. The JWT must include access scopes that determine which REST methods the external app can call.

Unified access tokens: Starting in December 2025, if using unified access tokens (UATs), the JWT uses a shared secret as part of the UAT configuration. Added in API 3.27, Tableau Cloud only.

is-uat Enables JWT authorization using a unified access token (UAT) when set to true. Added in API 3.27, Tableau Cloud only.
content-url

The permanent name of the site to sign in to. The content URL appears in the URL path of Tableau content in your browser address bar after the Tableau Server URL.

mySite is the content URL in the following example:

http://<server or cloud URL>/#/site/mySite/explore

For Tableau Server, to specify the default site, omit contentUrl from the site element, or make the contentUrl value an empty string (contentUrl="").

For Tableau Cloud, a sign-in request must have a site element containing a contentUrl with the value of an existing site. If these are missing, the sign-in request will fail.

user-to-impersonate The LUID of a user to sign in as. For impersonation when a system administrator signs in with user name and password.
#### Permissions Any Tableau user can sign in through the REST API. A user that does not have administrator permissions will have limited permissions to perform subsequent operations. Only server administrators can sign in with username and password in order to impersonate other Tableau Server users. #### Response Code 200 #### Response Body ``` ``` An `estimatedTimeToExpiration` value is returned when you sign in using a PAT. The value represents the approximate time until the PAT will expire and need to be refreshed. The estimated time is based on regular usage of the token for authenticating calls, but actual time may be shorter if the token is unused for an extended length of time. The `estimatedTimeToExpiration` value uses the format `DAYS:HH:MM`, where: - The first segment represents **days** - The second segment represents **hours** - The third segment represents **minutes** For example, a value of `2:12:30` indicates 2 days, 12 hours, and 30 minutes until expiration. This format does _not_ represent hours:minutes:seconds. For more information, see the following: - Tableau Cloud - [About PAT expiration](https://help.tableau.com/current/online/en-us/security_personal_access_tokens.htm#about-pat-expiration) - Tableau Server - [Change personal access tokens expiry](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm#change-personal-access-tokens-expiry) #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains both username/password and a personal access token, or contains malformed XML.
401401001Login errorThe credentials (name or password, or personal access token name or secret) are invalid for the specified site, or the site contentURL is invalid.
401401001Login errorLogin is blocked because several requests with invalid credentials were made.
401401001Login errorThe Administrator requires the user to update their password.
401401001Login errorThe password has expired.
401401009Login errorThe request body is missing or empty.
405405000Invalid request methodRequest type was not POST.

If you are signing in to a Tableau Cloud site, this error may be caused by leaving the pod name out of the server address in the URI.

The error can also be caused by attempting to make a request to a SSL-protected server using HTTP, rather than HTTPS.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "https://MY-SERVER/api/3.29/auth/signin" -X POST -d @signin.xml` **Content of signin.xml:** ``` ``` **Example response:** ``` ``` ## Sign Out Signs you out of the current session. This call invalidates the authentication token that is created by a call to [Sign In](#sign_in). **Notes:** - Beginning in API 3.20 (June 2023) for Tableau Cloud and API 3.21 (Tableau 2023.3) for Tableau Server, the Sign Out (and Sign In) method is supported by JWT authorization but does not require a scope to use. For more information, see [JWT](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#jwt). #### URI POST /api/api-version/auth/signout #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body None #### Permissions Any user can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:*:* ``` 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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Examples `curl "http://MY-SERVER/api/3.29/auth/signout" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Switch Site Switches you onto another site without having to provide a user name and password again. This method allows an authenticated user to switch sites that they have access to. When you call this method, you must provide the current authorization token as the value of the X-Tableau-Auth header. Using the current authentication token, the method signs you in as a user on the site specified in the request payload. The method returns a new authentication token and invalidates the old one. You have the permissions of the user associated with the authorization token. By default, the token is good for 240 minutes. (You can specify a different timeout value for the token by calling the `tsm configuration set` command to change the wgserver.session.idle\_limit setting.) **Note** This method is not available on Tableau Cloud. #### URI POST /api/api-version/auth/switchSite #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body ``` ``` #### Attribute Values
content-url

The permanent name of the site to sign in to. The content URL appears in the URL path of Tableau content in your browser address bar after the Tableau Server URL.

mySite is the content URL in the following example:

http://<server or cloud URL>/#/site/mySite/explore

For Tableau Server, to specify the default site, omit contentUrl from the site element, or make the contentUrl value an empty string (contentUrl="").

For Tableau Cloud, a sign-in request must have a site element containing a contentUrl with the value of an existing site. If these are missing, the sign-in request will fail.

#### Permissions Tableau Server users who are not server administrators can switch sites, provided that they have access to the destination site. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:sites:switch ``` 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 ``` ``` #### Version Version 2.6 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authentication credentials were provided.
401401002Unauthorized accessInvalid authentication credentials were provided.
401401003Switch site errorThere was a problem switching sites. The site might be unavailable or is not found.
403403070Cannot switch to the same siteThe site specified as the destination site is also the current site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "https://MY-SERVER/api/3.29/auth/switchSite" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"-d @switch_site.xml` **Content of switch\_site.xml:** ``` ``` **Example response:** ``` ``` ## 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//webhooks//test #### Parameter Values
site-idThe ID of the site that contains the webhook.  
webhook-idThe ID of the webhook.  
#### 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 ## Unblock dashboard extension on server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Deletes a specific extension from the block list of a server. **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/-/settings/server/extensions/dashboard/blockListItems/{block\_list\_item\_luid} [view details](#) ## Unhide a Recommendation for a View - Deprecated in API 3.19 Unhides a view from being recommended by the server by removing it from the list of views that are dimissed for a user. > [!WARNING] > > Starting in API version 3.19 (Tableau Server 2023.1 / Cloud March 2023), this method is deprecated, will no longer be supported, and may be retired in future releases. If the unhidden view meets the criteria for being recommended, then it will be displayed on the server Home or Recommendation pages. #### URI DELETE /api/api-version/sites/site-id/recommendations/dismissals/?type=view&id=view-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
view-luidThe LUID of the view to be removed from the list of views hidden from recommendation for a user.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:recommendation_dismissals: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe content ID in the URI doesn't correspond to an existing content of the requested type.
404404035Recommendation not foundA hidden recommendation for the given content ID was not found.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/dismissals/?type=view&id=1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** No response body. Response code is `204`. ## Update a semantic context Partially update a semantic context. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:write\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/v1/knowledge/semantic-contexts/{ctx\_id} [view details](#) ## Update a Webhook Modify the properties of an existing webhook. #### URI PUT /api/3.8/sites//webhooks/ #### Parameter Values
site-idThe ID of the site that contains the webhook to be updated.  
webhook-idThe ID of the webhook.  
#### Request Body #### Attribute Values
webhook-name This is required. A name for the webhook.
api-event-name | webhook-source-api-event-name

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. 

Recommended: 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.

url (Optional) The destination URL for the webhook. The webhook destination URL must be https and have a valid certificate.
webhook-enabled-flag (Optional) Boolean. If true (default), the newly created webhook is enabled. If false then the webhook will be disabled.  
reason-for-disablement

The reason a webhook is disabled.

  • If isEnabled set to true, omit this parameter from your request to create a webhook, or set the value of statusChangeReason to an empty string. Providing a reason value when creating an enabled webhook will result in an error (400127).
  • If isEnabled set to false, then unless you provide a value for statusChangeReason it will default to "Webhook disabled by user".
#### 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 #### Errors
HTTP statuserror CodeConditionDetails
400400127Bad requeststatusChangeReason was provided with isEnabled = true
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Response Headers ``` Location: /api/3.29/sites/site-id/webhooks/new-webhook-id ``` ## Update analytics extension connection of site Updates the details of specified analytics extension connection for an external service to a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/analytics/connections/{connection\_luid} [view details](#) ## Update analytics extension for workbook Updates the analytics extension connection to external service currently used by a workbook. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can be called by users that have permissions to the specified workbook. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection [view details](#) ## Update Authentication Configuration Update an authentication instance. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/authn-service/auth-configurations/{id} [view details](#) ## Update Bridge Pool Updates the display name of an existing Bridge pool. The pool ID and domain/Bridge client assignments are unchanged. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-pools/pool-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
pool-idThe unique identifier (UUID) of the pool to update.
#### Request Body ``` ``` ``` { "edgePool": { "pool": { "name": "Updated Production Pool" } } } ``` #### Attribute Values
nameRequired. New display name for the pool, 1–80 characters, unique on the site (excluding the current pool).
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004 / 400929Invalid pool ID, missing name, or duplicate namePool ID must be valid UUID; name required, 1–80 characters, unique (excluding current pool).
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503901Unexpected server errorAn unexpected error occurred while updating the pool.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Cloud Extract Refresh Task Updates an extract refresh task on Tableau Cloud. _For Tableau Server, see [Update server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#update_schedule)._ **Version:** Available in API 3.20 (Tableau Cloud June 2023) and later. Virtual connection support added in API 3.30. 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:** Administrators and the owner of a custom schedule for an extract refresh task can update the schedule.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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-id/tasks/extractRefreshes/task-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
task-idThe LUID of the extract refresh task. Use Get extract refresh tasks on site to find tasks by name.
#### Request Body ``` ``` ``` { "extractRefresh": { "type": "FullRefresh", "workbook": { "id": "13237fd-6365-44d5-925b-644e5281b605" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Request Attributes All request attributes are **optional** to update a custom schedule for a subscription.
extractRefresh type enumeration: The type of extract refresh being scheduled. Valid values include:
  • FullRefresh
  • IncrementalRefresh
workbook id
or datasource id
or virtualConnection id
LUID: The LUID of the workbook, data source, or virtual connection that is the target of the custom schedule.
extractRefresh transactionLevel

(Optional) : Only used with a virtual connection.

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
startingItemId

Only used with a virtual connection, when extractRefresh type is FullRefresh

The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element. See Virtual Connection Example.

tableLuid

Only used with a virtual connection, when extractRefresh type is IncrementalExtract

The LUID of an extract table in the virtual connection. You may have more than one <tableLiud> element inside of a <tableLiuds> element. See Virtual Connection Example.

schedule frequency enumeration: The scheduled frequency for triggering the extract refresh. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
    . . . 
</frequencyDetail>
interval {interval type} string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours=“1" The number of hours between jobs. 1 is the only valid value.
  • minutes=“60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay=“weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    Copy
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
     <intervals>
Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours=“interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay=“weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    Copy
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay=“weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay=“day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month. For example, to make a schedule that that would run a job on the first and fifteenth of each month, you would use:
    Copy
    <intervals/>
      <interval monthDay="1"/>
      <interval monthDay="15"/>
    </intervals/>

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay=“occurrence_of_weekday" Weekday=“weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    Copy
    <interval monthDay="Third" weekDay="Thursday"/>

#### Virtual Connection Example When the target is a virtual connection, use `virtualConnection id` instead of `workbook id` or `datasource id`. The following example includes only the `` and child elements for brevity; see the primary example above for the a full request without the elements that apply only to virtual connections. _Incremental refresh of specific tables, with a table-level transaction:_ ``` b4e39d59-19c3-4380-8ea4-9bfa4ed8fb84 ``` #### cURL Request Example `` curl --location --request POST "https://10ax.online.tableau.com/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/tasks/extractRefreshes/r2345998-2ead-4894-bb50-1054a9109876" --header "Content-Type: application/xml" `--data " "` `` #### Response Code 200 #### Response Body For a virtual connection task, the response includes a `virtualConnection` element in place of `workbook` or `datasource`, a `transactionLevel` attribute, and a `startingItemIds` element if starting tables were set. ``` ``` ``` { "extractRefresh": { "id": "13237fd-6365-44d5-925b-644e5281b605", "consecutiveFailedCount": "0", "type": "IncrementalRefresh", "datasource": { "id": "0057ccac-872a-11e5-bb51-f763326b1350" } }, "schedule": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe request did not include a valid schedule payload.
400409004Invalid parameterA value in the request is invalid or missing. This includes an invalid or missing schedule or interval value, or start and end times that are not valid for the schedule. For hourly and daily schedules that use hour intervals, the difference between start and end must be a multiple of one hour. This error also includes transactionLevel sent for a task that is not a virtual connection task, a startingItemIds entry that is not a valid ID, or more startingItemIds entries than the maximum allowed per request.
400400225Duplicate table IDstartingItemIds contains the same table ID more than once.
400400223Table not foundA table ID in startingItemIds is not in the virtual connection's active revision.
400400224Table not in extract modeA table ID in startingItemIds refers to a table that is in live mode.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user is not authorized to make this request.
403403200Virtual connection task forbiddenThe user cannot see, or cannot manage or refresh the extract of, the virtual connection that the task refreshes.
404404026Task not foundThe task does not exist, is not an extract refresh task, or targets content that no longer exists.
404404023Schedule not foundThe task's existing schedule could not be found while merging the new schedule values.
405405000Method not allowedThe site is not on Tableau Cloud, or the task refreshes a virtual connection and virtual connection custom-schedule tasks are disabled for the site.
409409130Task state invalidThe stored virtual connection task is in an unexpected state and must be repaired or recreated.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Column Update the description of the column. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-id_/tables/_table-id_/columns/_column-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
column-idThe unique ID of the column asset.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid. Only the attributes and child elements that are included result in updates to the table. If no attributes or nested elements are included, no update is made.
new-description-value(Optional) Custom text to describe the column.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update the column: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:columns: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Column errorAn unknown table asset error occurred.
409409057Column update errorAn unknown error occurred and the table asset could not be updated.
409409058Column update forbiddenA user without "write" permissions to the table asset attempted an update.
409409066Column not foundThe requested column asset could not be found.
## Update Connected App Update a connected app. #### URI PUT api/api-version/sites/_site-id_/connected-apps/direct-trust/_client-id_ **Note:** The `connected-applications` endpoint that performed this function was deprecated in API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3), is no longer supported and may be retired in a future release. #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
client-idThe unique ID of the connected app.
#### Request Body For Tableau Cloud and Tableau Server using API 3.23 or later ``` project_id project_id project_id ``` For Tableau Server (or Tableau Cloud) using API 3.21 or earlier ``` ``` #### Attribute Values Any combination of attributes inside the element is valid.
name (Optional) The new name of the connected app.
enabled (Optional) Controls whether the connected app is enabled or not. Value can be "true" or "false". If the state is not specified, the connected app is set to "false" and not enabled by default.
project_id

(Optional, embedding workflows only) The ID of the project that the connected app's access level is scoped to. To get the project ID, see Query Projects. You can specify one project, multiple projects, and all projects on a site.

  • Single project:

    • For Tableau Cloud (using API 3.22 or later) and Tableau Server (using API 3.23 or later), to scope the connected app's access to one project, the recommended workflow is to specify the projectIds and projectId attributes and projectId value.

    • For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, specify the projectId attribute and its value.

  • Multiple projects: Beginning with API 3.22 (February 2024) for Tableau Cloud and API 3.23 for Tableau Server, you can specify the projectIds and projectId attributes and projectId values to scope the connected app's access to multiple projects.

  • All projects:

    • For Tableau Cloud (using API 3.22 or later) and Tableau Server (using API 3.23 or later), specify the projectIds attribute and do not specify values. For example, <projectIds></projectIds>.

    • For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, specify the projectId attribute and leave its value empty. For example projectId="".

    Note: If the projectIds or projectId is not included in the request, the connected apps' access level is not updated.

Note: The stand-alone projectId attribute will be retired in a future release so we recommend using projectIds attribute instead.

domainsafelist

(Optional, embedding workflows only ) A list of domains the connected app is allowed to be hosted. Specify one or more URLs, separated by spaces, using a format described in Domain allowlist rules in the Tableau Server Help or Domain allowlist rules in the Tableau Cloud Help.

Important: We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow.

For example: https://tableau.com https://myco.com:552 marketing.example.com

unrestrictedEmbedding (Optional, embedding workflows only) Controls whether the connected app can be hosted on all domains. If "true" value is specified, the connected app can trust and connect to all domains. If "false" value is specified, the connected app can only be hosted on the domains specified in the <domainSafelist> attribute.
#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:connected_apps_direct_trust: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 **Example response:** ``` d8a51b6c-bf70-4aaf-959b-93d2ba4897e6 2021-08-18T17:59:11Z ConnectedApp_MyCo true 9486dee1-ca98-4144-b6e0-f5c555e64796 1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e 1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e 2021-08-18T17:48:03Z true ``` **Notes:** - The request will return the secret associated with the connected app only if it has been previously generated. To get the secret value, see [Query Connected App Secret](#get_connectedapp_secret). - When the scope of the connected app's access is set to all projects, the request does not return the `projectId` attribute. #### Version Version 3.14 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). The resource, PUT api/api-version/sites/_site-id_/connected-apps/direct-trust/_client-id_, was added in version 3.17. The original resource, PUT api/api-version/sites/_site-id_/connected-applications/_client-id_, was deprecated in API 3.17 and will be retired in a future release. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400109Bad requestThe request body can't be empty.
400400143Generic connected app errorThe connected app could not be deleted for some other reason than those specified in this table.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404041Connected app not foundThe requested connected app could not be found.
## Update custom domain settings Updates the custom domain setup for a Tableau site. **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. [Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Only users with administrator permissions can update a site's custom domain settings. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:custom\_domains:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/customdomains/settings/site/{site\_luid} [view details](#) ## Update Custom View Changes the owner or name of an existing custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1). _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** Tableau administrators can update the owner and name of a custom view. Other users can update those attributes of any custom view that they own.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:views:update - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 PUT /api/api-version/sites/site-luid/customviews/custom-view-luid #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body ``` ``` ``` { "customView": { "name": "new-name", "owner": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a" } } } ``` #### Request Attributes
customView name(Optional) string The new name of the custom view that replaces the existing one.
owner id(Optional) LUID The LUID of the new owner of custom view that replaces the existing one.
#### cURL Request Example `curl -L -X PUT "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/37d015c6-bc28-4c88-989c-72c0a171f7aa" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg"wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq"a946d998-2ead-4894-bb50-1054a91dcab3" -H "Content-Type: application/xml" --data-raw " "` #### Response Code 200 #### Response Body ``` ``` ``` { "customView": { "id": "37d015c6-bc28-4c88-989c-72c0a171f7aa", "name": "New name 3_2514e471-95ed-4d22-92c0-da648c23891b", "createdAt": "2016-02-03T23:35:09Z", "updatedAt": "2022-10-21T04:41:27Z", "lastAccessedAt": "2022-10-21T04:43:55Z", "shared": "false", "view": { "id": "8e33ff19-a7a4-4aa5-9dd8-a171e2b9c29f", "name": "circle" }, "workbook": { "id": "2fbe87c9-a7d8-45bf-b2b3-877a26ec9af5", "name": "marks and viz types 2" }, "owner": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "name": "workgroupuser" } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update dashboard extension settings of site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings for dashboard extensions for the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/dashboard [view details](#) ## Update dashboard extensions settings of server - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings for dashboard extensions of a server **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/server/extensions/dashboard [view details](#) ## Update Data in Hyper Connection Incrementally updates data (insert, update, upsert, replace and delete) in a published data source from a live-to-Hyper connection, where the data source has multiple connections. A live-to-Hyper connection has a Hyper or Parquet formatted file/database as the origin of its data. For all connections to Parquet files, and for any data sources with a single connection generally, you can use the [Update Data in Hyper Data Source](#ref_update_data_in_hyper_data_source) method without specifying the `connection-id`. A request for this method must include an `upload-session-id` for a Hyper file payload containing an upload of the most current data from the data source for your published live-to-Hyper data. Use [Initiate File Upload](#initiate_file_upload) and [Append to File Upload](#append_to_file_upload) methods to form the payload and acquire upload-session-id. For details and examples, see [Update Data in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). **Note:** While Hyper Update REST API methods make incremental changes much more efficient, multiple simultaneous update requests and large changes in large datasets can overwhelm Tableau server background processes. To mitigate this issue, Hyper Update requests are limited by the server configuration setting `api.server.update_uploaded_file.max_size_in_mb`. Starting in Tableau Server 2022.1 / Tableau Cloud March 2022, the default for this setting is 100MB. In previous versions, the limit was set to 10MB. Where heavy incremental update traffic is expected, we recommend you use a chunking strategy to limit the size of each update, and fine tune `max_size_in_mb` value to optimize performance for your exact conditions. #### URI PATCH /api/api-version/sites/site-id/datasources/datasource-id/connections/connection-id/data?uploadSessionId=upload-session-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to update.
connection-idThe ID of the connection. To determine what connections are available for a data source, call Query Data Source Connections.
upload-session-idThe upload session ID. A user-generated identifier that is unique to a request. If the server receives more than one request with the same ID within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests.
#### Request Body This method supports only JSON content-type for the request body. ``` {"actions": [ {"action": action-type", "source-schema": "source-schema-name", "source-table": "source-table-name", "target-schema": "target-schema-name", "target-table": "target-table-name", "condition": {conditional-declaration"} . . . more action definition . . .} } {. . . more actions . . .} ]} ``` #### Attribute Values
actions-type(Required) The definition of the operation(s) to perform on the data in the target hyper file.
source-schema-name(Optional) The name of the source database schema for the data to be updated. A value is not required unless there are multiple schemas in the database.
source-table-name(Required) The name of the source database table containing the data to be updated.
target-schema-name(Optional) The name of the target hyper file schema of the data to be updated from the source database. A value is not required unless there are multiple schemas in the database.
target-table-name(Required) The name of the table containing the data to be updated in the target hyper file.
condition(Required for insert, upsert, and delete)A declaration that defines a comparison operation between source and target data or between source or target data and a user provided constant. For details and examples, see Update Data in Published Live-to-Hyper Data Sources.
An `action` is an operation to be performed on specified target data. Multiple different actions can be defined as a batch in a request. The supported actions are: - `insert` - Inserts rows from a named source-table in your data source into a named target-table in your published Hyper. A simplified example is: ``` {"action": "insert", "source-table": "added_users", "target-table": "current_users"} ``` - `update` – Updates existing tuples from a named `source-table` in your data source into a named `target-table` in your published Hyper. The tuples to be updated are defined in a condition declaration. A simplified example is: ``` {"action": "update", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "eq", "target-col": "row_id", "source-col": "update_row_id"} } ``` - `upsert` - Updates a tuple inside the `target-table`, if such a tuple exists. If no such tuple exists, a new tuple will be inserted. The tuples to be updated are defined in a condition declaration. A simplified example is: ``` {"action": "upsert", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "gt", "target-col": "row_id", "source-col": "update_row_id"} } ``` - `replace` – Deletes all tuples from a `target-table` and inserts all data from a `source-table` with a matching schema. A simplified example is: ``` {"action": "replace", "source-table": "added_users", "target-table": "current_users"} ``` - `delete` – Deletes tuples from a target-table. The tuples to be deleted are defined in a condition declaration. A simplified example is: ``` {"action": "delete", "target-table": "my_extract_table", "source-table": "deleted_row_id_table", "condition": {"op": "gt", "target-col": "id", "source-col": "deleted_id"} } ``` For more information, see [Update Data in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). #### Permissions The user calling this method must be the data source owner and must have the overwrite permission on it. #### Request Header In addition to the typical authentication token, the following fields must be specified as part of the request header: - `content-type: application/json` - This endpoint accepts JSON only. - `RequestID` - A user-generated identifier that uniquely identifies a request. If the server receives more than one request with the same id within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests, which prevents executing the same job more than once could be caused by network anomalies or client crashes. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:hyper_data: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 The response body returns the job-id, which specifies the ID of the async job that will carry out the data operations described in the action batch. This returned "job-id" can be used to [query the status of the update job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) or to [cancel a scheduled job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#cancel_job). ``` (job-id: "scheduled-job-luid"} ``` #### Version Version 2o21.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed JSON.
400400008Invalid parameter valueA parameter in the request body is missing or invalid.
403403062Update data source multiple connections forbiddenA connection ID is required because the data source has multiple connections. Consider using Update Data in Hyper Connection to specify the connection. (This error does not apply to that Connection method)
403403032Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source LUID in the request body doesn't correspond to an existing data source.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404008Operation not supportedThe operation requested is not supported, the source data for the connection must be a Hyper file/database.
404404020Connection not foundNo resource was found for the specified connection and data source. (This error does not apply to Update Data in Hyper Data Source)
405405000Invalid request methodRequest type was not PATCH.
409409015Data source name conflictThe data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.
409409094Data update job already existsA data update job for the datasource is already queued or in progress.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data in Hyper Data Source Incrementally updates data (insert, update, upsert, replace and delete) in a published data source from a live-to-Hyper connection, where the data source has a single connection. A live-to-Hyper connection has a Hyper or Parquet formatted file/database as the origin of its data. For data sources with multiple connections, you can specify which to update using the [Update Data in Hyper Data Source](#ref_update_data_in_hyper_data_connection) method. A request for this method must include an `upload-session-id` for a Hyper file payload containing an upload of the most current data from the data source for your published live-to-Hyper data. Use [Initiate File Upload](#initiate_file_upload) and [Append to File Upload](#append_to_file_upload) methods to form the payload and acquire upload-session-id. For details and examples, see [Update Data in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). **Note:** While Hyper Update REST API methods make incremental changes much more efficient, multiple simultaneous update requests and large changes in large datasets can overwhelm Tableau server background processes. To mitigate this issue, Hyper Update requests are limited by the server configuration setting `api.server.update_uploaded_file.max_size_in_mb`. Starting in Tableau Server 2022.1 / Tableau Cloud March 2022, the default for this setting is 100MB. In previous versions, the limit was set to 10MB. Where heavy incremental update traffic is expected, we recommend you use a chunking strategy to limit the size of each update, and fine tune `max_size_in_mb` value to optimize performance for your exact conditions. **Working with Parquet files** \- When publishing a Parquet file to a data source through a live-to-Hyper connection, the files are converted to Hyper files. You may want to publish a copy of your original Parquet file to retain that data in its native format. \- A data source with a live-to-Hyper connection to data in a Hyper file converted from Parquet can only have a single connection. \- When incrementally updating that data from that connection, using the Update Hyper in Data Source method, the Parquet file is not converted to Hyper. #### URI PATCH /api/api-version/sites/site-id/datasources/datasource-id/data?uploadSessionId=upload-session-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to update.
upload-session-idThe upload session ID. A user-generated identifier that is unique to a request. If the server receives more than one request with the same ID within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests.
#### Request Body This method supports only JSON content-type for the request body. ``` {"actions": [ {"action": action-type", "source-schema": "source-schema-name", "source-table": "source-table-name", "target-schema": "target-schema-name", "target-table": "target-table-name", "condition": {conditional-declaration"} . . . more action definition . . .} } {. . . more actions . . .} ]} ``` #### Attribute Values
actions-type(Required) The definition of the operation(s) to perform on the data in the target hyper file.
source-schema-name(Optional) The name of the source database schema for the data to be updated. A value is not required unless there are multiple schemas in the database.
source-table-name(Required) The name of the source database table containing the data to be updated.
target-schema-name(Optional) The name of the target hyper file schema of the data to be updated from the source database. A value is not required unless there are multiple schemas in the database.
target-table-name(Required) The name of the table containing the data to be updated in the target hyper file.
condition(Required for insert, upsert, and delete)A declaration that defines a comparison operation between source and target data or between source or target data and a user provided constant. For details and examples, see Update Data in Published Live-to-Hyper Data Sources.
An `action` is an operation to be performed on specified target data. Multiple different actions can be defined as a batch in a request. The supported actions are: - `insert` - Inserts rows from a named source-table in your data source into a named target-table in your published Hyper. A simplified example is: ``` {"action": "insert", "source-table": "added_users", "target-table": "current_users"} ``` - `update` – Updates existing tuples from a named `source-table` in your data source into a named `target-table` in your published Hyper. The tuples to be updated are defined in a condition declaration. A simplified example is: ``` {"action": "update", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "eq", "target-col": "row_id", "source-col": "update_row_id"} } ``` - `upsert` - Updates a tuple inside the `target-table`, if such a tuple exists. If no such tuple exists, a new tuple will be inserted. The tuples to be updated are defined in a condition declaration. A simplified example is: ``` {"action": "upsert", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "gt", "target-col": "row_id", "source-col": "update_row_id"} } ``` - `replace` – Deletes all tuples from a `target-table` and inserts all data from a `source-table` with a matching schema. A simplified example is: ``` {"action": "replace", "source-table": "added_users", "target-table": "current_users"} ``` - `delete` – Deletes tuples from a target-table. The tuples to be deleted are defined in a condition declaration. A simplified example is: ``` {"action": "delete", "target-table": "my_extract_table", "source-table": "deleted_row_id_table", "condition": {"op": "gt", "target-col": "id", "source-col": "deleted_id"} } ``` For more information, see [Update Data in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). #### Permissions The user calling this method must be the data source owner and must have the overwrite permission on it. #### Request Header In addition to the typical authentication token, the following fields must be specified as part of the request header: - `content-type: application/json` - This endpoint accepts JSON only. - `RequestID` - A user-generated identifier that uniquely identifies a request. If the server receives more than one request with the same id within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests, which prevents executing the same job more than once could be caused by network anomalies or client crashes. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:hyper_data: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 The response body returns the job-id, which specifies the ID of the async job that will carry out the data operations described in the action batch. This returned "job-id" can be used to [query the status of the update job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) or to [cancel a scheduled job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#cancel_job). ``` (job-id: "scheduled-job-luid"} ``` #### Version Version 2o21.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed JSON.
400400008Invalid parameter valueA parameter in the request body is missing or invalid.
403403062Update data source multiple connections forbiddenA connection ID is required because the data source has multiple connections. Consider using Update Data in Hyper Connection to specify the connection. (This error does not apply to that Connection method)
403403032Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source LUID in the request body doesn't correspond to an existing data source.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404008Operation not supportedThe operation requested is not supported, the source data for the connection must be a Hyper file/database.
404404020Connection not foundNo resource was found for the specified connection and data source. (This error does not apply to Update Data in Hyper Data Source)
405405000Invalid request methodRequest type was not PATCH.
409409015Data source name conflictThe data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.
409409094Data update job already existsA data update job for the datasource is already queued or in progress.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data Quality Warning Update the warning type, status, and message of a data quality warning. **Note:** Data quality warnings and certifications can be more generally managed through the newer **Labels** methods. Tableau recommends using them to help ensure that you can manage your assets as new features are developed. Try the [Update Label](#update_label) method instead. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-id_/dataQualityWarnings/_dataqualitywarning-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
dataqualitywarning-idThe unique ID of the data quality warning.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid, but the data quality warning type is required. If the data quality warning type is not included, an error is thrown.
type

Type of data quality warning to apply to the asset. To specify the type, use one of the following values:

  • DEPRECATED
  • WARNING
  • STALE
  • MAINTENANCE

Note: In Tableau Server 2023.1 and earlier, SENSITIVE_DATA is another type of data quality warning. Starting in Tableau Cloud June 2023 and Tableau Server 2023.3, it's a sensitivity label instead.

These values are not case sensitive.

status

(Optional) Controls whether the data quality warning displays. Value can be "true" or "false". If the state is not specified, the data quality warning is set to "true" and is visible by default.

message

(Optional. Was required in Tableau Server 2023.3 and earlier.)

A custom message to accompany the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.

severity (Optional) Enables high visibility for the data quality warning when set to "true". Values can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update the data quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400109Bad requestThe request body can't be empty.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
404404030Data quality warning not foundThe data quality warning for the requested asset could not be found.
## Update Data Source Updates the owner, project or certification status of the specified data source. **Version**: Available in API 2.0 and later. **License**: No additional license required. **Permissions**: You can update data source details if you are a Tableau administrator (Creator). Specific properties can be updated by other users depending on the type of update action and the permissions granted to the user. - Users who are not server administrators can move a data source from one project to another if they own the data source or the current (source) project, or are a project leader for the current project, and they have Write permission for the destination project. - Users can change certification status and the certification note if they are server administrators, site administrators, or project leaders for the current project. - Users can modify the name of the data source if: they have server administrator, site administrator (Creator) or Creator permissions and access to the data source with the overwrite capability. **Access Scope**: `tableau:datasources:update` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/datasources/datasource-id **Note:** Starting in 2021.2, you can also modify (insert, update, upsert, replace, and delete) data in a published data source that is a live-to-Hyper connection. To do this, use the [Update Data in Hyper Data Source](#update_data_in_hyper_data_source) method, or for data sources with multiple connections, use the [Update Data in Hyper Connection](#update_data_in_hyper_connection) method. For more information, see [UpdateData in Published Live-to-Hyper Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
datasource-luidThe LUID of the data source to update.
#### Request Body ``` ``` ``` { "datasource": { "name": "Sales", "isCertified": "true", "certificationNote": "This is a certification note.", "encryptExtracts": "false", "project": { "id": "56c86f04-b834-4a08-a561-86497bb4b2df" }, "owner": { "id": "20148c74-7818-4eb8-b2a1-9f3f5f582613" }, "askData": { "enablement": "true [REMOVED IN API 3.12]" } } } ``` #### Request Attributes
datasource name (Optional) The new name of a the data source.
project (Optional) The LUID of a project to add the data source to.
owner (Optional) The LUID of a user to assign the data source to as owner.
datasource certification-status (Optional) A Boolean value that indicates whether the data source is certified. To learn more about data source certification, see Use Certified and Recommended Data Sources and Tables.
datasource certification-note (Optional) A note that provides more information on the certification of the data source, if applicable.
datasource encryptExtracts (Optional) true to encrypt the extracts or false to not encrypt extracts. For more information, see Extract and Encryption Methods.
askDataEnablement

This attribute is removed in API 3.12 and later (Tableau Cloud September 2021 / Server 2021.3).

(Optional) Determines if a data source allows use of Ask Data. The value can be Enabled, Disabled, or SiteDefault.

If enablement is not specified, Ask Data availability for the data source is unchanged during this update. If the askData element is included, it must contain an enablement attribute. Setting the value of enablement to SiteDefault for a data source will cause its enablement to follow the site's settings for Availability of Ask Data. A value of Enabled or Disabled will override a site's settings for the data source unless the setting Always disable Ask Data is selected. In that case, Ask Data will not be available for the data source regardless of the value of enablement.

Any combination of the attributes inside the element is valid. Only the attributes and child elements that are included result in updates to the data source. If no attributes or nested elements are included, no update is made. If the element is included, the id attribute must be included, and any other attributes of the element are ignored. If the element is included, the id attribute must be included, and any other attributes of the owner are ignored. #### cURL Example ``` curl --location --request GET "https://MY_SERVER/api/3.16/sites/a946d998-2ead-4894-bb50-1054a91dcab3/datasources" \ --header "X-Tableau-Auth: b09KVmT7QxuLVLv1En7iMg"oxKwSGTYT0WKRes5xk3dgI4gIkG3TM8W"a946d998-2ead-4894-bb50-1054a91dcvv8" \ --header "Content-Type: application/xml" \ --data-raw " " ``` #### Response Code 200 #### Response Body ``` ``` ``` { "datasource": { "name": "Sales", "id": "75b71d2f-e8d3-42af-b654-d953659326ee", "contentUrl": "mySite", "type": "excel-direct", "createdAt": "2016-02-12T23:36:09Z", "updatedAt": "2020-12-16T15:33:03Z", "isCertified": "false", "certificationNote": "This is a certification note.", "encryptExtracts": "false", "project": { "id": "56c86f04-b834-4a08-a561-86497bb4b2df" }, "owner": { "id": "20148c74-7818-4eb8-b2a1-9f3f5f582613" }, "job": { "id": "65348c74-7818-4eb8-b2a1-9f3f5f588870" }, "askData": { "enablement": "true [REMOVED IN API 3.12]" } } } ``` The `createdAt` and `updatedAt` attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400008Invalid parameter valueA user attempted to rename a datasource to a name containing only spaces, or to a name with more 255 characters.
400400129Invalid Ask Data enablementThe requested enablement setting in the request body does not correspond to the site configuration.
403403027Owner update forbiddenA non-administrator user tried to change the owner for the data source.
403403030Project update forbiddenA non-administrator user tried to change the project for the data source, but the caller doesn't have Write permission for the project.
403403032Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
403403141Update forbiddenA user attempted to update a data source that they do not have permissions to update.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002Owner not foundThe owner ID in the request body doesn't correspond to an existing owner.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not PUT or PATCH.
409409015Data source name conflictThe data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data Source Connection Updates the server address, port, authentication type, username, or password for the specified data source connection. If the data source contains multiple connections, all the connections are updated. To update specific connections in a data source containing multiple connections, see [Update Data Source Connections](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connections). **Version**: Available in API 2.3 and later. **License**: No additional license required. **Permissions**: Users who are server administrators or site administrators can change the connection for a data source or enable [query tagging](https://help.tableau.com/current/pro/desktop/en-us/performance_tips.htm). Users who are not server administrators can only update a data source. If they have Write (save) permission for the data source and if they have write permission for the project. **Access Scope**: `tableau:datasources:update` - Access scope introduced in API 3.16 (Tableau Cloud June 2022 / Server 2022.3) For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/datasources/datasource-id/connections/connection-id #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
datasource-luidThe LUID of the data source to update.
connection-luidThe LUID of the connection to update. To determine what connections are available for a data source, call Query Data Source Connections.
#### Request Body ``` ``` ``` { "connection": { "serverAddress": "newAddress", "serverPort": "newPort", "userName": "Jane Doe", "authenticationType": "new Auth Type", "password": "xxxxxx", "embedPassword": "false", "queryTaggingEnabled": "false" } } ``` #### Request Attributes
connection serverAddress The new server for the connection.
connection serverPort The new port for the connection
connection authenticationType Added in version 3.27.

*The new authentication type for the connection.

Standard values:

  • auth-user-pass: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a data source or workbook that is currently using the target authentication type, you can query for it using the REST API methods Query Datasource Connections or Query Workbook Connections, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a workbook or data source which is available locally. Look for the value of the authentication attribute of the connection.

connection userName The new username for the connection.
connection password The new password for the connection.
embedPassword True to embed the password; otherwise, False.
queryTaggingEnabled

[!WARNING]

Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the queryTaggingEnabled attribute is deprecated, will no longer be supported, and may be retired in future releases.

Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by setting native_api.UserInfoInGeneratedSQLEnabled to true.

For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If true, query tagging is enabled. If false, query tagging is disabled. The default is false.

For more information on query tagging, see Understand Workbook Impact on Your Database Using Query Tagging.

Any combination of the attributes inside the element is valid. If no attributes are included, no update is made. #### cURL Request Example ``` curl --location --request PUT "/api/api-version/sites/site-id/datasources/datasource-id/connections/connection-id" \ --header "Content-Type: application/json" \ --header "X-Tableau-Auth: ZOjZ-2-xRfmShEJLk3LCKQ|KVZTJA7K1YeNuuJwXSKUKSatWRn9Vbpe|11e4e373-9777-44d1-ac04-5363d6e8092e" \ --data "{ 'connection': { 'serverAddress': 'newAddress', 'serverPort': 'newPort', 'userName': 'Jane Doe', 'authenticationType': 'new Auth Type', 'password': 'xxxxxx', 'embedPassword': 'false', 'queryTaggingEnabled': 'false' }" ``` #### Response Code 200 #### Response Body ``` ``` ``` { "connection": { "id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "serverAddress": "database.example.com", "serverPort": "12345", "authenticationType": "new Auth Type", "userName": "jajohnson", "queryTaggingEnabled": "false" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403023Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
403403027Owner update forbiddenA non-administrator user tried to change connection information, but the caller doesn't have Write permission.
403403062Unsupported operationThe data source contains multiple connections, but the URI did not include /connections/connection-id to indicate which connection should be updated.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data Source Connections Updates the server address, port, authentication type, username, or password for one or more connections in a data source. To update all connections in a given data source with the same connection information, see [Update Data Source Connection](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection). **Version**: Available in API 3.27 and later. **License**: No additional license required. **Permissions**: Users who are server administrators or site administrators can change the connection for a data source or enable [query tagging](https://help.tableau.com/current/pro/desktop/en-us/performance_tips.htm). Users who are not server administrators can only update a data source. If they have Write (save) permission for the data source and if they have write permission for the project. **Access Scope**: `tableau:datasources:update` - Access scope introduced in API 3.16 (Tableau Cloud June 2022 / Server 2022.3) For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/datasources/datasource-id/connections/ #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
datasource-luidThe LUID of the data source to update.
#### Request Body ``` Luid1 Luid2 ``` ``` { "connectionLuids": [ "Luid1", "Luid2" ], "connection": { "serverAddress": "newAddress", "serverPort": "newPort", "authenticationType": "new Auth Type", "userName": "Jane Doe", "password": "xxxxxx", "embedPassword": "false", "queryTaggingEnabled": "false" } } ``` #### Request Attributes
connectionLuids An array of connection LUIDs in the data source that you are updating.
connection serverAddress The new server for the connection.
connection serverPort The new port for the connection
connection authenticationType

*The new authentication type for the connection.

Standard values:

  • auth-user-pass: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a data source or workbook that is currently using the target authentication type, you can query for it using the REST API methods Query Datasource Connections or Query Workbook Connections, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a workbook or data source which is available locally. Look for the value of the authentication attribute of the connection.

connection userName The new username for the connection.
connection password The new password for the connection.
embedPassword True to embed the password; otherwise, False.
queryTaggingEnabled

[!WARNING]

Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the queryTaggingEnabled attribute is deprecated, will no longer be supported, and may be retired in future releases.

Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by setting native_api.UserInfoInGeneratedSQLEnabled to true.

For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If true, query tagging is enabled. If false, query tagging is disabled. The default is false.

For more information on query tagging, see Understand Workbook Impact on Your Database Using Query Tagging.

Any combination of the attributes inside the element is valid. If no attributes are included, no update is made. #### cURL Request Example ``` curl --location --request PUT "/api/api-version/sites/site-id/datasources/datasource-id/connections/" \ --header "Content-Type: application/xml" \ --header "X-Tableau-Auth;" \ --data "{ 'connectionLuids': [ 'Luid1', 'Luid2' ], 'connection': { 'serverAddress': 'newAddress', 'serverPort': 'newPort', 'authenticationType': 'new Auth Type', 'userName': 'Jane Doe', 'password': 'xxxxxx', 'embedPassword': 'false', 'queryTaggingEnabled': 'false' } }" ``` #### Response Code 200 #### Response Body ``` ``` ``` { "connection": { "id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "serverAddress": "database.example.com", "serverPort": "12345", "authenticationType": "new Auth Type", "userName": "jajohnson", "queryTaggingEnabled": "false" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403023Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
403403027Owner update forbiddenA non-administrator user tried to change connection information, but the caller doesn't have Write permission.
403403062Unsupported operationThe data source contains multiple connections, but the URI did not include /connections/connection-id to indicate which connection should be updated.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Data Source Now Runs an extract refresh on the specified data source. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). **Version**: Available in API 2.8 and later. **License**: No additional license required. **Permissions**: Users who are not server administrators or site administrators can only refresh extracts for data sources if they own the data source, or if they are the project leader for the project. **Access Scope**: `tableau:tasks:run` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This method runs an extract refresh for the specified data source, with no need to associate that extract refresh with a scheduled task. This method is the equivalent of selecting a data source using the Tableau Server UI, and then selecting **Refresh Extracts** from the menu (also known as a "manual refresh"), however, the REST method always runs a full refresh even if the refresh type is set to incremental. Similar to a manual refresh, if the extract is a `.tde` file, it will be converted to a `.hyper` file as a result of the refresh. To learn more about extract upgrades to the `.hyper` file format, see [Extract Upgrade to .hyper Format](https://help.tableau.com/current/server/en-us/extracting_upgrade.htm). #### URI POST /api/api-version/sites/site-id/datasources/datasource-id/refresh #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to refresh.
#### Request Body As of version 3.28, you can specify an incremental refresh on extracts by updating the request body as follows: ``` ``` { "extractRefresh": { "@incremental": "true" } } #### Response Code 202 #### Response Body ``` ``` ``` { "job": { "id": "job-id", "mode": "Asynchronous", "type": "RefreshExtract", "createdAt": "date-time", "extractRefreshJob": { "datasource": { "id": "datasource-id", "name": "datasource-name", "incremental"="true" } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user attempted to update a data source, but the caller doesn't have sufficient permissions.
404404000Site not foundThe site ID in the URI is unknown.
404404004Data source not foundThe data source ID in the URI is unknown.
405405000Invalid request methodRequest type was not POST.
409409093Operation already in QueueThe extract refresh job is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/datasources/89a82d78-664f-45a1-8256-d4d2961a070b/refresh" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" –d @empty-tsrequest.xml" ``` **Content of empty-tsrequest.xml:** ``` ``` **Example response:** ``` ``` ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data-driven alert.
data-alert-idThe ID of the data-driven alert. You can obtain this ID by calling Query Data-Driven Alerts.
**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 ``` ``` #### Attribute Values
data-alert-subject(Optional) The string to set as the new subject of the alert.
data-alert-frequency(Optional) The frequency of the data-driven alert: once, frequently, hourly, daily, or weekly.
data-alert-owner-id(Optional) The ID of the user to assign as owner of the data-driven alert.
is-public-flag(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.
#### Response Code 200 #### Response Body ``` ``` The createdAt and updatedAt attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Errors
HTTP statuserror CodeConditionDetails
403403004Write forbiddenA user called this method who does not have the required permissions.
403409030Updating data-driven alert forbiddenThe user is not authorized to update the data-driven alert.
404409023Resource Not FoundThe data-driven alert ID specified in the URI is invalid.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404002Resource Not FoundThe user ID specified in the request body is invalid.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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:** ``` ``` **Example response:** ``` ``` ## Update Database Update the database description, certify a database, set database permissions, or assign a Tableau Cloud or Server user as the database contact. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-luid_/databases/_database-luid_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site asset.
database-luidThe LUID of the database asset.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes inside the **** element is valid. Only the attributes and child elements that are included result in updates to the database asset. If no attributes or nested elements are included, no update is made.
certification-status

(Optional) Certify or remove certification by using the following:

  • True
  • False
certification-note (Optional) Custom text to accompany the certification status.
new-description-value (Optional) Custom text to describe the database asset.
new-content-permissions

(Optional) The new permissions setting for the database. You can specify one of the following:

  • LockedToDatabase to lock permissions so that users cannot overwrite the default permissions set for the database asset.
  • ManagedByOwner to allow users to manage permissions for the database asset used by the content that they own.

The default permissions setting is ManagedByOwner. These values are case sensitive.

new-contact-luid (Optional) The LUID of the Tableau Server or Tableau Cloud user to associate with the database asset.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update the database asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:databases: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 **Example response:** ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site LUID in the URI doesn't correspond to an existing site.
404404031Database not foundThe requested database could not be found.
409409045Database errorAn unknown database asset error occurred.
409409050Database update errorAn unknown error occurred and the database asset could not be updated.
409409051Database update forbiddenA user without "write" permissions to the database asset attempted an update.
## Update Domain Among Pools Moves a domain from its current pool to a different pool. The operation is atomic (all-or-nothing); on failure the domain mapping is unchanged. This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-domain-maps/change-pool-assignment #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "example.com", "newPoolLuid": "ebae40a5-d7e4-4214-b3d5-b0715c627b71" } } ``` #### Attribute Values
existingDomainNameRequired. The domain to move.
newPoolLuidRequired. The UUID of the target Bridge pool.
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid domain name, invalid pool ID, domain not found, or pool not foundDomain and pool ID must be valid; domain and pool must exist on the site.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503906Unexpected server errorAn unexpected error occurred while updating the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Domain Name Updates an existing domain mapping by renaming the domain. The operation is atomic (all-or-nothing). This method is not available for Tableau Server. **Version**: Available in API 3.28 (Tableau Cloud March 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-domain-maps/update-domain-name #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "bridgeDomain": { "existingDomainName": "existing-domain.com", "newDomainName": "new-domain.com" } } ``` #### Attribute Values
existingDomainNameRequired. The current domain name.
newDomainNameRequired. The new domain name. Must not already exist in the system.
#### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid existing/new domain name, domain not found, or new name existsDomain names must conform to valid format; existing domain must exist; new name must not already be in use.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403403000Insufficient permissionsUser does not have Site Administrator role.
429429000Rate limit exceededToo many requests sent in a given time period.
500503906Unexpected server errorAn unexpected error occurred while updating the domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update EAS Update a connected app with OAuth 2.0 trust. **Notes:** - Beginning in API version 3.22, you can register multiple EASs per site for Tableau Cloud. - Beginning in API version 3.23, Tableau Server supports site-level EAS (and multiple registrations of EASs per site). #### URI PUT api/_api-version_/sites/_site-id_/connected-apps/external-authorization-servers/_eas-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
eas-idThe unique ID of the registered EAS.
#### Request Body ``` ``` #### Attribute Values A combination of attributes inside the element is valid.
URL (Optional) The entity id of your identity provider (IdP) or URL that uniquely identifies your IdP.
URI

(Optional) The JSON Web Key (JKWS) of the EAS.

name

(Optional) The name of the connected app. If the name attribute is not specified, the connected app name defaults to "External Authorization Server."

This attribute is available starting from API version 3.22 (February 2024).

#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:external_authorization_servers: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 The request returns details about the EAS, including the following: - ``: The name of the connected app. - ``: The ID of the EAS. - `:` The issuer URL of the EAS. - `:` The JSON web key set (JWKS) of the EAS. **Example response:** ``` EAS_2 50bdc8cd-1aa4-48fe-a0e7-68982d85daa8 https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7 https://dev-57741098.okta.com/jwks.json 2022-04-07T03:50:34Z ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23). #### Errors
HTTP statuserror CodeConditionDetails
400400008Issuer URL missingThe request body contains an empty issuer URL attribute.
400400157Unexpected EAS errorThere was an unexpected error when updating the connected app.
400400194Issuer URL already configuredAnother connected app on the site is using the same issuer URL.
403403000Admin permissions requiredA non-admin user called this method and doesn't have adequate permissions to perform the action.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404047EAS not foundThe requested EAS could not be found.
## Update Embedding Settings for Site Updates the embedding settings for a site. Embedding settings can be used to restrict embedding Tableau views to only certain domains. This setting impacts all embedding scenarios including Tableau Javascript API v2, Embedding API v3, and the embed code from the share dialog. For more information, see [Tableau Site Settings for Embedding](https://help.tableau.com/current/api/embedding_api/en-us/docs/embedding_api_site.html) in the Tableau Embedding API v3 Help. Beginning in version 2023.2 (June 2023) for Tableau Cloud and in version 2023.3 for Tableau Server, this setting might impact embedding scenarios that use Tableau connected apps. For more information, see the "Control where content can be embedded" section in the connected apps topics in the [Tableau Cloud Help](https://help.tableau.com/current/online/en-us/connected_apps_eas.htm#allowlist) or [Tableau Server Help](https://help.tableau.com/current/server/en-us/connected_apps_eas.htm#allowlist). #### URI PUT /api/api-version/sites/site-id/settings/embedding #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to update.
#### Request Body ``` ``` **Example request:** ``` ``` #### Request Attribute Values
unrestricted-embedding

(Optional) Specifies whether or not embedding is restricted.

When the setting is set to true, Tableau views on this site can be embedded in any domain.

When set to false, embedding is blocked for all domains, but you can allow embedding in certain domains using the allowList attribute.

allow-list

(Optional) Specifies the domains where Tableau views on this site can be embedded. Use this setting with unrestrictedEmbedding setting to restrict embedding functionality to only certain domains.

Important: We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow.

You can use wildcards in domain names and you can also list multiple domain names separated by spaces.

#### Permissions Any Tableau Cloud or Tableau Server user can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:embedding_site_settings: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 ``` ``` #### Version Version 3.16 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
403 403500 The user does not have permission

Tableau Cloud: Only site administrators can run this method.

#### Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d/settings/embedding" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-sembedding-settings.xml` **Content of update-embedding-settings.xml:** ``` ``` For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update enabled state of analytics extensions on site Enables or disables analytics extensions on a site. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server or site administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:analytics\_extensions:update\`. Added in API 3.28. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/analytics [view details](#) ## Update Flow Updates the project and/or owner of the specified flow. To change the flow owner with fewer limitations on who the new owner can be, use the [Update Flow Owner](#update_flow_owner) method instead. #### URI PUT /api/api-version/sites/site-id/flows/flow-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to update.
#### Request Body #### Attribute Values
new-project-id(Optional) The ID of a project to add the flow to.
new-owner-id(Optional) The ID of a user to assign the flow to as owner. The new owner must be the user calling this method.
Any combination of the attributes inside the **** element is valid. Only the attributes and child elements that are included result in updates to the flow. If no attributes or nested elements are included, no update is made. If the **** element is included, the **id** attribute must be included, and any other attributes of the **** element are ignored. If the **** element is included, the **id** attribute must be included, and any other attributes of the owner are ignored. #### Permissions Tableau Server users who are server administrators or site administrators can change the owner for a flow. Users who are not server administrators can move a flow from one project to another if they own the flow or the current (source) project, or are a project leader for the current project, and they have Write permission for the destination project. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flows: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 ``` ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403098Owner update forbiddenA non-administrator user tried to change the owner for the flow.
403403030Project update forbiddenA non-administrator user tried to change the project for the flow, but the caller doesn't have Write permission for the project. 
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002Owner not foundThe owner ID in the request body doesn't correspond to an existing owner. 
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project. 
409409041Flow name conflictThe flow name in the request already belongs to the specified site. For the purpose of uniqueness checks, flow names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example **Example response:** ``` ``` ## Update Flow Connection Updates the server address, port, username, or password for the specified flow connection. The connection can be an input or an output connection. #### URI PUT /api/api-version/sites/site-id/flows/flow-id/connections/connection-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to update.
connection-idThe ID of the connection to update. To determine what connections are available for a flow, call Query Flow.
#### Request Body ``` ``` #### Attribute Values Any combination of the attributes inside the **** element is valid. You will need to provide at least one attribute. If no attributes are included, this will result in an error.
serverAddress The new server for the connection.
port The new port for the connection.
userName The new username for the connection.
password The new password for the connection.
embedPassword true to embed the password; otherwise, false.
authenticationType Added in API 3.28.

The new authentication type for the connection.

Standard values:

  • Username Password: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a flow that is currently using the target authentication type, you can query for it using the REST API method Workbooks and Views Methods, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a flow, which is available locally. Look for the value of the authentication attribute of the connection.

#### Permissions Only Tableau Server users who are server administrators or Tableau Cloud site administrators can change the connection for a flow. Users who are not server administrators can update a flow only if they have Write(save) permission for the flow and if they have **Write** permission for the project. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:flow_connections: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 ``` ``` #### Version Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403103Update forbiddenA non-administrator user tried to update a flow, but the caller doesn't have Write permission.
403403098Owner update forbiddenA non-administrator user tried to change connection information for the flow, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Flow Connections Updates the server address, port, username, or password for one or more flow connections. The connection can be an input or an output connection. **Version**: Available in API 3.28 (Tableau Cloud April 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Only users who are Tableau Server administrators or Tableau Cloud site administrators can change the connection for a flow. Users who are not Tableau Server administrators or Tableau Cloud site administrators can update a flow only if they have Write(save) permission for the flow and if they have **Write** permission for the project. **Access Scope**: `tableau:flow_connections:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/flows/flow-id/connections #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow to update.
#### Request Body ``` ``` ``` { "connections": { "connection": [ { "id": "f63809db-abe9-454c-96dc-0f2f1b065a55", "serverAddress": "myco.com", "serverPort": "1234" }, { "id": "7bc5d700-bbc9-4ec3-9225-121f2846b5e7", "userName": "snguyen", "embedPassword": "false" } ] } } ``` #### Attribute Values Any combination of the attributes inside the **** element is valid. You will need to provide at least one attribute. If no attributes are included, this will result in an error.
id The ID of the flow connection to update.
serverAddress The new server for the connection.
port The new port for the connection.
userName The new username for the connection.
password The new password for the connection.
embedPassword true to embed the password; otherwise, false.
authenticationType

The new authentication type for the connection.

Standard values:

  • Username Password: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a flow that is currently using the target authentication type, you can query for it using the REST API method Workbooks and Views Methods, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a flow, which is available locally. Look for the value of the authentication attribute of the connection.

#### cURL Request Example ``` curl "https://MY-SERVER/api/api-version/sites/site-id/flows/flow-id/connections" -X PUT -H "X-Tableau-Auth: auth-token" -H "Content-Type: application/xml" -d '' ``` #### Response Code 200 #### Response Body ``` ``` ``` { "connection": [ { "id": "f63809db-abe9-454c-96dc-0f2f1b065a55", "useOAuthManagedKeychain": "false", "embedPassword": "true", "serverAddress": "myco.com", "serverPort": "1234", "userName": "snguyen" }, { "id": "7bc5d700-bbc9-4ec3-9225-121f2846b5e7", "useOAuthManagedKeychain": "false", "embedPassword": "false", "serverAddress": "myco.com", "userName": "snguyen" } ] } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403103Update forbiddenA non-administrator user tried to update a flow, but the caller doesn't have Write permission.
403403098Owner update forbiddenA non-administrator user tried to change connection information for the flow, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404027Flow not foundThe flow ID in the URI doesn't correspond to an existing flow.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Flow Owner Updates a flow's owner. If the same user owns all the flows in a linked task, this method also changes the ownership of the linked task to that user. This method overlaps in function with [Update Flow](#update_flow) method, but has fewer limitations on who the new owner can be. If you're changing the owner of a flow, Tableau recommends you use this method. **Version**: Available in API 3.27 (Tableau Cloud December 2025 / Server 2025.3) and later. **License**: Data Management or Tableau+. **Permissions**: Server administrators, site administrators, or flow owner **Access Scope**: `tableau:flows:update` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/flows/flow-id/owner/user-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the flow.
flow-idThe ID of the flow.
user-idThe ID of the user.
#### Request Body None #### cURL Request Example ``` curl -X PUT "https://MY-SERVER/api/3.27/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/flows/08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6/owner/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -H "Content-Type: application/xml" -H "X-Tableau-Auth: a1B2c3D4e5F6g7H8i9J0kL|a1B2c3D4e5F6g7H8i9J0kL1m2N3o4P5q|12345678-90ab-4cde-8f01-234567890abc" ``` #### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
403403184Ownership changes are disabledOn Tableau Server, a machine administrator can use TSM to to enable or disable content ownership changes. For more information, see wgserver.change_owner.enabled in tsm configuration set Options
403403187Permission deniedYou must be a site administrator, a server administrator, or the flow owner to change the ownership of a flow.
404404061Resource not foundThe flow id and/or user id can't be found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Group Updates a group on a Tableau Cloud site or Tableau Server. **Tableau Cloud** If the Tableau Cloud site is configured to use local authentication, the method lets you update the group name. **Tableau Server** If Tableau Sever is configured to use local authentication, the method lets you update the group name. If Tableau Server is configured to use Active Directory authentication, the method synchronizes the group with Active Directory. During synchronization, the method updates the group and modifies the set of users in the group to be the same as those in Active Directory. Users in Active Directory that are not in the group on Tableau Server are added to the group, and users that are not in the Active Directory group are removed from the group. Users that are no longer in Active Directory at all are unlicensed. If the update synchronizes with Active Directory, Tableau Server can perform the update either immediately (synchronously) or by using a background job (asynchronously). If Active Directory contains a large number of users, you should perform the synchronization process as a background job so that the process doesn't time out. By default, synchronizing with Active Directory is performed immediately (synchronously). #### URI PUT /api/api-version/sites/site-id/groups/group-id PUT /api/api-version/sites/site-id/groups/group-id?asJob=asJob-value #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the group.
group-id The ID of the group to update.
AsJob-value A Boolean value that is used if you are importing from Active Directory. Set this value to true to synchronize with Active Directory as a background task, or set this value to false to synchronize immediately (synchronously). The default is false.

Note: This parameter has no effect if the server is configured to use local authentication.

This attribute is available for Tableau Server only.

#### Request Body **Updating a local group** ``` ``` When the request is to update a local group and minimumSiteRole is specified, users are granted a license using the grant license on-login mode by default. **Updating an Active Directory group** (Tableau Server only) ``` ``` When the request body contains an element, and if Tableau Server or Tableau Cloud site is configured to authenticate via Active Directory, the Update Group method synchronizes with Active Directory. If Tableau Server is configured to use local authentication, including an element has no effect. #### Attribute Values
new-group-name The new name for the group.
AD-group-name

The name of the Active Directory group to synchronize with.

This attribute is available for Tableau Server only.

AD-domain

The domain for the Active Directory group.

This attribute is available for Tableau Server only.

minimum-site-role

Required if an import element or grantLicenseMode attribute are present in the request. The site role assigned to users who are imported from Active Directory (Tableau Server only) or granted a license automatically using the grant license on-sync or on-login mode.

If the requested user name matches an existing user in the group, the user either retains their existing role or are granted the one specified in the request, based on the role that enables the most capabilities. This is true whether the group the user belongs to is imported from Active Directory (Tableau Server only) or local.

Site roles that can be assigned, listed from the one enabling the least capabilities to the most, are as follows.

  1. Unlicensed
  2. Viewer
  3. Explorer
  4. ExplorerCanPublish
  5. Creator
  6. SiteAdministratorExplorer
  7. SiteAdministratorCreator

Note: You cannot use the REST API to set a user to be a Tableau Server administrator (ServerAdministrator site role).

license-mode

Optional. The mode for automatically applying licenses for group members. When the mode is onLogin, a license is granted for each group member when they log in to a site.

For local groups, the mode can be either onLogin or unset. If the attribute is omitted during an update, the group will use the license grant mode configured prior to the update. A local group configured to use onLogin can switch the mode to unset by updating the group using:

minimumSiteRole="UNLICENSED"

For groups that import an Active Directory domain (Tableau Server only), the grantLicenseMode can be updated to either onSync or onLogin. If the attribute is omitted during an update, the group will use the license grant mode configured prior to the update.

The minimum role granted to users through grantLicenseMode is specified in the siteRole attribute of the import element. If that role has less permissions than an existing role assigned to the user, then the user's permissions remain unchanged.

on-demand-access

Optional. A boolean value that is used to enable on-demand access for embedded Tableau content when the Tableau Cloud site is licensed with Embedded Analytics usage-based model or capacity-based model with Cloud+ or Tableau+ edition.

Set to true to enable the capability for the group or set to false to disable the capability for the group. For more information about on-demand access, see On-demand access for users in the Tableau Embedding API v3 Help.

This attribute is available for Tableau Cloud only starting from API version 3.21 (October 2023).

#### Permissions This method can only be called by Tableau Server administrators or Tableau Cloud site admins. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 (immediate update) 202 (background update) #### Response Body **Updating a local group:** ``` ``` **Updating an Active Directory group (Tableau Server only):** ``` ``` **Background update:** ``` ``` **Notes:**  - If the operation is performed asynchronously, the response body contains a element that includes a job ID. You can check the status of the operation by using the [Query Job](#query_job) method, which returns status information about the job. A typical approach is to periodically call Query Job method and get the value of the progress attribute from the response body; when this value returns 100, the import process is complete. #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400984 Not licensed On-demand access can't be enabled if your site is not licensed with the usage-based model or capacity-based usage model with Tableau+ or Cloud+ edition.
403 400013 Invalid site role

The value of the minimumSiteRole or siteRole attribute must be Explorer, ExplorerCanPublish, SiteAdministratorCreator, SiteAdministratorExplorer, Unlicensed, or Viewer.

403 400019 Malformed import element If the body includes an <import> element, it must contain a source, domainName, and siteRole attribute. If any of these attributes are missing, the element is malformed. In addition, the source attribute must have a value of ActiveDirectory; otherwise the element is malformed.
403 403011 Active Directory not configured The request body contains an <import> element is included, but Tableau Server is configured for local authentication.
403 403020 Imported group name update forbidden The request body contains an <import> element and the value of the name attribute of the <group> element in the request body is different from the name of the group imported into Tableau Server as referenced by the group-id value in the URI.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404012 Group not found The group ID in the URI doesn't correspond to an existing site.
404 404016 Domain not found The request body includes an <import> element, but the specified domain name doesn't exist in Active Directory.
404 404017 Active Directory group not found The request body includes an <import> element, but no group with the name specified in the <group> element exists in Active Directory.
405 405000 Invalid request method Request type was not PUT.
409 409009 Group name conflict The group name in the request is already in use in the specified site. For the purpose of uniqueness checks, group names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Group Set Updates a group set name on a Tableau Server or Tableau Cloud site. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI PUT /api/api-version/sites/site-id/groupsets/group-set-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-set-idThe ID of the group set to update.
#### Request Body Copy ```    ``` Copy ``` {  "groupSet": {    "@name": "Researchers-one"  }} ``` #### Attribute Values
nameThe new name for the group set.
#### Response Code 200 #### Response Body Copy ```                  ``` Copy ``` {  "groupSet": {    "id": "group-set-id",    "name": "Researchers-one",    "groupCount": "2",    "group": [      {        "id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",        "name": "Internal"      },      {        "id": "9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b",        "name": "External"      }    ]  }} ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
403 400013 Invalid site role

The value of the minimumSiteRole or siteRole attribute must be Explorer, ExplorerCanPublish, SiteAdministratorCreator, SiteAdministratorExplorer, Unlicensed, or Viewer.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
405 405000 Invalid request method The request type wasn’t PUT.
409 409120 Group set not found. The group set ID in the request body doesn't correspond to an existing group set.
409 409121 Group set name conflict The group set name in the request already belongs to another group set. For the purpose of uniqueness checks, group set names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Identity Pool Update information about an identity pool. **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** This method can only be called by users with server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/authn-service/identity-pools/{uuid} [view details](#) ## Update Label Updates a label by its LUID. This method can update the label value, message, active flag, and elevated flag. You can't update the label category. If you choose a label value name that's associated with a different category, you get an error. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. You can't update extract refresh or flow run monitoring warnings (the extract\_refresh\_failure and flow\_run\_failure label values) using this method because those warnings are set and cleared automatically, depending on their triggers. See also "How to set a monitoring quality warning" in the [Tableau Server](https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) and [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) Help and the quality warning trigger methods in [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI PUT api/api-version/sites/site-luid/labels/label-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-luidThe unique LUID of the label asset.
#### Request Body ``` ``` #### Attribute Values
label-value-name

(Optional) The label value name.

You cannot change the category when updating a label. Choosing a label value name that's associated with a different category causes an error. See Data Labels in the REST API for a list of built-in label values and categories.

Choosing a monitoring quality warning value (extract_refresh_failure or flow_run_failure) causes an error.

label-message (Optional) The message text for the label. In the web interface, this is reflected as a certification note or a data quality warning message. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
active-flag (Optional) Boolean. If set to true, the label becomes active. If set to false, the label becomes inactive.  If omitted, the default is true.
elevated-flag (Optional) Boolean. If set to true, the label becomes elevated. If set to false, the label becomes not elevated.  If omitted, the default is false.
#### Permissions - To add or update a data label other than a certification label, you must have write permission on the associated asset. - To add or update a certification label, you must be an administrator, or else you must be a project leader or product owner for the project the asset is in. - To add or update a certification label for an external asset _not_ in a project, you must have the change permissions permission on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 ``` ``` #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400103Generic query label errorAn unknown error occurred.
400400109Missing payloadThe request body is missing a label element.
403403004Invalid parameterOperation on resource unauthorized
404404030Label not foundThe label LUID doesn't correspond to an existing project.
409409004Invalid parameterOne or more values in the request body are invalid, or you are trying to change the label value to one from a different category. This error can also occur if you try to create or change a monitoring quality warning (label values extract_refresh_failure and flow_run_failure).
## Update Label Category Updates a data label category. Note that category is one property of a label value (labelValue), which is itself a property of a label on an asset. Other properties of a labelValue include name and description. These properties determine label behavior and options that users see in label dialogs. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. A Data Management license is not required to create, update, or delete label categories, but one is required to create, update, delete, and see labels on assets. #### URI PUT api/api-version/sites/site-luid/labelCategories/label-category-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
label-category-nameThe label category name. URL encode the label category name (as it appears in the Tableau web interface) if it has spaces or non-alphanumeric characters in it.
#### Request Body #### Attribute Values
label-category-name

The label category name.

Required, but not does not have to be different from the existing name. Must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)

label-category-description

The label category description.

Required, but not does not have to be different from the existing description. Must be 1-500 characters in length.

#### Permissions Only a site or server administrator can create, update, or delete label categories. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:label_categories: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 #### Version Introduced in Tableau Cloud October 2023 (API 3.21) / Server 2023.3 (API 3.21). #### Response Body #### Errors
HTTP status error Code Condition Details
400 400190 Generic update label categories error An unknown error occurred.
403 403004 Operation on resource unauthorized You must be an administrator to create, update, or delete label values.
409 409004 Invalid parameter
  • The label value name in the URI must exist. URL encode the label category name (as it appears in the Tableau web interface) if it has spaces or non-alphanumeric characters in it.
  • The category name must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, the category name must be 1-24 characters long.)
  • The category name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label categories names.
  • The category description must be 1-500 characters in length.
## Update Labels Creates or updates labels on one or more assets. Each asset listed in the request body is updated to have a label with the specified value, message, active flag, and elevated flag. If the request body specifies a label value that is already on the asset, the label on the asset is updated to match the request body. Otherwise, a label is created and attached to the asset. **Note:** On Tableau Server 2023.3 and earlier, only one label of a category is allowed on an asset. If the request body specifies a label value with _the same category_ as a label already on the asset, the label on the asset is updated to match the request body. Otherwise, a label is created and attached to the asset. Note that the label category is not an attribute in the request body, because you do not set it explicitly. Instead you implicitly set the category by using the label value name. For example, choosing a label value name of stale means that the label value category will be warning. Also, you can't update the label category on an existing label. If you set the label value to one that's in a different category, you get an error. For more information on data label objects and properties, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic. You can't update extract refresh or flow run monitoring warnings (the extract\_refresh\_failure and flow\_run\_failure label values) using this method because those warnings are set and cleared automatically, depending on their triggers. See also "How to set a monitoring quality warning" in the [Tableau Server](https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) and [Tableau Cloud](https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-set-a-monitoring-quality-warning) Help and the quality warning trigger methods in [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). All label operations except those related to the certification of data sources require Catalog to be enabled. Catalog requires a Data Management license. #### URI PUT api/api-version/sites/site-luid/labels #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe unique LUID of the site asset.
#### Request Body ``` ``` #### Attribute Values
asset-type

The type of asset. Valid asset types are:

  • database
  • table
  • column - Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)
  • datasource
  • flow
  • virtualconnection
  • virtualconnectiontable
asset-luid The asset LUID.
label-value-name

The label value name.

The built-in label value names are:

  • certification
  • warning
  • deprecated
  • stale
  • maintenance
  • sensitive _data

You can also use custom label value names that an administrator creates. (Custom label values were released with Tableau Cloud June 2023 and Tableau Server 2023.3.)

If the request body specifies a label value that is already on the asset, the label on the asset is updated to match the request body. Otherwise, a label is created and attached to the asset.

Note: On Tableau Server 2023.3 and earlier, only one label of a category is allowed on an asset. If the request body specifies a label value with the same category as a label already on the asset, the label on the asset is updated to match the request body. Otherwise, a label is created and attached to the asset.

See Data Labels in the REST API for a list of built-in label values and categories.

Choosing a monitoring quality warning value (extract_refresh_failure or flow_run_failure) causes an error.

label-message

(Optional. Was required in Tableau Server 2023.3 and earlier.)

The message text for the label. In the web interface, this is reflected as a certification note or a data quality warning message. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.

active-flag (Optional) Boolean. If set to true, the label becomes active. If set to false, the label becomes inactive.  If omitted, the default is true.
elevated-flag (Optional) Boolean. If set to true, the label becomes elevated. If set to false, the label becomes not elevated.  If omitted, the default is false.
#### Permissions - To add or update a data label other than a certification label, you must have write permission on the associated asset. - To add or update a certification label, you must be an administrator, or else you must be a project leader or product owner for the project the asset is in. - To add or update a certification label for an external asset _not_ in a project, you must have the change permissions permission on the associated asset. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2024 and Tableau Server 2024.2 (API 3.23). ``` tableau:labels: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 #### Version Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). #### Response Body ``` ` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400123Unkown errorThe metric could not be updated for an unknown reason.
403403119Owner update forbiddenThe user does not have administrator permissions to change the owner for the metric.
403403120Project update forbiddenThe user doesn't have Write permission for the project they are trying to move the metric to.
403403118Name update forbiddenThe user does not have administrator permissions to change the name for the metric.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002Owner not foundThe owner ID in the request body doesn't correspond to an existing owner.
404404004Metric not foundThe metrice ID in the URI doesn't correspond to an existing metric.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not PUT.
409409015Metric name conflictThe metric name in the request already belongs to the specified site. For the purpose of uniqueness checks, metric names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/metrics/6561daa3-20e8-407f-ba09-709b178c0b4a" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-metric.xml` **Content of update-metric.xml** ` ` **Example response body:** ` underlyingView="29dae0cd-1862-4a20-a638-e2c2dfa682d4" ` ## Update metric definition Updates a metric definition. **Version:** Available in API 3.21 (Tableau Cloud December 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) **Permissions:** Any user can update a metric definition as long as the user has write and publish access to the data source used in the definition. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:insight\_definitions:update\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/-/pulse/definitions/{definition\_id} [view details](#) ## Update Mobile Security Settings for Site Updates the mobile security sections for a specified site. **Version:** Available in API 3.18 (Tableau Cloud December 2022) 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:** Only Tableau server administrators can update mobile security settings for the server.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:mobile\_security\_site\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/settings/mobilesecuritysettings #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body Copy ``` {    "mobileSecuritySettingsList": {        "mobileSecuritySettings": [            {                "name": "mobile.security.jailbroken_device",                "enabled": true,                "iosConfig": {                    "valueList": [                        "true"                    ],                    "severity": "warn"                },                "androidConfig": {                    "valueList": [                        "false"                    ],                    "severity": "critical"                }            },            {                "name": "mobile.security.max_offline",                "enabled": true                "iosConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },                "androidConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },            },                    {                "name": "mobile.security.screenshot",                "enabled": false,                "androidConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                }            }        ]    }} ``` #### Request Attributes
mobileSecuritySettings name

(Optional)Enum. The device condition addressed by a security setting element. Supported values are:

  • mobile.security.jailbreak_detection
  • mobile.security.max_offline
    Available in API 3.19 (Tableau Cloud March 2023 / Server 2023.1) and later.
  • mobile.security.screenshot
mobileSecuritySettings enabled (Optional) Boolean. If true, enables the Tableau mobile client to detect and respond to the condition described in the setting's name. The enabled attribute for the Android or iOS configuration element of the setting must also be true for detection on that type of device. If mobileSecuritySettings enabled = false, the Android and iOS configuration element attribute settings will be ignored.
mobileSecuritySettings androidConfig / iosConfig

(Optional)Element. Security settings specific to the platform of the mobile device hosting the Tableau client for the setting being configured. Required attributes of this element are:

  • valueList -

    In the case of mobile.security.max_offline String - whole number. The number of days a device can be offline without requiring a security policy refresh. Minimum value is 1, default value is 14.

    In other cases String - true or false. Determines if the condition of the setting is detected for the specified platform.

  • severity - Enum. Defines the response of the Tableau mobile client when the condition of the setting is detected.
  • enabled - String -true or false. On the device type being configured, if true, enables detection of the containing setting's security condition, as long as that setting's enabled attribute value is also true.

    Severity level can be set for the jailbreak detection setting. The levels and the actions the Tableau client will take are as follows:

    • Warn: If a detection occurs, show a dismissible blocking screen.
    • Error: If a detection occurs, show a blocking screen until the issue is resolved.
    • Critical: If a detection occurs, shows a blocking screen, log the user out, and close the session.

    If screenshot protection is enabled a severity level is required, but regardless of which level you select the behavior of the app will be: If a screenshot is attempted, show a temporary toast without blocking the app.

    Default settings for a Tableau Cloud site are:

    • Jailbreak detection enabled with critical severity.
    • Maximum offline time for security policy update set at 14 days with critical severity.
    • Screenshot protection is enabled with warn level.
#### cURL Request Example `curl -L -X PUT "https://qa-server.tsi.lan/api/3.18/settings/mobilesecuritysettings" -H "Accept: application/json" -H "X-Tableau-Auth: ejET2rVmS2e81XiZ9G4lzQ|Iz71DR2lu3r0zHpcOAH2OoRQZlPfxACC|a905dbfd-6550-4546-908b-3e055fcc026d" --data-raw ""` #### Response Code 200 #### Response Body Copy ``` {    "mobileSecuritySettingsList": {        "mobileSecuritySettings": [            {                "name": "mobile.security.jailbroken_device",                "enabled": true,                "iosConfig": {                    "valueList": [                        "true"                    ],                    "severity": "warn"                },                "androidConfig": {                    "valueList": [                        "false"                    ],                    "severity": "critical"                }            },            {                "name": "mobile.security.max_offline",                "enabled": true                "iosConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },                "androidConfig": {                    "valueList": [                        "14"                    ],                    "enabled": true,                    "severity": "critical"                },            },                    {                "name": "mobile.security.screenshot",                "enabled": false,                "androidConfig": {                    "valueList": [                        "true"                    ],                    "enabled": true,                    "severity": "warn"                }            }        ]    }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing, incomplete, or is malformed XML. Invalid values for enabled, iosConfig, androidConfig, severity, or enabled attributes are possible causes.
400400174Mobile security settings errorAn uknown mobile security settings error has occurred.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user does not have the required administrtor permissions.
403403157ForbiddenMobile security settings are not enabled on the server.
409409004Invalid settingA mobile security setting enabled, name or other value is missing or malformed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Monitoring Quality Warning Update a monitoring quality warning. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-id_/dataQualityTriggers/_trigger-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
trigger-idThe unique ID of the monitoring quality warning.
#### Request Body ``` ``` #### Attribute Values
type

Type of monitoring quality warning. To specify the type, use one of the following values:

  • EXTRACT_REFRESH
  • FLOW_RUN

These values are not case sensitive.

status

Monitoring status. Values can be "true" or "false". If set to "true", the data source is monitored for extract refresh failures or the flow is monitored for flow run failures).

If an extract refresh or flow run failure occurs, the specified data quality warning is attached to the data source or flow (depending on type). The data quality warning is removed when the extract refresh or flow run is successful.

For more information about monitoring quality warnings, see the monitoring quality warning section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.

message (Optional) A custom message for the data quality warning. You can format the message with italics, bold text, links, images, and more. Use HTML character entities to match the special characters in the formatting guide that's normally visible as a tooltip in the UI.
severity High visibility status of the data quality warning. Values can be "true" or "false". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the Server Help or Cloud Help.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update a monitoring quality warning: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:labels: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 **Example response** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400137Generic quality warning trigger errorThe monitoring quality warning could not be updated for some other reason than those specified below.
403403004Unauthorized operation.Insufficient permissions to perform the operation.
409409004Invalid parameterOne or more values in the request body are invalid.
## Update OpenID Connect Configuration Update the Tableau Cloud site's OpenID Connect (OIDC) configuration. **Version:** Available in API 3.22 (Tableau Cloud February 2024) 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:** Tableau Cloud site admins only. **JWT Access Scope:** Not available. #### URI PUT /api/api-version/sites/site-luid/site-oidc-configuration #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body Copy ```    ``` Copy ``` {  "siteOIDCConfiguration": {    "idpConfigurationId": "idpConfigurationId",    "enabled": "enabled",    "clientId": "clientId",    "clientSecret": "clientSecret",    "authorizationEndpoint": "authorizationEndpoint",    "tokenEndpoint": "tokenEndpoint",    "userinfoEndpoint": "userinfoEndpoint",    "jwksUri": "jwksUri",    "idpConfigurationName": "idPConfigurationName",    "endSessionEndpoint": "endSessionEndpoint",    "allowEmbeddedAuthentication": "allowEmbeddedAuthentication",    "prompt":"prompt",    "customScope":"customScope",    "clientAuthentication": "clientAuthentication",    "essentialAcrValues": "essentialAcrValues",    "voluntaryAcrValues": "voluntaryAcrValues",    "emailMapping": "emailMapping",    "firstNameMapping": "firstNameMapping",    "lastNameMapping": "lastNameMapping",    "fullNameMapping": "fullNameMapping",    "useFullName": "useFullName"    }} ``` #### Request Attributes **Note:** Because partial updates are not supported therefore, you must include all the needed attributes in your request to ensure the configuration update is completed successfully.
idpConfigurationId (Required) Starting in API 3.24, multiple authentication configurations can be created and enabled at the same time. Include the idpConfigurationId to identify which configuration to update. If no IdPConfigurationId is specified, the initial (default) OIDC configuration is updated if it exists.

To get the idpConfigurationId value, use the List Authentication Configurations for Site method.

For more information, see Authentication in the Tableau Cloud Help.

enabled (Required) Controls whether the configuration is enabled or not. Value can be "true" or "false". For example "true".
clientId (Required) The client ID from your IdP. For example, "0oa111usf1gpUkVUt0h1".
clientSecret (Required) The client secret from your IdP.
authorizationEndpoint (Required) Use the authorization endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the user information endpoint (authorization_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/authorize".
tokenEndpoint (Required) Use the token endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the token endpoint (token_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/token".
userinfoEndpoint (Required) Use the user information endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the user information endpoint (userinfo_endpoint) from the details that are returned. For example, "https://myidp.com/oauth2/v1/userinfo".
jwksUri (Required) Use the JWK set URI from your IdP. To find the value, enter the configuration URL in a browser and obtain the JWK set URI endpoint (jwks_uri) from the details that are returned. For example, "https://myidp.com/oauth2/v1/keys".
idpConfigurationName

(Optional) The name of the configuration.

Starting in API 3.24, you can create and enable multiple authentication configurations. Authentication configurations that were enabled before API 3.24 are given a name and its name can't be updated. For example, "Initial OIDC". If this configuration was created after API 3.23 and no name is provided for the update, the name will stay the same. For more information, see Authentication in the Tableau Cloud Help.

endSessionEndpoint (Optional) If single logout (SLO) is enabled for the site, which is done through Tableau Cloud site UI, you can specify the configuration URL or the end session endpoint from your IdP. For example, "https://myidp.com/oauth2/v1/logout".
allowEmbeddedAuthentication (Optional) Controls how users authenticate when accessing embedded views. Value can be "true" or "false". Default value is "false", which authenticates users in a separate pop-up window. When set to "true", users authenticate using an inline frame (IFrame), which is less secure.
customScope (Optional) Specifies a custom scope user-related value that you can use to query the IdP. For example, "openid, email, profile".
prompt (Optional) Specifies whether the user is prompted for re-authentication and consent. For example, "login, consent".
clientAuthentication (Optional) Token endpoint authentication method. Value can be "client_secret_basic" or "client_secret_post". Default value is "client_secret_basic".
essentialAcrValues (Optional) List of essential Authentication Context Reference Class values used for authentication. For example, "phr".
voluntaryAcrValues (Optional) List of voluntary Authentication Context Reference Class values used for authentication.
emailMapping (Optional) Claim for retrieving email from the OIDC token. Default value is "email".
firstNameMapping (Optional) Claim for retrieving first name from the OIDC token. Default value is "given_name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "false".
lastNameMapping (Optional) Claim for retrieving last name from the OIDC token. Default value is "family_name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "false".
fullNameMapping (Optional) Claim for retrieving name from the OIDC token. Default value is "name". You can use this attribute to retrieve the user’s display name when useFullName attribute is set to "true".
useFullName (Optional) Controls what is used as the display name. Value can be "true" or "false". Default value is "false", which uses first name (firstNameMapping attribute) and last name (lastNameMapping attribute) as the user display name. When set to "true", full name (fullNameMapping attribute) is used as the user display name.
#### cURL Request Example `curl "https://us-west-2a.online.tableau.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/site-oidc-configuratioin" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-update-oidc-config.xml` **Content of create-update-oidc-config.xml:** Copy ```     "    authorizationEndpoint="https://myidp.com/oauth2/v1/authorize"    tokenEndpoint="https://myidp.com/oauth2/v1/token"    userinfoEndpoint="https://myidp.com/oauth2/v1/userinfo"    jwksUri="https://myidp.com/oauth2/v1/keys"    idPConfigurationName="Initial OIDC"    endSessionEndpoint="https://myidp.com/oauth2/v1/logout"    customScope="openid, email, profile"    prompt="login,consent"    clientAuthentication="client_secret_basic"    essentialAcrValues="phr"    emailMapping="email"    firstNameMapping="given_name"    lastNameMapping="family_name"    fullNameMapping="name"    useFullName="false" />
``` Copy ``` {  "siteOIDCConfiguration": {    "idpConfigurationId":"00000000-0000-0000-0000-000000000000",    "enabled":"true",    "testLoginUrl="https://sso.online.tableau.com/public/testLogin?alias=080bca2d-578b-49cc-b40d-3781b36b30ee&authSetting=OIDC",    "allowEmbeddedAuthentication":"false",    "clientId":"0oa111usf1gpUkVUt0h1",    "clientSecret":"<omit>",    "authorizationEndpoint":"https://myidp.com/oauth2/v1/authorize",    "tokenEndpoint":"https://myidp.com/oauth2/v1/token",    "userinfoEndpoint":"https://myidp.com/oauth2/v1/userinfo",    "jwksUri":"https://myidp.com/oauth2/v1/keys",    "idPConfigurationName":"Initial OIDC",    "endSessionEndpoint":"https://myidp.com/oauth2/v1/logout",    "customScope":"openid, email, profile",    "prompt":"login,consent",    "clientAuthentication":"client_secret_basic",    "essentialAcrValues":"phr",    "emailMapping":"email",    "firstNameMapping":"given_name",    "lastNameMapping":"family_name",    "fullNameMapping":"name",    "useFullName":"false"     }} ``` **Notes:** - The response hides the client secret and replaces it with `<omit>`. - You can use the testloginURL to validate the OIDC configuration. When you enter the URL in a browser, details about the configuration displays. - You can use the idpConfigurationId to assign authentication to a user using the [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Project Updates the name, description, or project hierarchy of the specified project. You can create or update project hierarchies by specifying a parent project for the project that you are updating using this method. **Version:** Available in API 1.0 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:** Only Tableau Administrators can update a project.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:projects: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). #### URI PUT /api/api-version/sites/site-id/projects/project-id PUT /api/api-version/sites/site-id/projects/project-id?publishSamples=publish-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
project-idThe ID of the project to update.
publish-value(Optional) A Boolean value that specifies whether to publish the sample workbooks provided by Tableau to the project when you update the project. When the publish-value is not specified in the request, or the publishSamples parameter is missing, no samples will be published. To publish the sample workbooks, set publishSamples parameter to true. This option is equivalent to the tabcmd command-line utility option, publishsamples. For more information, see tabcmd.
#### Request Body Copy ```            ``` Copy ``` {  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }} ``` #### Attribute Values
project id

(Required) The LUID of the project being updated.

For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults Windows | Linux.

project name (Optional) The new name for the project.
project description (Optional) The new description for the project.
project parentProjectId

(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.

To update a project without changing its placement in the project hierarchy, omit the parentProjectId attribute. To move a project to the top of the project hierarchy, provide an empty string ("") for the parentProjectId attribute.

For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults.

project contentPermissions

(Optional) This value controls user permissions in a project, however, if the project is nested within a project with more restrictive policies, it will inherit those permissions and these settings will have no effect. The functional permissions of a project, including those it inherits, are available in value of contentPermission in the response body from a request to create, update, or query a project.

  • LockedToProject to lock permissions so that users cannot overwrite the default permissions set for the project
  • ManagedByOwner to allow users to manage permissions for content that they own
  • LockedToProjectWithoutNested to lock the permissions of a parent project, but not those of its child projects.

The default is ManagedByOwner. For more information, see Lock Content Permissions.

project parentProjectId

(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.

To update a project without changing its placement in the project hierarchy, omit the parentProjectId attribute. To move a project to the top of the project hierarchy, provide an empty string ("") for the parentProjectId attribute.

For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults.

owner id The LUID of the user that owns the project.
#### cURL Example `curl --request PUT "https://myServer/api/3.21/sites/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e/projects/ds2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e70" --header "Content-Type: application/xml" --header "X-Tableau-Auth;" --data " "` #### Response Code 200 #### Response Body Copy ```            ``` Copy ``` {  "project": {    "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "parentProjectId": "afe6f0b8-cb10-11e7-9fd4-db8b61369aa5",    "name": "Update-Project-Name",    "description": "This is the new description after the project update",    "contentPermissions": "ManagedByOwner",    "controllingPermissionsProjectId": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e",    "owner": {      "id": "abc12e4e-5d6d-7c8c-9b0b-1a2a3f4f5e90"    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400008Bad requestThe request cannot set content permissions to LockedToProjectWithoutNested for a REST API version lower than 3.8.
403403005Update forbiddenAttempt to rename the default project, which cannot be renamed.
403403008Insufficient storage on siteThe samples could not be published because there is not enough storage space remaining on the server to accommodate the samples.
403403004Update forbiddenA non-administrative user tried to update the project, but does not have permissions to update the project.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404009Project ID mismatchThe request body contains a project ID (which is optional) and it doesn't match the ID in the URI.
404404005Project not foundThe project ID in the URI doesn't correspond to an existing project.
405405000Invalid request methodRequest type was not PUT.
409409006Project name conflictThe project name in the request already belongs to the specified site. For the purpose of uniqueness checks, project names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Pulse user preferences Updates the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI. **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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) **Permissions:** Any user that has read or connect permission to the data source used in the definition can get the details of subscriptions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** \`tableau:user\_preferences:update\`. Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/-/pulse/user/preferences [view details](#) ## Update Routing Rule Partially updates an existing Bridge routing rule. You can change the rule's `domain`, `poolId`, and `isBlocked` flag. At least one attribute must be supplied; only the supplied attributes are changed. Project scoping is not changed here—use the Add Projects to Routing Rule and Remove Projects from Routing Rule methods. This method is not available for Tableau Server. **Version**: Available in API 3.30 (Tableau Cloud October 2026) and later. Not available for Tableau Server. **License**: No additional license required. **Permissions**: Tableau Cloud site admin. **Access Scope**: `tableau:bridge_rest_api:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PATCH /api/api-version/sites/site-luid/bridge-routing-rules/routing-rule-id #### URI Parameter Values
api-versionThe version of the API to use. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
routing-rule-idThe unique identifier (UUID) of the routing rule to update.
#### Request Body ``` ``` ``` { "routingRule": { "domain": "new.example.com", "poolId": "b2c3d4e5-6f70-8192-a3b4-c5d6e7f80910" } } ``` #### Attribute Values
domainOptional. A new domain for the rule.
isBlockedOptional. Changes the rule between a block rule (true) and an allow rule (false).
poolIdRequired when transitioning to an allow rule. The UUID of the target Bridge pool. Must be omitted when the rule is, or becomes, a block rule.
#### Response Code 200 #### Response Body Returns the updated `routingRule`, identical in shape to the Create Routing Rule response. ``` ``` ``` { "routingRule": { "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210", "domain": "new.example.com", "isBlocked": false, "poolId": "b2c3d4e5-6f70-8192-a3b4-c5d6e7f80910", "poolName": "WindowsPool", "project": [ { "id": "11111111-2222-3333-4444-555555555555", "name": "Finance", "isDeleted": false } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400503909Validation failedEmpty update (no attributes supplied), invalid routing-rule-id or poolId UUID, blank or invalid domain, or poolId missing when transitioning to an allow rule.
400503910Invariant violationpoolId supplied while the rule is, or becomes, a block rule.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
403503923Permission deniedCaller is not a site administrator for the site.
404503915Routing rule not foundNo routing rule exists with the given ID on this site.
409503911Duplicate routing ruleThe update would collide with an existing rule for the same domain and project scope.
429429000Rate limit exceededToo many requests sent in a given time period.
500503917Unexpected server errorAn unexpected error occurred while updating the rule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update SCIM Configuration Updates the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site. You must be the user that created the SCIM configuration to update the SCIM configuration unless the creator of the SCIM configuration is no longer a member of the site. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_configurations:read` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI PATCH /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body ``` SCIM Contractors Canada d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658 ``` ``` { "scimConfiguration": { "name": "SCIM Contractors Canada", "idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658" } } ``` #### cURL Request Example ``` POST request: curl --location 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations \ --data '{ "scimConfiguration":{ "name": "SCIM Contractors Canada", "idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658" } }' ``` #### Attribute Values
name (Required) Name of the SCIM configuration.
idpConfigurationId

(Required) Authentication configuration to associate with the SCIM configuration.

Starting in API 3.26, you can have multiple SCIM configurations. Include the idpConfigurationId to identify which configuration to update. If a SCIM token is associated with SCIM configuration, updating the IdPConfigurationId deletes the SCIM token. Ensure the SCIM token's secret is removed from the identity provider's (IdP's) SCIM configuration. To get the idpConfigurationId, see List Authentication Configurations for Site.

Starting in API 3.28, you can associate OIDC or Google authentication with SCIM.

#### Response Code 204 #### Response Body ``` 065693d8-436a-4738-a8f1-375953a2a888 d3b782da-0787-44ca-8585-6fd48dbfc658 false true SCIM Contractors Canada 2025-04-01 06:31:47.882 ``` ``` { "scimConfiguration": { "id": "065693d8-436a-4738-a8f1-375953a2a888", "idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658", "isApiTokenActive": false, "isOwner": true, "name": "SCIM Contractors Canada", "createdAt": "2025-04-01 06:31:47.882" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400008Bad RequestThe content of the request body contains unsupported attributes, the SCIM configuration name already exists, or the idpConfigurationId is missing or not valid.
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
403403182ForbiddenThe SCIM configuration can only be updated by the user who created the SCIM configuration.
404404050Resource Not FoundThe SCIM configuration does not have an associated SCIM token.
404404057Resource Not FoundThe SCIM configuration UUID is not valid or does not exist on this site.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Server Active Directory Domain Changes the nickname or full domain name of an Active Directory domain on the server. This method is not available on Tableau Cloud. A domain nickname, also called short name, is the Windows NetBIOS domain name. You can modify the nickname for any domain the server is using. In general, you can modify the full domain name for any domain except the one that you used to sign in. However, if the user name that you are currently signed in with exists in both the current domain and the new domain, you can modify the full name for the current domain. For information about how to enable access for users from multiple domains, see [Support for multiple domains](https://help.tableau.com/current/server/en-us/users_manage_ad.htm#support-for-multiple-domains). If the domain is `local`, it's names cannot be changed. #### URI PUT /api/api-version/domains/domain-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
domain-idThe integer ID of the of the Active Directory domain being updated. Find a domain's ID using List Server Active Directory Domains.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes is valid. If no attributes or nested elements are included, no update is made.
new-domain-nameA new full domain name you are using to replace the existing one.
new-domain-nicknameA new domain nickname you are using to replace the existing one.
#### 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:domains: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 **Example response:** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404032Resource not foundThe requested domain ID in the URI doesn't correspond to an existing domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example For an Active Directory with the ID of `1045`, name of `myOldDomainName`, and a nickname of `myOldDomainNickname`: `curl "http://MY-SERVER/api/3.29/domains/f34ab56cd12ab34cd56ef78ab90cd12ef" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-domain.xml` **Content of update-domain.xml:** ``` ``` **Example response body:** ``` ``` ## Update Server Schedule Modifies settings for the specified server schedule, including the name, priority, and frequency details on Tableau Server. _For Tableau Cloud, see [Update cloud extract refresh task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#update_cloud_extract_refresh_task) and [Update subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#update_subscription_cloud) ._ #### URI PUT /api/api-version/schedules/schedule-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
schedule-idThe ID of the schedule to update. To determine what schedules are available, call List Server Schedules.
#### Request Body ``` ``` #### Attribute Values
new-schedule-name The new name to give to the schedule.
new-schedule-priority An integer value between 1 and 100 that determines the default priority of the schedule if multiple tasks are pending in the queue. Lower numbers have higher priority.
new-schedule-execution-order Parallel to allow jobs associated with this schedule to run at the same time, or Serial to require the jobs to run one after the other.
new-schedule-frequency The granularity of the schedule. Valid values are:
  • Hourly. Hourly. Jobs can be scheduled to run one or more times per day at intervals specified in minutes or hours. Valid intervals are 15 and 30 minutes and 2, 4, 6, 8, and 12 hours.
  • Daily. Jobs can be scheduled to run once per day.
  • Weekly. Jobs can be scheduled to run one or more times per week.
  • Monthly. Jobs can be scheduled to run once per month on a specific day.

The value you provide for schedule-frequency determines whether you must include an end-time value, and what is required in the contents of the <intervals> element.

new-state Active to enable the schedule, or Suspended to disable it.
start-time The time of day on which scheduled jobs should run (or if the frequency is hourly, on which they should start being run), in the format HH:MM:SS (for example, 18:30:00). This value is required for all schedule frequencies. The entered time will be applied based on the time zone of your server.
end-time If the schedule frequency is Hourly, the time of day on which scheduled jobs should stop being run, in the format HH:MM:SS (for example, 23:30:00). Hourly jobs will occur at the specified intervals between the start time and the end time. For other schedule frequencies, this value is not required; if the attribute is included, it is ignored. The entered time will be applied based on the time zone of your server.
interval-expression A value that specifies the interval between jobs associated with the schedule. The value you specify here depends on the value of schedule-frequency.

Hourly

The interval expression is only one of the following:

  • hours="interval" where interval is 1, 2, 4, 6, 8, or 12, representing how many hours between jobs.
  • minutes="interval" where interval is 15 or 30, representing how many minutes between jobs.

You can specify an interval in hours or minutes, but not both.

Daily

If the schedule frequency is Daily, no interval is specified. Any information specified in the <intervals> element is ignored.

Weekly

The interval expression is weekDay="weekday", where weekday is Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

You can specify multiple <interval> elements to indicate that scheduled jobs should run on multiple days during the week.

Note: Updating a schedule without specifying days of the week will reset any existing weekly interval to include all 7 days. If you need the job you are updating to remain scheduled on selected days, make sure to include that information in your update request.

Monthly

The interval expression is monthDay="day", where day is either the day of the month (1, 2, etc.) or LastDay.

Note: If you want to specify multiple days in the month, you can do this using the web interface. You cannot create or update such a monthly schedule using REST API.

Any combination of the attributes inside the element is valid. Only the attributes and child elements that are included result in updates to the schedule. If no attributes or nested elements are included, no update is made. #### 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:schedules: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 ``` ``` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400008Invalid ParameterOne of the parameters in the request body is invalid.
400400071Error updating scheduleThe schedule couldn't be updated for an unspecified reason.
404404023Schedule not foundThe specified schedule doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not PUT.
409409021Schedule name conflictThe schedule name in the request already belongs to an existing schedule.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/schedules/4d652179-36bf-47e4-a9dc-e069227c72d0" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-schedule.xml` **Content of update-schedule.xml for an hourly schedule** For an hourly schedule, frequencyDetails is set to `Hourly`. Both start and end values are required. The intervals element is required, and must include 1 interval subelement that contains either an hours or a minutes attribute. Valid values for minutes are `15` or `30`. Valid values for hours are `1`, `2`, `4`, `6`, `8`, or `12`. ``` ``` **Response body** ``` version-and-namespace-settings> ``` **Note:** For additional examples of how to construct the payload for updating schedules, see [Create Schedule](#create_schedule). ## Update settings for allowed dashboard extension on site - Retired in API 3.21 * * * Retired in API 3.21 (Cloud October 2023 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings of a specific dashboard extension in the safe list of the site you are signed into. **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. [Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm) **Permissions:** Can only be called by users with site or server administrator permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** No additional license required. **Access Scope:** Not available. [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PUT {server}/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} [view details](#) ## Update Site Modifies settings for the specified site, including the content URL, administration mode, user quota, state (active or suspended), storage quota, whether flows are enabled, whether subscriptions are enabled, and whether revisions are enabled. **Note:** You must be signed in to a site to update it. #### URI PUT /api/api-version/sites/site-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to update.
#### Request Body **Updating individual settings** ``` ``` **Updating the site logo** To set a new site logo, you pass a multi-part payload to the site. In addition to setting the `X-Tableau-Auth` header to the sign-in token, you must set the `Content-Type` header to `multipart/mixed` and include a boundary string. For example, the header might look like the following example: `Content-Type: multipart/mixed; boundary=az1by2cx34dw` The request body starts with the string you specify as the boundary. This is followed by two headers. You set `Content-Disposition` header to `form-data`, and then a `name` value set to `site_logo` and a `filename` value. You must also include a `Content-Type` header set to `application/octet-stream`. After the headers, you include a blank line then the binary data (not encoded). The binary data is followed by a line that includes the boundary string and the two required termination hyphens (`--`). The following example shows the request body using the boundary string that was specified in the example header earlier. \--az1by2cx34dw Content-Disposition: form-data; name="site\_logo"; filename="new-site-logo.png" Content-Type: application/octet-stream --az1by2cx34dw-- **Restoring the default site logo** To restore the default site logo, you pass a multi-part payload to the site, as you do to set the logo. However, instead of passing binary data for the image, you pass an empty image. And instead of setting the `Content-Type` header in the body to `application/octet-stream`, you set the content type to `text/plain`. The following example shows the request body using the boundary string that was specified in the example header earlier. \--az1by2cx34dw Content-Disposition: form-data; name="site\_logo"; filename="empty.txt" Content-Type: text/plain --az1by2cx34dw-- #### Attribute Values
new-site-name (Optional) The new name of the site.
new-content-url (Optional) The new site URL. This value can contain only characters that are valid in a URL. These characters include letters (A-Z, a-z), digits (0-9), hyphens ("-"), and underscores ("_") If you provide invalid characters, those characters are stripped from the URL and the site is created anyway. For example, if you try to set the site URL as test.site, it's converted to testsite and returned in the response. The response's site URL namespace is the authoritative source of truth for the new site URL.
new-admin-mode (Optional) Specify ContentAndUsers to allow site administrators to use the server interface and tabcmd commands to add and remove users. (Specifying this option doesn't give site administrators permissions to manage users using the REST API.) Specify ContentOnly to prevent site administrators from adding or removing users. (Server administrators can always add or remove users.)

Note: You cannot set adminMode to ContentOnly and also set a userQuota value. The default value is ContentAndUsers.

new-state (Optional) Active to set the site to active mode, or Suspended to suspend the site. Default is Active.
new-storage-quota (Optional) The new maximum amount of space for the new site, in megabytes. If you set a quota and the site exceeds it, publishers will be prevented from uploading new content until the site is under the limit again.
new-disable-subscriptions (Optional) true to prevent users from being able to subscribe to workbooks on the specified site. Default is false.
revision-history-enabled (Optional) true if the site maintains revisions for changes to workbooks and data sources; otherwise, false. The default is false.
revision-limit (Optional) An integer between 2 and 10000 to indicate a limited number of revisions for content.

Setting this value to -1 removes any value that was set previously, and effectively removes any limit to the number of revisions that are maintained.

allow-subscription-attachments-flag

(Optional) If true, and subscription to attachments is enabled on the server, then users can create subscriptions that send an email with images of a workbook or view in a PDF attachment. The default value is true. If subscription to attachments is disabled in the server settings, then making this value true will have no effect. Default is true.

subscribe-others-enabled-flag

(Optional) Specify true to enable and false to disable the ability for view owners to subscribe other users to a view. Default is true.

editing-flows-enabled-flag

(Optional) Specify true to enable and false to disable editing flows for a site. For more information on flows, see Enable and Configure Tableau Prep Conductor.

The default is set to true, which means editing flows is enabled by default. For more information, see Implication of disabling Tableau Prep Conductor.

scheduling-flows-enabled-flag

(Optional) Specify true to enable and false to disable scheduling flows for a site. For more information on flows, see Enable and Configure Tableau Prep Conductor.

The default is set to true, which means scheduling flows is enabled by default. For more information, see Implication of disabling Tableau Prep Conductor.

flows-enabled-flag

The flowsEnabled attribute is deprecated as of API 3.10.

guest-access-enabled-flag

(Optional) Specify true to enable and false to disable the ability for guests, users without specific site access permission, to access the site. Default is false.

cache-warmup-enabled-flag

This attribute was removed in API 3.19 and later. For current methods to improve Tableau performance see, View Acceleration.

(Optional) Set this value to true to enable cache warm up to improve workbook load times. Set the value to false to disable cache warmup. Default is true.

commenting-enabled-flag

(Optional) Specify true to enable and false to disable the ability for user comments on views in the site. Default is true.

extractEncryptionMode

(Optional) Specify enforced, enabled, or disabled. Default is disabled. For more information, see Extract and Encryption Methods.

dataAccelerationMode

(Optional) Specify enable_selective or disabled. The default is enable_selective, which lets you update particular workbooks to turn on data acceleration using the accelerationEnabled attribute. For more information, see Data Acceleration (Retired). Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.

requestAccessEnabled (Optional) Specify true to allow users send access request emails to content or project owners. Specify false if you don't want users to be able to request access. The default is false.
runNowEnabled

(Optional) Specify true to allow users to run flows, extract refreshes, and schedules manually. Specify false if you don't want users to be able to run flows, extract refreshes, and subscriptions manually. The default is true. If this attribute is set to false, the following methods will fail and will return an error message.

Run Flow Now

Run Flow Task

Update Data Source Now

Run Extract Refresh Task

Licensing attributes

For user-based license types, the maximum number of users is set by the licenses activated on that server. For core-based licensing, there's no limit to the number of users; if you specify a maximum value, only licensed users are counted, and server administrators are excluded.

The REST API enables administrators to set licensing limits below the purchased maximum with two types of license-related attributes:
- User Quota - The total maximum number of licenses currently configured for a site.
- Tiered Capacities - If set, the configured maximum license count for each license type (role).

. An on-premises server administrator can both get and set them but if license maximums are set using one attribute kind then the value(s) of the other kind must be null. Setting values for both kinds of attributes will result in an error.

For more information, see Licensing Overview.

User quota

all-license-limit-total

(Optional) The maximum total number of users with Creator, Explorer, or Viewer licenses currently allowed on a site.

On-premises server administrators can set userQuota with the following rules: The number can't exceed the number of licenses activated for the site; and if tiered capacity attributes are set, then userQuota will equal the sum of the tiered capacity values, and attempting to set userQuota will cause an error.

An administrator can revert the license limit to number of activated licenses on the site, or shift control of license limits to tiered capacities values, by omitting userQuota from a Create Site or Update Site request, or making its value -1.

Tiered capacity attributes

creator-license-limit
explorer-license-limit
viewer-license-limit

(Optional) The maximum number of licenses for users with the Creator, Explorer, or Viewer role, respectively, allowed on a site.

On-premises server administrators can set tiered capacity attributes with the following rules: the number can't exceed the number of licenses of a given type that are activated for the site; a value must be supplied for every tiered capacity license type every time any one or more of them is set.

A value of -1 removes the administrator-applied limit for a license type, and reverts the limit to the number of activated licenses configured for the role. Setting the value of a tiered capacity to -1 will not automatically increase the limit if more licenses are purchased and activated for the role in the future.

To use role-specific license limits, the userQuota must be set to null by omitting the attribute from Create Site or Update Site request, or setting its value to -1. Attempting to set values for both tiered capacities and userQuota will result in an error.

data-alerts-enabled-flag

(Optional, boolean) If true, data alerts are enabled on the site. Default value is true.

commenting-mentions-enabled-flag

(Optional, boolean) If true, mentions for commenting are enabled. Default value is true.

catalog-obfuscation-enabled-flag

(Optional, boolean) If true, catalog obfuscation is enabled on the site. Default value is true.

flow-auto-save-enabled-flag

(Optional, boolean) If true, flow auto save is enabled on the site. Default value is true.

run-now-enabled-flag

(Optional, boolean) If true, run now for schedules is enabled which allows non-administrators to run schedules manually. Default value is true.

metrics-content-type-enabled-flag

(Optional, boolean) If true, the metrics content type is enabled on the server. Default value is false.

notify-site-admins-on-throttle-flag

(Optional, boolean) If true, site admins will be notified if their background jobs are being throttled. Default value is false.

authoring-enabled-flag

(Optional, boolean) If true, web authoring is enabled. Default value is false.

custom-subscription-email-enabled-flag

(Optional, boolean) If true, sending custom subscription email is enabled. If set to false after being set true, the current custom subscription email is voided. Default value is false.

custom-subscription-email

A valid custom email that will be sent if customSubscriptionEmailEnabled is set to true. Default value is false.

custom-subscription-footer-enabled-flag

(Optional, boolean) If true, a custom footer will be included on subscription and data alert emails. If set to false after being set true, the current custom subscription footer is voided. Default value is false.

custom-subscription-footer

A custom subscription footer that will be added to subscription and data alerts if customSubscriptionFooterEnabled is set to true. Default value is false.

ask-data-mode

The mode of the ask data feature on the site. Can be set to one of two values:
  • DisabledByDefault - Enables creation of Ask Data lenses for all published data sources. Data sources do not have lenses created automatically.
  • DisabledAlways - Disables Ask Data lenses and related content throughout the site. Preserves information about lenses and data source indexes, which are restored if Ask Data is re-enabled.
Default value is DisabledByDefault. For more information, see Disable or Enable Ask Data for a Site.

named-sharing-enabled-flag

(Optional, boolean) If true, named sharing is enabled. Default value is true.

cataloging-enabled-flag

(Optional, boolean) If true, data catalog is enabled for the site. Default value is true.

derived-permissions-enabled-flag

(Optional, boolean) If true, derived permissions are enabled for the site. Default value is false.

user-visibility-mode

(Optional, string) When the value is FULL users can see the user of other site users. If the value is LIMITED User information on the site is not visible to other users. Default value is FULL. For more information, see User Visibility.
use-default-time-zone (Optional, boolean) Set this to true, if you want the time-zone attribute use the Server time Zone at run time. This attribute is set to official IANA name.  If this is set to false, the time-zone value must be specified.
time-zone (Optional, string) Use this attribute to specify a time zone other than the Server time zone at run time. Only canonical names in the official IANA database are supported. You can find the list of the canonical time zone names on Wikipedia.
autoSuspendRefreshEnabled (Optional) Tableau can automatically suspend extract refresh tasks for inactive workbooks to save resources. Specify true to enable or false to disable. Default is true.
autoSuspendRefreshInactivityWindow (Optional) An integer between 7 and 100 to indicate the number of days to wait before automatically suspending extract refresh tasks for inactive workbooks. The default is 30.
explainDataEnabled

(Optional, boolean) Set this attribute to false to disable Explain Data capabilities for a site. By default, this attribute is set to true. For more information about this site setting, see Disable or Enable Explain Data for a Site in the Tableau Server Help.

dqwSubscriptionsEnabled

(Optional, boolean) Set this attribute to false to exclude data quality warnings (DQWs) from subscription emails. By default, this attribute is set to true. For more information about this site setting, see Disable or Enable Explain Data for a Site in the Tableau Server Help.

attribute-capture-enabled

(Optional, boolean) Set this attribute to true to enable user attribute functions used in embedded content to accept the passing of user attributes from a JSON Web Token (JWT) via Tableau connected apps. The user attributes are passed to Tableau at runtime to control and customize the data that can show for an authorized user. By default, this attribute is set to false. For more information, see Tableau Embedding API v3 Help. This attribute is available starting from API version 3.25.

Starting in October 2025 (API version 3.27), you can also use this attribute to pass user information about your identity provider to Tableau Cloud. During single sign-on (SSO), user attribute functions in Tableau content can accept attributes from OIDC claims or SAML assertions. For more information, see OIDC or SAML topics in the Tableau Cloud Help.

groupAssertionsEnabled (Optional) Set to true to allow assertions into group membership using session info. Set to false if you don't want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for the entire site, including the following settings:
  • groupAssertionsSAMLEnabled
  • groupAssertionsOIDCEnabled
  • groupAssertionsConnectedAppsEnabled
groupAssertionsSAMLEnabled (Optional, boolean) Set to true to allow assertions into group membership using SAML session info. Set to false if you don't want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for SAML sessions.
groupAssertionsOIDCEnabled (Optional, boolean) Set to true to allow assertions into group membership using OIDC session info. Set to false if you don't want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for OIDC sessions.
groupAssertionsConnectedAppsEnabled (Optional, boolean) Set to true to allow assertions into group membership using Connected App JWT tokens. Set to false if you don't want users to be able to be asserted into groups via connected apps. The default is false. If this attribute is set to false, it will disable group assertions for JWT connected app connections.
groupSetsEnabled (Optional, boolean) Set to true to allow groups sets. Set to false if you don't want group sets support for the site. The default is false. If this attribute is set to false, it will disable group sets for the site.
recycleBinEnabled (Optional, boolean) Set to true to enable the Recycle Bin. Set to false to disable it. The default is true.
Any combination of the attributes inside the element is valid. Only the attributes that are included are updated for the site. If no attributes are present, no update occurs. To update only the logo, include an empty element (``) and the logo in the multipart message. Starting in API version 2.3, you can call Update Site to upload a custom logo image for the site. (For information about custom logos, see [Custom the Name or Logo](https://help.tableau.com/current/server/en-us/help.htm#customize_namelogo.htm) in the Tableau Server Help.) To upload a logo image, you include the image in a multipart message; this is similar to how you publish a workbook or data source. You must include the following headers in the request: - `MIME-Version: 1.0` - `Content-Type: multipart/mixed; boundary=boundary-string` - `X-Tableau-auth: authentication-token` The following example shows the request body for an Update Site request that updates the site with a new logo. For this example, the boundary string has been set in the header to `6691a87289ac461bab2c945741f136e6`. The `` element can be empty if you're calling Update Site only to update the logo image. ``` --6691a87289ac461bab2c945741f136e6 Content-Disposition: name="request_payload" Content-Type: text/xml --6691a87289ac461bab2c945741f136e6 Content-Disposition: name="site_logo"; filename="MySiteLogo.png" Content-Type: application/octet-stream logo stream here --6691a87289ac461bab2c945741f136e6-- ``` To clear a custom logo image and revert to using the default logo for the site, call Update Site with a multipart message, but leave the portion of the request body blank where you would normally include the logo stream. For more information about creating multipart messages, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### Permissions Tableau Server: This method can only be called by server administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:sites: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 ``` ``` Response Body Details: - userQuota, storageQuota, and tiered capacity (tierCreatorCapacity, tierExplorerCapacity, tierViewerCapacity) attributes are only present in the response body if those quotas have been set for the site being queried. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400008Invalid revision history limitThe value for the revision history limit isn't an integer.
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400004Invalid administrator modeAn administrator mode parameter was provided in the request with an invalid value. The valid values are ContentOnly and ContentAndUsers.
400400004Invalid stateA state parameter was provided in the request with an invalid value
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type wasn't PUT.
409409001Site name conflictThe new site name in the request already belongs to an existing site.
409409002Site URL conflictThe new content URL in the request already belongs to an existing site.
409409004User quota and tiered capacity conflictThe request can't set both tiered capacity attributes and userQuota. One or the other must be null.
409409004License limit exceededThe request can't set tiered capacity attributes or userQuota values that are larger than the number of active licenses configured for the site.
409409004Administrator mode or user quota conflictThe request can't set adminMode to ContentOnly and also specify a userQuota value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-site.xml` **Content of update-site.xml:** ``` ``` **Example response:** ``` ``` ## Update Subscription Modifies an existing subscription on Tableau Server. You can change the subject, server schedule, and suspension state for the subscription. Tableau Server and Tableau Cloud each have a different model for schedules and tasks. On Tableau Server, you create a schedule and add a task to it. On Tableau Cloud you create a task and define it's frequency. While the Create Subscription endpoint path and parameters are the same for both Server and Cloud, because the models are different, the request and response bodies are different. - [Tableau Server Requests](#update_subscription_server) - [Tableau Cloud Request](#update_subscription_cloud) #### URI PUT /api/api-version/sites/site-id/subscriptions/subscription-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
subscription-idThe ID of the subscription to update.
#### JWT Access Scope `tableau:tasks:update` _(this scope is included in the scope: `tableau:tasks`)_ This scope can be used to enable this REST method to be called from a unified access token or connected app. 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), or [Tableau Cloud connected app scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Tableau Server connected apps scopes](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm). _Available in API 3.20 (Tableau Cloud June 2023 / Tableau Server 2023.3._ ### Tableau Server Request Update the attributes of a subscription task on a server schedule on Tableau Server. _For Tableau Cloud, see [Tableau Cloud Request](#update_subscription_cloud)._ ``` ``` ``` { "subscription": { "subject": "subscription-subject", "attachImage": "attach-image-flag", "attachPdf": "attach-pdf-flag", "pageOrientation": "page-orientation", "pageSizeOption": "page-size-option", "suspended": "suspended-flag", "schedule": { "id": "new-schedule-id" }, "content": { "sendIfViewEmpty": "send-view-if-empty-flag" } } } ``` #### Attribute Values
new-subscription-subject (Optional) A new subject for the subscription.
attach-image-flag

(Optional) Setting this true will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default behavior if neither attachImage or attachPdf are specified.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachImage to false will cause an error.

attach-pdf-flag

(Optional) Setting this true will cause the subscriber to receive mail with a .pdf file containing images of workbooks or views attached to it.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachPdf to true will cause an error.

page-orientation (Optional) The orientation of the pages produced when attach-pdf-flag is true. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-size-option (Optional) The type of page produced, which determines the page dimensions when attach-pdf-flag is true. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid. If this parameter is not present the page type will default to Letter.
suspended-flag

(Optional boolean) If true, the subscription is disabled, meaning it won't run until it's enabled using the Update Subscription method or Resume Subscription in the web UI. If false, the subscription is enabled.

new-schedule-id (Optional) The ID of a server schedule to associate this subscription with. To determine what schedules are available, call List Server Schedules. The type of the schedule must be Subscription.
send-view-if-empty-flag (Optional) Applies to views only. If true, an image is sent even if the view specified in a subscription is empty. If false, nothing is sent if the view is empty. The default value is true.
#### Permissions Tableau Server users can call this method to update any subscription that they have permission to create. For details, see [Create Server Subscription](#create_subscription). #### Response Code 200 #### Response Body ``` ``` ``` { "subscription": { "id": "subscription-id", "subject": "subscription-subject", "suspended": "suspended-flag", "pageOrientation": "page-orientation", "pageSizeOption": "page-size-option", "content": { "id": "content-id", "type": "content-type", "sendIfViewEmpty": "send-view-if-empty-flag" }, "schedule": { "id": "schedule-id", "name": "schedule-name" }, "user": { "id": "user-id", "name": "user-name" } } } ``` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400067Invalid subscription subjectThe subscription subject is null or empty.
400400069Invalid subscription typeThe subscription type is not Workbook or View.
400400069Invalid schedule typeThe schedule type is not Subscription.
400400133Invalid data condition typeThe data condition type is invalid for the subscription.
403403065No permissions to update subscription.The user does not have permission to update the specified subscription.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404023Schedule not foundThe schedule ID in the request body doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ### Tableau Cloud Request Update the attributes of a subscription task and its frequency on Tableau Cloud. _For Tableau Server, see [Tableau Server Request](#update_subscription_server)._ **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:** Administrators and any user with the creator role can create a custom schedule for a subscription task.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks:update     Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) #### URI PUT /api/api-version/sites/site-luid/subscriptions/task-luid #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
task-luidThe LUID of the extract refresh task. Use Query subscriptions to find task IDs by subscription subject or user.
#### Request Body ``` ``` ``` { "subscription": { "subject": "finance report", "attachImage": "true", "attachPdf": "true", "pageOrientation": "true", "pageSizeOption": "Folio", "suspended": "false", "message": "daily finance report", "content": { "id": "13237fd-6365-44d5-925b-644e5281b605", "type": "Workbook", "sendIfViewEmpty": "false" }, "user": { "id": "456" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Request Attributes `subject, contentId, userId` and all `schedule` attributes are **required** to create a custom schedule for a subscription, other attributes are optional with defaults. All attributes are optional when updating a custom schedule for a subscription.
subscription subject (Required to create subscription) string: A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment.
subscription attachImage

boolean: Setting this true will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default behavior if neither attachImage or attachPdf are specified. Default is false.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachImage to false will cause an error.

subscription attachPdf

boolean: Setting this true will cause the subscriber to receive mail with a .pdf file containing images of workbooks or views attached to it. Default is false.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachPdf to true will cause an error.

subscription pageOrientation enumeration: The orientation of the pages produced when attach-pdf-flag is true. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
subscription pageSizeOption enumeration: The type of page produced, which determines the page dimensions when attach-pdf-flag is true. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid. If this parameter is not present the page type will default to Letter.
subscription message string: The text body of the subscription email message.
subscription suspended boolean: If true, the subscription is disabled, meaning it won't run until it's enabled using the Update Subscription method or Resume Subscription in the web UI. If false, the subscription is enabled.
content id (Required to create subscription) LUID: The LUID of the workbook or view the user should be subscribed to.
content type (Required to create subscription) enumeration: Workbook to create a subscription for a workbook, or View to create a subscription for a view.
content sendIfViewEmpty boolean: Applies to views only. If true, an image is sent even if the view specified in a subscription is empty. If false, nothing is sent if the view is empty. The default value is true.
userId (Required to create subscription) LUID: The LUID of the user to create the subscription for.

Note: The user must have an email address defined in Tableau Server.

schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### cURL Request Example `curl --location --request PUT "qa-near.tsi.lan/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/subscriptions/r2345998-2ead-4894-bb50-1054a9109876" --header "Content-Type: application/xml" --data " > "` #### Response Code 200 #### Response Body ``` ``` ``` { "subscription": { "id": "789", "subject": "finance report", "attachImage": "true", "attachPdf": "true", "pageOrientation": "true", "pageSizeOption": "Folio", "message": "daily finance report", "content": { "id": "13237fd-6365-44d5-925b-644e5281b605", "type": "Workbook", "sendIfViewEmpty": "false" }, "user": { "id": "09876fd-6365-44d5-925b-644e528d5678" } }, "schedule": { "id": "54321fd-6365-44d5-925b-644e52812345", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user is not authorized to make this request.
404404002User not foundThe user specified in the request could not be found.
404404025Subscription not foundThe task for the subscription could not be found.
409409004invalid parameter valueThe request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between start and end times are not increments of one hour, this error will result.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Table Update the table description, certify a table, or a assign a user contact to the table asset. This method is available if your Tableau Cloud site or Tableau Server is licensed with Data Management. #### URI PUT api/_api-version_/sites/_site-id_/tables/_table-id_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
table-idThe unique ID of the table asset.
#### Request Body ```
``` #### Attribute Values Any combination of attributes inside the **** element is valid. Only the attributes and child elements that are included result in updates to the table. If no attributes or nested elements are included, no update is made.
certification-status

(Optional) Use one of the following values:

  • true
  • false

These values are case sensitive.

certification-note (Optional) Custom text to accompany the certification status.
new-description-value (Optional) Custom text to describe the table asset.
new-contact-id (Optional) The ID (not name) of the certification owner.
#### Permissions If Tableau Server or Tableau Cloud is licensed through Data Management, the following users have permissions to update the table asset: - Tableau Server admins or Tableau Cloud site admins - Authorized users who have been granted explicit permission to edit or "Write" to the asset metadata #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:tables: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 **Example response:** ```
``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404032Table not foundThe requested table asset could not be found.
409409052Table errorAn unknown table asset error occurred.
409409057Table update errorAn unknown error occurred and the table asset could not be updated.
409409058Table update forbiddenA user without "write" permissions to the table asset attempted an update.
## Update Tableau extensions server settings Updates the settings for extensions of a server. **Version:** Available in API 3.21 ( Tableau Server 2023.3) and later. Not available for Tableau Cloud. _[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 users with server administrator permissions.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:extensions\_server\_settings:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/settings/extensions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body Copy ```       true      https://test.com   ``` Copy ``` {  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }} ``` #### Request Attributes
extensionsEnabled

Required. Boolean. If true extensions are allowed to run on the server. If false all extentions are disabled on the server.

blocklist

(Optional) Array. A list of domains that are not allowed to serve extensions to the Tableau Server. Domains are in the form of https://blocked_example.com

(Optional) String. The URL of the extension you want to from the server.

#### cURL Request Example `curl --location --request PUT "http://MY-SERVER/api/3.29/settings/extensions" --header "Content-Type: application/xml" --header "X-Tableau-Auth: YqB9_MHoTHO26HGsFBFEBg|bQDOIH4MsqFGvUDYTrRYh633vrZHBt6d|a946d998-2ead-4894-bb50-1054a91dcab3" --data "truehttps://test.com "` #### Response Code 200 #### Response Body Copy ```      true   https://test.com   ``` Copy ``` {  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403000Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
404404000Bad RequestThe requested resource could not be found.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Tableau extensions site settings Updates the settings for extensions of a site. **Version:** Available in API 3.21 (Tableau Cloud June 2023 / Tableau Server 2023.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 users with site or server administrator.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:extensions\_site\_settings:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/settings/extensions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body Copy ```       true    false          http://localhost:9123/Dynamic.html      true      true        true      true      true      false   ``` Copy ``` {     "extensionsSiteSettings": {  "extensionsEnabled": true,  "useDefaultSetting": false,  "safeList": [    {    "url": "http://localhost:9123/Dynamic.html",    "fullDataAllowed": true,    "promptNeeded": true    }   ],  "allowTrusted": true,  "includeSandboxed": true,  "includeTableauBuilt": true,  "includePartnerBuilt": false  } } ``` #### Request Attributes
extensionsEnabled

Required. Boolean. If true, extensions are allowed to run on the site. If false, no extensions are aloowed to run on the site even if their URL is in the site safelist.

useDefaultSetting (Optional) Boolean. If extensions are enabled on the server, the default settings allow extensions to run on a site, provided the extension is not specifically blocked on the server.
safeList url

(Optional) Array. The list of URLs of the extensions allow to run on the site. Regular expressions are supported.

An extension permissions to run an a site are also dependent on the domain of the URL not being present on the server blocklist, and server and site extension enablement being true.

Note that updating the safelist replaces the existing list with the new list. If you want to add a URL to the existing list, you must also include the existing URLs in the new list.

safeList fullDataAllowed (Optional) Boolean. Set to true to allow the extension full access to the underlying data. By default, when you add an extension to the safe list, the extension only has access to the summary (or aggregated) data. Many extensions require full data access to function properly.
safeList promptNeeded (Optional) Boolean. The prompt tells users details about the extension and whether the extension has access to full data. Set to true to give users the ability to allow or deny the extension from running. Set to false to hide this prompt from users, allowing the extension to run immediately.
allowTrusted (Optional) Boolean. If true, specific categories of extensions (sandboxed, Tableau-built, or partner-built) are allowed to run by default on the site. If false, no extensions are allowed unless they are explicitly added to the safeList.
includeSandboxed (Optional) Boolean. Valid only if allowTrusted is true. When true, sandboxed extensions are allowed to run by default. Sandboxed extensions run in a protected environment and cannot access other resources or data on the web.
includeTableauBuilt (Optional) Boolean. Valid only if allowTrusted is true. When true, extensions built by Tableau are allowed to run by default.
includePartnerBuilt (Optional) Boolean. Valid only if allowTrusted is true. When true, extensions built by Tableau's trusted partners are allowed to run by default.
#### cURL Request Example `curl --location --request PUT http://MY-SERVER/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/settings/extensions " --header "Content-Type: application/xml" --header "X-Tableau-Auth: YqB9_MHoTHO26HGsFBFEBg|bQDOIH4MsqFGvUDYTrRYh633vrZHBt6d|a946d998-2ead-4894-bb50-1054a91dcab3" --data "truefalsehttp://localhost:9123/Dynamic.htmltruetruetruetruetruefalse"` #### Response Code 200 #### Response Body Copy ```       true    false          http://localhost:9123/Dynamic.html      true      true        true    true    true    false                                                           ``` Copy ``` {  "extensionsSiteSettings": {    "extensionsEnabled": "true",    "useDefaultSetting": "false",    "safeList": [    {     "url": "http://localhost:9123/Dynamic.html",     "fullDataAllowed": true,     "promptNeeded": true     }    ],   "allowTrusted": true,    "includeSandboxed": true,    "includeTableauBuilt": true,    "includePartnerBuilt": false    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403000Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
404404000Site Not FoundThe site ID in the URI doesn't correspond to an existing site.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Tableau MCP Settings for Site Updates the current list of Tableau MCP settings for a specified site. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Server administrators and site administrators. **Access Scope**: `tableau:mcp_site_settings:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). For more information about configuring the Tableau MCP settings for a site, see [Site settings for Tableau MCP](https://tableau.github.io/tableau-mcp/docs/configuration/mcp-config/site-settings). #### URI PUT /api/api-version/sites/site-id/settings/mcp #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body ``` mcp-settings-key mcp-settings-value mcp-settings-key mcp-settings-key mcp-settings-value ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "mcp-settings-key", "value": "mcp-settings-value" }, { "key": "mcp-settings-key" }, { "key": "mcp-settings-key", "value": "mcp-settings-value" } ] } } ``` #### Attribute Values
key(Required) String. Specifies which setting to add, modify, or remove.
value(Optional) String. Provides the value associated with the key. If this property is omitted, then the associated key will be removed from the current Tableau MCP settings for the given site.
#### Response Code 200 #### Response Body ``` INCLUDE_TOOLS datasource,search-content INCLUDE_TAGS sales,marketing,reviews DISABLE_METADATA_API_REQUESTS true MAX_RESULT_LIMITS query-datasource:1000 ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "INCLUDE_TOOLS", "value": "datasource,search-content" }, { "key": "INCLUDE_TAGS", "value": "sales,marketing,reviews" }, { "key": "DISABLE_METADATA_API_REQUESTS", "value": "true" }, { "key": "MAX_RESULT_LIMITS", "value": "query-datasource:1000" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid parameterThe mcpSiteSettings entity is empty; the settings key is null, missing, or invalid; or site LUID format is invalid.
401401002Invalid authentication credentialsMissing or invalid authentication credentials.
401403001Missing authentication tokenAuthentication token not provided.
403403000Insufficient permissionsUser isn't an administrator
403403010Site mismatchAuthenticated user's site does not match the site LUID in the request.
403403157Feature disabledFeature not enabled.
403N/AInsufficient OAuth scopeThe user lacks the required OAuth scope.
404404000Site not foundA site with the specified LUID does not exist.
500500000Internal server errorUnknown server error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update User Modifies information about the specified user. **Tableau Server** If Tableau Server is configured to use local authentication, you can update the user's name, email address, password, or site role. If Tableau Server is configured to use Active Directory for authentication, you can change the user's display name (full name), email address, and site role. However, if you synchronize the user with Active Directory, the display name and email address will be overwritten with the information that's in Active Directory. **Tableau Cloud** For Tableau Cloud, you can update the site role for a user, but you cannot update or change a user's password, user name (email address), or full name. #### URI PUT /api/api-version/sites/site-id/users/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to update.
#### Request Body ``` ``` ``` { "user": { "fullName":"new-full-name", "email":"new-email", "password":"new-password", "siteRole":"new-site-role", "authSetting":"new-auth-setting", "identityPoolName":"identity-pool-name", "idpConfigurationId":"idp-configuration-id", "language":"language", "locale":"locale" } } ``` #### Attribute Values Any combination of the elements inside the element is valid. Only those elements present will result in updates to their values for the user. If no elements are present, the update will not take effect.
new-full-name (Optional) The new name for the user. Users can change names without affecting the groups they belong to. Tableau Server only. Not available in Tableau Cloud.
new-email (Optional) The new email address for the for the Tableau Server user.

Starting in API 3.26 (July 2025), the email address where the Tableau Cloud user can receive notifications. If no value is provided, Tableau Cloud uses the username value to send notifications to.

new-password (Optional) The new password for the user. Tableau Server only. Not available in Tableau Cloud.
new-site-role

The new site role to assign to the user. You can assign the following roles: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, or Viewer.

Note: Only a user in the ServerAdministrator site role can use the REST API to add or remove another user from the ServerAdministrator site role. Users in the ServerAdministrator site role can only be moved to the Creator site role if one or more Creator licenses have been activated on the server; otherwise these users can only be moved to the Publisher site role. This method only supports the ServerAdministrator site role in API 2.8 and later.

new-auth-setting (Optional) The authentication type for the user.

Tableau Server

The authSetting attribute only applies when updating users on sites with site-specific SAML-enabled settings.

Tableau Cloud

The ability to create and enable multiple authentication methods simultaneously was introduced in API 3.25 (January 2025). As a result of this capability, consider the following:

  • For Tableau with MFA (or Tableau) authentication: To assign Tableau with MFA authentication (or Tableau authentication if still available for your site), you can use the authSetting or idpConfigurationId attribute, but not both.

  • For SAML and OIDC-based authentication:

    • For new configurations: To assign SAML or OIDC-based authentication, whose configurations were created during or after January 2025, you must use the idpConfigurationId attribute for assigning user authentication. Skip to idp-configuration-id.

    • For existing configurations: To assign SAML and OIDC-based authentication, whose configurations that Tableau has automatically prefixed with "Initial" (such as "Initial SAML," "Initial Google," "Initial OIDC," or "Initial Salesforce"), you can continue to use the authSetting attribute for assigning user authentication. Alternatively, you can use the idpConfigurationId attribute for assigning user authentication. Do not use both.

  • Notes:

You can assign the following values for the authSetting attribute:

  • SAML - The user signs in using the identity provider (IdP) configured for the site. For Tableau Cloud configuration, see Enable SAML Authentication on a Site. For Tableau Server, see Configure Site-Specific SAML.
  • OpenID - Tableau Cloud only: The user signs in using Google, Salesforce or OpenID Connect provider credentials. OpenID corresponds to Google, Salesforce, or OIDC authentication configuration in Tableau Cloud authentication settings.
  • TableauIDWithMFA - Tableau Cloud only: The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see About multi-factor authentication and Tableau Cloud.
  • ServerDefault - The user signs in using the default authentication method that's set for the server. For Tableau Cloud, if Tableau hasn't updated your site to require Tableau with MFA yet, you can continue to use this authentication type on a temporary basis. The ServerDefault value corresponds to TableauID in authentication settings. For Tableau Server, the SAML Server help page describes default authentication options.

identity-pool-name (Optional, Tableau Server only) When identity pools are configured, the name of the identity pool.

Starting in API 3.19, include the identity pool name when identity pools are configured and you need to add a user to an identity pool that uses the local identity store and OIDC authentication. For more information, see Identity Pools Methods.

idp-configuration-id

(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).

To find the idpConfigurationId attribute value, use the List Authentication Configurations for Site method.

Notes:

  • In cases where both attributes are supported, you can use the idpConfigurationId attribute or the authSetting attribute, but not both.
  • If neither idpConfigurationId nor authSetting attribute is specified, then TableauIdWithMFA (or in some cases ServerDefault if that option is still available for your site) is the authentication assigned to the user.
language

(Optional, Tableau Cloud only) Language of the user.

Starting in API 3.28 (March 2026), you can set the user's default language in Tableau Cloud to one of the supported languages (ISO 639-1). You can assign one of the following values: de, en_GB, en, es, fr_CA, fr, it, nl, pt, sv, th, ja, zh, zh_TW, or ko.

locale

(Optional, Tableau Cloud only) Locale of the user.

Starting in API 3.28 (March 2026), you can set the user's default locale to one of the supported locales. You can assign one of the following values: ar_SA, ar_AE, ar_BH, ar_DZ, ar_EG, ar_IQ, ar_JO, ar_KW, ar_LB, ar_LY, ar_MA, ar_OM, ar_QA, ar_SD, ar_SY, ar_TN, ar_YE, be_BY, bg_BG, ca_ES, cs_CZ, da_DK, de_DE, de_AT, de_CH, de_LU, el_GR, el_CY, en_US, en_AU, en_CA, en_GB, en_IE, en_IN, en_MT, en_NZ, en_PH, en_SG, en_ZA, es_ES, es_AR, es_BO, es_CL, es_CO, es_CR, es_DO, es_EC, es_GT, es_HN, es_MX, es_NI, es_PA, es_PE, es_PR, es_PY, es_SV, es_US, es_UY, es_VE, et_EE, fi_FI, fr_FR, fr_BE, fr_CH, fr_LU, fr_CA, ga_IE, he_IL, hi_IN, hr_HR, hu_HU, id_ID, is_IS, it_IT, it_CH, ja_JP, ko_KR, lt_LT, lv_LV, mk_MK, ms_MY, mt_MT, nl_NL, nl_BE, no_NO, pl_PL, pt_BR, pt_PT, ro_RO, ru_RU, sk_SK, sl_SI, sq_AL, sr_RS, sr_BA, sr_ME, sv_SE, th_TH, tr_TR, uk_UA, vi_VN, zh_CN, zh_HK, zh_SG, or zh_TW.

#### Permissions This method can only be called by server administrators or site administrators. In addition, site administrators have some limitations in what changes they can make to users: - Site administrators cannot set the fullName value. - On Tableau Server, site administrators can change the email and password values only if the caller is a site administrator for all sites that the user is a member of. On Tableau Cloud, you cannot change a user's email or password. - Site administrators can change the siteRole value only if the site is configured to allow site administrators to add and remove site users. Site administrators on Tableau Cloud can change the siteRole value because they have permission to add and remove site users. Starting in API 3.26 (July 2025), site administrators can update a user's email address that is different from the user's username. This email address is for receiving notifications only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:users: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 ``` ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400000 Invalid email address The email attribute does not contain a valid email address.
400 400003 Bad request The user authentication setting ServerDefault is not supported for you site. Try again using TableauIDWithMFA instead.
400 400012 Bad request The user cannot be assigned the Unlicensed role because they are still a member of a group that has a minimum site role set.
400 400217 Unsupported language The specified language is not valid or not supported.
400 400218 Unsupported locale The specified locale is not valid or not supported.
403 403009 Licensing update on self forbidden A user cannot update their own licensing role.
403 403009 Guest update forbidden The Guest user is a special user and cannot be updated.
400 400013 Invalid site role

The value of the siteRole attribute must be Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, or Viewer.

403 403193 Forbidden A non-administrator user called this method or doesn't have permissions to update language for the user.
403 403194 Forbidden A non-administrator user called this method or doesn't have permissions to update locale for the user.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The user ID in the URI doesn't correspond to an existing user.
405 405000 Invalid request method Request type was not PUT.
409 409000 User conflict The user with the specified name is already registered on the site in the same domain.
409 409014 Licensing conflict The request is attempting to update the user to a licensing role that has insufficient capacity.
500 500109 Internal language error The language request could not be completed.
500 500110 Internal locale error The locale request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## 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
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
#### Request Body ``` ``` #### Attribute Values
enabled-flag (Required, boolean) If true, the specified site notifications will be on. If false, the specified site notifications will be off.
channel (Required, string) Specifies the channel that the notification preferences are to be updated (turned on or off). Valid channels are: email, in_app, and slack.
notification-type

Specifies the notification type for which the notification preferences are to be updated (turned on or off). Valid notification types are: comments, webhooks, prepflow, share, dataalerts,and extractrefresh.

#### 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 ``` Success Success ``` #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Invalid PermissionsInvalid permission to update site user notification settings.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodThe request type was not PATCH.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example response ``` Success Success ``` ## Update Virtual Connection Updates a virtual connection's name, owner, project, or certification status. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Overwrite permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-id/virtualconnections/virtualconnection-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body _(Use the icon in the top right corner to copy the text.)_ ``` ``` _(Use the icon in the top right corner to copy the text.)_ ``` { "virtualConnection": { "name": "virtualconnection-name", "isCertified": "certified-flag", "certificationNote": "certification-message", "project": { "id": "project-id" }, "owner": { "id": "owner-id" } } } ``` #### Request Attributes
virtualconnection-name The name of the virtual connection.
certification-flag Boolean. If true, the virtual connection is certified. If false, it won't.
certification-message The certification label's message.
project-id The LUID of the project the virtual connection is located in.
owner-id

The LUID of the user that owns the virtual connection.

Request attributes that are different from the virtual connection's current properties result in updating the virtual connection. #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data @data.xml ``` **Contents of data.xml.** _(Use the icon in the top right corner to copy the text.)_ ``` ``` #### Response Code 200 #### Response Body ``` ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "owner": { "id": "owner-id" }, "id": "virtualconnection-id", "isCertified": certified-flag, "name": "virtualconnection-id" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400203Generic errorAn unknown error occurred.
403403004User not authorized to change virtual connectionCheck to make sure the user has the required permissions.
403403176User not authorized to change virtual connection's ownerCheck to make sure the user has the required permissions.
403403177User not authorized to move assets into the target project.Check to make sure the user has the required permissions.
403403178User not authorized to move the virtual connectionCheck to make sure the user has the required permissions.
404404049Virtual connection not foundCheck the virtual connection LUID.
409409124A virtual connection with the chosen name already exists in the project.Try a different virtual connection name.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Virtual Connection Database Connections Updates the server address, port, username, or password for the specified database connection in a virtual connection. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** Users who are administrators or have the site role of Creator or higher can update a database connection.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtualconnectionconnections:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/connections/connection-id/modify #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site that contains the virtual connection.
virtual-connection-idThe LUID for the virtual connection that includes the database connections.
connection-idThe ID of the database connection. To determine what connections are in a virtual connection, call List Virtual Connection Database Connections.
#### Request Body ```   ``` ``` {  "connection": {    "serverAddress": "server-address",    "serverPort": "port-number",    "userName": "test",    "password": "password"  }} ``` #### Request Attributes
connection serverAddressThe new server for the database connection.
connection serverPortThe new port for the database connection
connection userNameThe new username for the database connection.
connection passwordThe new password for the database connection.
#### cURL Request Example `curl --location --request PUT "https://MY_SERVER/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/virtualconnections/26bc30d8-90d6-4af1-922d-ac285e7b08fb/connections/26bc30d8-90d6-4af1-922d-ac285e7b08fb"` #### Response Code 200 #### Response Body Copy ```          ``` Copy ``` {  "virtualConnectionConnections": {    "connection": {      "id": "connection-id",      "serverAddress": "server-address",      "serverPort": "port-number",      "userName": "connection-user-name",      "password": "password"    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002UnauthorizedThe authentication token provided in the request header was invalid or has expired.
403403004Operation unauthorizedThe user isn’t authorized to perform the task.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Virtual Connection Now Runs an extract refresh on the specified virtual connection. This method identifies and refreshes only the tables in the virtual connection that are configured as extracts; live tables are ignored. No additional input is required from the caller. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). **Version**: Available in API 3.30 and later. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Users who are not server administrators or site administrators can only refresh extracts for virtual connections if they own the virtual connection, or if they are the project leader for the project. **Access Scope**: `tableau:tasks:run` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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-id/virtualconnections/virtualconnection-id/refresh #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection to refresh.
#### Request Body The request body is an empty tsRequest element. ``` ``` ``` {} ``` #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl --request POST 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/refresh' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 202 #### Response Body ``` ``` ``` { "job": { "id": "job-id", "mode": "Asynchronous", "type": "RefreshExtract", "createdAt": "date-time", "extractRefreshJob": { "virtualConnection": { "id": "virtualconnection-id", "name": "virtualconnection-name" } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400403180Full refresh not allowed.A full refresh extract operation is not allowed for the virtual connection.
400403181Incremental refresh not allowed.The request specified an incremental refresh, but an incremental refresh extract operation is not allowed for the virtual connection.
400409090No extract-eligible tables.The virtual connection has no active revision or no extract-eligible tables. Live tables are not refreshed.
403403199User not authorized to refresh the virtual connection.The user must have either the Manage Extract or the Allow Extract Refresh permission on the virtual connection.
403409082Run Now is disabled for the site.Enable Run Now for the site, then try the request again.
404404049Virtual connection not found.Check the virtual connection LUID.
405405000Method not allowed.Direct virtual connection extract refresh is not enabled for this site.
409409093Operation already in queue.An extract refresh job for the virtual connection is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Work Copy Elements Updates columns, field descriptions, or table descriptions on a work copy. Returns HTTP 200 when every element is updated. The success body omits the elements that succeeded. A column update may set at most one of `caption`, `type`, or `role`. An unknown `type` or `role` is HTTP 400 with error code `400008`. Setting more than one of those fields is HTTP 400 with no numeric sub-code. If any element fails, the HTTP status is the status of the first failure and the body lists only the failed elements. **Version**: Available in API 3.30 (Tableau Cloud October 2026 / Server 2026.3) and later. **License**: Data Management or Tableau+. **Permissions**: Users who are not server administrators or site administrators can call this method only if they have Connect, Write (save), and VizqlDataApiAccess (API Access) permissions for the data source that the work copy was created from (either explicitly or implicitly). **Access Scope**: `tableau:datasources:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/tds/sites/site-luid/workcopy/workcopy-luid #### URI Parameter Values
api-versionThe version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (authUser.getSiteLuid()).
workcopy-luidThe LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}.
#### Request Body ``` Column Sales Total Sales FieldDescription Sales Total sales amount, revised. ``` ``` { "tdsElementList": [ { "elementType": "Column", "name": "Sales", "column": { "caption": "Total Sales" } }, { "elementType": "FieldDescription", "name": "Sales", "description": "Total sales amount, revised." } ] } ``` #### Attribute Values
tdsElementList[]Required. Elements to update. Must contain at least one element. An empty or missing list is HTTP 400 with error code 400008.
tdsElementList[].elementTypeOptional. Element type sent to the TDS service. For this operation, use Column, FieldDescription, or TableDescription. Any other value is forwarded and reported as a per-element failure.
tdsElementList[].nameRequired. Element name.
tdsElementList[].columnUsed when elementType is Column. At most one of caption, type, and role may be set — setting more than one is HTTP 400 with no numeric sub-code. A column with none of them set is a no-op update.
tdsElementList[].column.captionOptional. The caption to set.
tdsElementList[].column.roleOptional. An accepted FieldRole constant other than FIELD_ROLE_UNKNOWN or UNRECOGNIZED — either of those is rejected as HTTP 400 with error code 400008.
tdsElementList[].column.typeOptional. An accepted FieldType constant other than FIELD_TYPE_UNKNOWN or UNRECOGNIZED — either of those is rejected as HTTP 400 with error code 400008.
tdsElementList[].descriptionUsed when elementType is FieldDescription or TableDescription. Description text to set. When description is null, the field is left unset so the TDS service can report a per-element failure instead of HTTP 500.
#### Response Code 200 OK #### Response Body On full success the response is an empty `tsResponse` — `tdsElementResult` is omitted entirely rather than returned as an empty list. When one or more elements fail, the HTTP status is the status of the first failure and the body carries `tdsElementResult` for the failed elements only; see the Attribute Values table below and the Errors table for the failure shape. ``` ``` ``` {} ``` #### Attribute Values
tdsElementResult[]Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.
tdsElementResult[].elementTypeRequired. Element type of the failed element, copied from the request.
tdsElementResult[].nameRequired. Name of the failed element, copied from the request.
tdsElementResult[].statusRequired. Failure status for this element.
tdsElementResult[].status.codeRequired (within status). The translated HTTP status for this element (200, 400, 401, 403, 404, 409, 500, or 503). Not a Tableau 6-digit error sub-code.
tdsElementResult[].status.messageOptional. Error message from the TDS service.
#### Errors
HTTP statuserror CodeConditionDetails
400400008Missing tdsElementListtdsElementList is missing or empty. The list is required and must contain at least one element.
400400008Invalid column type or roletype or role is not an accepted field type or role. FIELD_TYPE_UNKNOWN, FIELD_ROLE_UNKNOWN, and UNRECOGNIZED are rejected. The accepted names are not in the staged sources.
400Column update sets more than one fieldA column update may set at most one of caption, type, or role.
400Invalid work copy LUIDThe work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).
400Per-element invalid argumentOne or more elements were rejected as invalid. The body lists only the failed elements, and each status.code is the HTTP status 400.
400Unmapped per-element gRPC statusThe TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.
401401000 / 401002Missing or invalid authenticationNo authentication token provided, or token is expired or invalid.
401Per-element unauthenticatedThe TDS service rejected an element as unauthenticated. The body lists only the failed elements.
403403004Data Management Bundle not licensedOn Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.
403403004Unable to resolve tenantOn Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.
403403004No cloud entitlementsOn Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.
403403004Subscription not entitledOn Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.
403Per-element permission deniedThe TDS service rejected an element because permission was denied. The body lists only the failed elements.
404Per-element not foundOne or more elements were not found. The body lists only the failed elements. This is not error code 404065, which the read methods return for a missing named element.
405405000Method not allowedThe HTTP method is not supported for this resource.
409Per-element already existsOne or more elements already exist. The body lists only the failed elements.
429429000Rate limit exceededToo many requests sent in a given time period.
500Per-element internal errorThe TDS service failed while editing an element. The body lists only the failed elements.
503Per-element unavailableThe TDS service was unavailable while editing an element. The body lists only the failed elements.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Workbook Modifies an existing workbook, allowing you to change the owner or project that the workbook belongs to and whether the workbook shows views in tabs. Updated workbooks can optionally be marked to appear in the recently viewed list. You can manage [Data Freshness Policy](https://help.tableau.com/current/online/en-us/data_freshness_policy.htm) for a workbook, and enable [View Acceleration](https://help.tableau.com/current/online/en-us/data_acceleration.htm) for views in a workbook. **Version:** Available in API 2.0 (Tableau Cloud and later). Data acceleration and data freshness policy setting update are added in API 3.22 (Tableau Cloud February 2024 / Server 2024.2). _[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 who are Tableau administrators can change a workbook's owner. Users who are not server administrators can update a workbook only if they have **Write** permission for the workbook and for the project. Tableau server and site administrators can change the `dataAccelerationConfig accelerationEnable` setting for a workbook. Workbook owners can change the setting if the [site is configured to enable acceleration by owners](https://help.tableau.com/current/server/en-us/data_acceleration.htm). Both administrators and workbook owners can change dataFreshnessPolicy settings.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:workbooks: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). #### URI PUT /api/api-version/sites/site-id/workbooks/workbook-id PUT /api/api-version/sites/site-id/workbooks/workbook-id?includeViewAccelerationStatus=include-view-acceleration-status-flag #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to update.
include-view-acceleration-status-flagQuery parameter is optional. Boolean: If includeViewAccelerationStatus=true then the list of views and the acceleration status of each view will be returned.
#### Request Body Copy ```                                                                                                                ``` Copy ``` {  "workbook": {    "name": "Finance",    "showTabs": "false",    "recentlyViewed": "false",    "encryptExtracts": "false",    "description": "The finance workbook.",    "project": {      "id": "3d6e8174-8cdf-43ec-94dd-0a1fd3662e47"    },    "owner": {      "id": "ca6b9ee-1d85-465b-abc2-f200ae2443b9"    },    "views": {      "view": {        "id": "22e48174-8cdf-43ec-94dd-0a1fd366gh78"      }    },    "dataAccelerationConfig": {      "accelerationEnabled": "false",      "accelerateNow": "false"    },    "dataFreshnessPolicy": {      "option": "FreshAt",      "freshAtSchedule": {        "frequency": "weekly",        "time": "08:15:00",        "timezone": "America/Los_Angeles",        "intervals": {          "interval": {            "weekDay": "Monday"          }        }      }    }  }} ``` Notes on [Data Freshness Policy](https://help.tableau.com/current/online/en-us/data_freshness_policy.htm) and [View Acceleration](https://help.tableau.com/current/server/en-us/data_acceleration.htm): - Data Freshness Policy and View Acceleration are independent features. - If a policy is set without view acceleration for a workbook, then only [query caching](https://help.tableau.com/current/online/en-us/data_freshness_policy.htm#understand-data-freshness-for-query-caches) for the workbook will be affected by the policy. - If a workbook has a data freshness policy configured, then updating the workbook to turn on view acceleration will not impact the policy unless the update explicitly changes that. - If a workbook has accelerated views enabled, but does not have a data freshness policy explicitly set for it, data will be refreshed on the site default cadence of every 12 hours. - On Tableau Cloud, view acceleration is limited to 12 refreshes per day, per view. If data freshness policy for a workbook is set to refresh data more frequently than every 2 hours, refreshes for a view after the 12th one will not trigger the computation that accelerates that view until the first refresh of the next day. - The preceding example shows the `freshAt` data freshness policy option. The `freshEvery` option is illustrated in the following Attribute Values section. #### Attribute Values
workbook name (Optional) New name for the workbook being updated.
workbook showTabs (Optional) Specify true to have the updated workbook show views in tabs; otherwise, false. The default is false.
workbook recentlyViewed (Optional) Set this value to true to have the updated workbook show in the site's recently viewed list. The default is false. Once the flag is set to true, setting it to false will have no effect. When enough views or workbooks have populated the recently viewed list, the oldest item will fall off the list and its recently-viewed-flag will revert to false.
workbook encryptExtracts (Optional) true to encrypt the extracts or false to not encrypt extracts. For more information, see Extract and Encryption Methods.
workbook description (Optional) Starting in API 3.20, the new description for the updated workbook.
project id (Optional) The LUID of a project to assign the workbook to.
owner id (Optional) The LUID of a user to assign the workbook to as owner.
dataAccelerationConfig accelerationEnable (Optional) Boolean: If true, accelerate the specified view(s). Default is false. Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.
dataAccelerationConfig accelerateNow

(Optional) Boolean: If true, make view acceleration available as soon as possible. Default is false. Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.

Note, the view object in the response (visible by using the ?includeViewAccelerationStatus=true query parameter) contains the accelerationStatus attribute, which can have the following values:

  • Off - Accelerate now is not enabled.
  • Pending - Accelerate now is enabled, but backgrounder processes are still running to make the acceleration available.
  • On Acceleration is enabled.
view id (Optional) LUID: The LUID of a view being accelerated. If no views are listed in the request then all views in the workbook will be accelerated.
dataFreshnessPolicy option (Optional) Enum: The data freshness policy mode for scheduling refreshment of the workbook data specified in the request. A valid value is one of:
  • SiteDefault - Use the default scheduling policy: refresh the data every 12 hours).
  • AlwaysLive - Refresh as the data changes.
  • FreshAt - Define a detailed cadence for refreshing the data.
  • FreshEvery- Define an interval between data refreshes.
freshAtSchedule frequency (Optional) Enum: The interval of workbook data refresh. A valid value is one of:
  • Day
  • Week
  • Month
freshAtSchedule time (Optional) Time in HH:MM:SS: The time of day that workbook data will be refreshed, in increment of 15 minutes. Minutes must end in 00, 15, 30, or 45. for instance time="10:30:00".
freshAtSchedule timeZone (Optional) Timezone string in IANA format: The timezone of the fresh at schedule time. For instance, timezone="America/Los_Angeles". If no timezone is provided, then the local timezone of the Tableau server is used."
freshAtSchedule intervals interval A value that specifies the interval between refreshes of view acceleration data. The value you specify here depends on the value specified in freshAtSchedule frequency.

Day

If the schedule frequency is Daily, no interval is specified. Any information specified in the <intervals> element is ignored.

Week

The interval expression is weekDay="weekday", where weekday is Sunday, Monday, Tuesday, Thursday, Friday, or specify multiple <interval> elements to indicate that scheduled jobs should run on multiple days during the week.

Month

The interval expression is monthDay="day", where day is either the day of the month (1, 2, etc.) or LastDay.

freshEverySchedule frequency (Optional) Enum: The time unit used for the cadence of view acceleration data refreshes. The count of the specified unit that occurs between refreshes is determined by freshEverySchedule value. A valid value is one of:
  • Minutes
  • Hours
  • Days
  • Weeks
freshEverySchedule value (Optional) Integer: The quantity of frequency units between view acceleration data refreshes. For instance, to specify a refresh every 4 hours, the dataFreshnessPolicy would look like:
XML JSON
Copy
<dataFreshnessPolicy option="FreshEvery">
  <freshEverySchedule 
  frequency="hours" 
  value="4" />
  </dataFreshnessPolicy>
Copy
"dataFreshnessPolicy": {
  "option": "FreshEvery",
  "freshEverySchedule": {
  "frequency": "hours",
  "value": 4"
  }
}
With the exception of `dataFreshnessPolicy options`, any combination of the elements inside the element is valid. Only the attributes and child elements that are included result in updates to the data source. If no attributes or nested elements are included, no update is made. The `dataFreshnessPolicy option` can only be one of listed options, and the elements of a specified option are required for that option to be updated. If the element is included, the id attribute must be included; other attributes of the element are ignored. If the element is included, the id attribute must be included; other attributes of the element are ignored. #### cURL Example `curl --location --request PUT "https://myServer/api/3.22/sites/d76ee955-ccc7-4333-ab3b-25ad2f8b1aa8/workbooks/c75aaa17-727f-48f8-80d1-1e66c30497c5" \ --header "Content-Type: application/xml" \ --header "X-Tableau-Auth: vZg2soQ2TuiULoJgZ60h_A|JIfSgwAzBQ2QfSVS1PSsHvD9uynKLzWz|d76ee955-ccc7-4333-ab3b-25ad2f8b1aa8" \ --header "Cookie: AWSALBAPP-0=AAAAAAAAAADyQT+tw75WkCZpVc/icDu7+3QFC+j4W5jpddfTbd8p8kxx5cx5slxbi2jSYvaAa0RBfxXvQ3tTjfZGHnt3ORMP5y79bEWR/lBKRMbJpRVYfI4jV32tGCld6NPtpgwYogFxZBo=; AWSALBAPP-1=_remove_; AWSALBAPP-2=_remove_; AWSALBAPP-3=_remove_; hid=uw2a-hap01" \ --data " "` #### Response Code 200 #### Response Body Copy ```                                                                                                                                      ``` Copy ``` {  "workbook": {    "name": "Finance",    "showTabs": "false",    "recentlyViewed": "false",    "encryptExtracts": "false",    "description": "The finance workbook.",    "project": {      "id": "3d6e8174-8cdf-43ec-94dd-0a1fd3662e47"    },    "owner": {      "id": "ca6b9ee-1d85-465b-abc2-f200ae2443b9"    },    "views": {      "view": {        "id": "22e48174-8cdf-43ec-94dd-0a1fd366gh78"      }    },    "dataAccelerationConfig": {      "accelerationEnabled": "false",      "accelerateNow": "false"    },    "dataFreshnessPolicy": {      "option": "FreshAt",      "freshAtSchedule": {        "frequency": "weekly",        "time": "08:15:00",        "timezone": "America/Los_Angeles",        "intervals": {          "interval": {            "day": "Monday"          }        }      }    }  }} ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). A response for the `dataFreshnessPolicy` segment with the `FreshEvery` option configured for weekly refreshes, would look like:
XML JSON
Copy
<dataFreshnessPolicy option="FreshEvery">
  <freshEverySchedule 
  frequency="Weeks" 
  value="1" />
  </dataFreshnessPolicy>
Copy
"dataFreshnessPolicy": {
  "option": "FreshEvery",
  "freshEverySchedule": {
  "frequency": "Weeks",
  "value": 1"
  }
}
n
#### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400036Bad requestView acceleration is enabled, but the workbook loads too quickly to make use of it, or the view has never been accessed by a user.
403403025Project update forbiddenA non-administrator user tried to change the workbook project, but the caller doesn't have Write permission for the target project.
403403027Owner update forbiddenA non-administrator user tried to change the workbook owner.
403403027Update forbiddenA non-administrator user tried to change the workbook, but the caller doesn't have Write permission for the workbook.
403403004Update forbiddenA non-administrative user tried to update the workbook, but does not have permissions to publish the updated workbook to the project.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002Owner not foundThe owner ID in the request body doesn't correspond to an existing user.
404404005Project not foundThe project ID in the URI doesn't match the project ID provided in the request body.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Workbook Connection Updates the server address, port, authentication type, username, or password for the specified workbook connection. If the workbook contains multiple connections to the same data source type, all the connections are updated. To update specific connections in a workbook containing multiple connections, see [Update Data Source Connections](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connections). **Version:**Available in API 2.0 (Tableau Cloud and later). **License:** No additional license required. **Permissions:** Users who are not server administrators or site administrators can update permissions only for a workbook for which they have the **Write** capability (either explicitly or implicitly). Only users with administrator permissions can enable or disable query tagging.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **Access Scope**: `tableau:workbooks:update` - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/workbooks/workbook-id/connections/connection-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to update.
connection-idThe ID of the connection to update.
#### Request Body ``` ``` ``` { "connection": { "serverAddress": "server-address", "serverPort": "port", "authenticationType": "auth-type", "userName": "connection-username", "password": "connection-password", "embedPassword": "embed-password", "queryTaggingEnabled": "query-tagging-enabled" } } ``` #### Attribute Values Any combination of the attributes inside the element is valid. If no attributes are included, no update is made.
serverAddress The new server for the connection.
port The new port for the connection.
authenticationType Added in version 3.27.

*The new authentication type for the connection.

Standard values:

  • auth-user-pass: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a data source or workbook that is currently using the target authentication type, you can query for it using the REST API methods Query Datasource Connections or Query Workbook Connections, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a workbook or data source which is available locally. Look for the value of the authentication attribute of the connection.

userName The new username for the connection.
password The new password for the connection.
embedPassword True to embed the password; otherwise, False.
queryTaggingEnabled

[!WARNING]

Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the queryTaggingEnabled attribute is deprecated, will no longer be supported, and may be retired in future releases.

Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by setting native_api.UserInfoInGeneratedSQLEnabled to true.

For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) or earlier: If true, query tagging is enabled. If false, query tagging is disabled. The default is false.

For more information on query tagging, see Understand Workbook Impact on Your Database Using Query Tagging.

#### cURL Request Example ``` curl --location --request PUT "/api/api-version/sites/site-id/workbooks/workbook-id/connections/connection-id" \ --header "Content-Type: application/xml" \ --header "X-Tableau-Auth;" \ --data "{ 'connection': { 'serverAddress': 'server-address', 'serverPort': 'port', 'authenticationType': 'auth-type', 'userName': 'connection-username', 'password': 'connection-password', 'embedPassword': 'embed-password', 'queryTaggingEnabled': 'query-tagging-enabled' } }" ``` #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403029Update forbiddenA non-administrator user tried to update the workbook connection, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404020Connection not foundThe connection ID in the URI doesn't correspond to an existing connection.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Workbook Connections Updates the server address, port, authentication type, username, or password for one or more connections in a data source. To update all connections in a given data source with the same connection information, see [Update Workbook Connection](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection). **Version**: Available in API 3.27 and later. **License**: No additional license required. **Permissions**: Users who are server administrators or site administrators can change the connection for a data source or enable [query tagging](https://help.tableau.com/current/pro/desktop/en-us/performance_tips.htm). Users who are not server administrators can only update a data source. If they have Write (save) permission for the data source and if they have write permission for the project. **Access Scope**: `tableau:datasources:update` - Access scope introduced in API 3.16 (Tableau Cloud June 2022 / Server 2022.3) For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/workbooks/workbook-id/connections #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
workbook-idThe ID of the workbook to update.
#### Request Body ``` Luid1 Luid2 ``` ``` { "connectionLuids": [ "Luid1", "Luid2" ], "connection": { "serverAddress": "newAddress", "serverPort": "newPort", "authenticationType": "new Auth Type", "userName": "Jane Doe", "password": "xxxxxx", "embedPassword": "false", "queryTaggingEnabled": "false" } } ``` #### Request Attributes Any combination of the attributes inside the element is valid. If no attributes are included, no update is made.
connectionLuids An array of connection LUIDs in the workbook that you are updating.
serverAddress The new server for the connection.
serverPort The new port for the connection
authenticationType

*The new authentication type for the connection.

Standard values:

  • auth-user-pass: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a data source or workbook that is currently using the target authentication type, you can query for it using the REST API methods Query Datasource Connections or Query Workbook Connections, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a workbook or data source which is available locally. Look for the value of the authentication attribute of the connection.

userName The new username for the connection.
password The new password for the connection.
embedPassword True to embed the password; otherwise, False.
queryTaggingEnabled

[!WARNING]

Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the queryTaggingEnabled attribute is deprecated, will no longer be supported, and may be retired in future releases.

Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by setting native_api.UserInfoInGeneratedSQLEnabled to true.

For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If true, query tagging is enabled. If false, query tagging is disabled. The default is false.

For more information on query tagging, see Understand Workbook Impact on Your Database Using Query Tagging.

#### cURL Request Example ``` curl --location --request PUT "/api/api-version/sites/site-id/workbooks/workbook-id/connections" \ --header "Content-Type: application/xml" \ --header "X-Tableau-Auth;" \ --data "{ 'connectionLuids': [ 'Luid1', 'Luid2' ], 'connection': { 'serverAddress': 'newAddress', 'serverPort': 'newPort', 'authenticationType': 'new Auth Type', 'userName': 'Jane Doe', 'password': 'xxxxxx', 'embedPassword': 'false', 'queryTaggingEnabled': 'false' } }" ``` #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbooks: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 ``` ``` ``` { "connection": { "id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "serverAddress": "database.example.com", "serverPort": "12345", "authenticationType": "new Auth Type", "userName": "jajohnson", "queryTaggingEnabled": "false" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403023Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
403403027Owner update forbiddenA non-administrator user tried to change connection information, but the caller doesn't have Write permission.
403403062Unsupported operationThe data source contains multiple connections, but the URI did not include /connections/connection-id to indicate which connection should be updated.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Workbook Now Refreshes the specified workbook. This method refreshes the specified workbook, with no need to associate the workbook refresh with a scheduled task. This method is the equivalent of selecting a workbook using the Tableau Server UI, and then selecting **Refresh Extracts** from the menu (also known as a "manual refresh"). **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). #### URI POST /api/api-version/sites/site-id/workbooks/workbook-id/refresh #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to refresh.
#### Request Body As of version 3.28, you can specify an incremental refresh on extracts by updating the request body as follows: ``` ``` #### Permissions Tableau Server users who are not server administrators or site administrators can only refresh workbooks if they own the workbook, or if they are the project leader for the project. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:tasks:run ``` 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 202 #### Response Body ``` ``` #### Version Version 2.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have sufficient permissions.
403403004Update forbiddenA non-administrative user tried to update the workbook, but does not have permissions to publish the updated workbook to the project.
404404000Site not foundThe site ID in the URI is unknown.
404404006Resource not foundThe workbook ID in the URI is unknown.
405405000Invalid request methodRequest type was not POST.
409409093Operation already in QueueThe extract refresh job is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/workbooks/5de9cc53-b17d-45af-804d-49144b39f29f/refresh" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -H "Content-Type: application/xml" –d @empty-tsrequest.xml"` **Content of empty-tsRequest.xml:** ``` ``` **Example response:** ``` ``` ## Update Workbook Thumbnail Images Updates a workbook's thumbnail images. The method adds a task to the backgrounder queue. Depending upon the length of the queue, the task might not run immediately. The method returns information about the backgrounder job responsible for running the task, including the `job id` that can be used with the [Query Job](#query_job) method. **Version**: Available in API 3.27 (Tableau Cloud December 2025 / Server 2025.3) and later. **License**: No additional license required. **Permissions**: Server administrators, site administrators, or workbook owner **Access Scope**: `tableau:tasks:run` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/workbooks/workbook-id/refreshThumbnails #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook.
#### Request Body None #### cURL Request Example ``` curl -X PUT "https://MY-SERVER/api/3.27/sites/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/workbooks/08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6/refreshThumbnails" -H "X-Tableau-Auth: a1B2c3D4e5F6g7H8i9J0kL|a1B2c3D4e5F6g7H8i9J0kL1m2N3o4P5q|12345678-90ab-4cde-8f01-234567890abc" ``` #### Response Code 202 #### Response Body ``` ``` ``` { "job": { "thumbnailsRefreshJob": { "workbook": { "id": "workbook-id", "name": "workbook-name" } }, "id": "job-id", "mode": "Asynchronous", "type": "RefreshThumbnails", "createdAt": "date-time" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Generic errorAn unknown error occurred. The content of the request body may be missing or incomplete, or may contain malformed XML.
403403179Permissions errorThe user calling the method isn't a site administrator, server administrator, or owner of the workbook.
404404006Workbook not foundThe workbook LUID is invalid, or the user doesn't have permission to read the workbook.
500500000Internal server errorThe server was unable to create the job.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Upload Data Source Encrypted Keychain Uploads the encrypted version of the embedded credentials. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:embedded\_credentials:upload - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/datasources/datasource-luid/applykeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
datasource-luidThe LUID of the data source to download the encrypted keychain from.
#### Request Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidMapping": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Request Attributes
associatedUserLuidMapping

(Required) The user IDs from the source site mapped to destination site user IDs.

encryptedKeychainList (Required) List of encrypted keychains from the source Tableau Server.
encryptedKeychain

(Required) Encrypted keychain from the source Tableau Server.

#### cURL Request Example ``` curl --location "https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/applykeychain" -X PUT --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data "<tsRequest> <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace> <destinationSiteLuid>9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d</destinationSiteLuid> <destinationServerUrl>http://example.com</destinationServerUrl> </tsRequest>" ``` #### Response Code 200 #### Response Body None #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404004 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Upload Flow Encrypted Keychain Uploads the encrypted version of the embedded credentials of a flow. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site. **Version**: Available in API 3.25 (Tableau Cloud February 2025 / Tableau Server 2025.1) and later. **License**: No additional license required. **Permissions**: This method can only be called by Tableau Cloud site and Tableau Server administrators. **Access Scope**: tableau:embedded\_credentials:upload - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-luid/flows/flow-luid/applyKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
flow-luidThe LUID of the flow to upload the encrypted keychain from.
#### Request Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= 2BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "tsRequest": { "associatedUserLuidMapping": { "userLuidPair": { "sourceSiteUserLuid": "9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d", "destinationSiteUserLuid": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" } }, "encryptedKeychainList": [ "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=", "2BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" ] } } ``` #### Request Attributes
associatedUserLuidMapping (Required) The user IDs from the source site mapped to destination site user IDs.
userLuidPair (Required) The user IDs needed to map source site flow owner to destination site flow owner.
sourceSiteUserLuid

(Required) The user ID of the flow owner from the source site; an attribute of the associatedUserLuidMapping element.

destinationSiteUserLuid (Required) The user ID of the flow owner on the destination site; an attribute of the associatedUserLuidMapping element.
encryptedKeychainList (Required) List of encrypted keychains from the source Tableau Server.
encryptedKeychain

(Required) Encrypted keychain from the source Tableau Server. You can get this value by calling the Download Flow Encrypted Keychain method.

#### cURL Request Example ``` curl --location "https://myserver/api/3.25/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/flows/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/applyKeychain" -X PUT --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=2BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" ``` #### Response Code 200 #### Response Body None #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404004 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Upload User Credentials Uploads user credentials to a site on a destination Tableau Cloud or Tableau Server. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:oauth\_credentials:upload - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/users/user-luid/uploadSavedCreds #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
user-luidThe LUID of the user whose credentials you want to upload.
#### Request Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidMapping": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Request Attributes
associatedUserLuidMapping

(Required) The user IDs from the source site mapped to destination site user IDs.

encryptedKeychainList (Required) List of encrypted keychains from the source Tableau Server.
#### cURL Request Example ``` curl --location --request GET "https://example.com/api/3.24/sites/a946d998-2ead-4894-bb50-1054a91dcab3/users/6ae4a163-d073-4ab2-9668-954bab4b029e/uploadSavedCreds" --header "Content-Type: application/json" --data " BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= " ``` #### Response Code 200 #### Response Body None. #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The user ID in the URI doesn't correspond to an existing user.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Upload Workbook Encrypted Keychain Uploads the encrypted version of the embedded credentials. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:embedded\_credentials:upload - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/workbooks/workbook-luid/applyKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
workbook-luidThe LUID of the workbook to download the encrypted keychain from.
#### Request Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidMapping": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Request Attributes
associatedUserLuidMapping

(Required) The user IDs from the source site mapped to destination site user IDs.

encryptedKeychainList (Required) List of encrypted keychains from the source Tableau Server.
encryptedKeychain

(Required) Encrypted keychain from the source Tableau Server.

#### cURL Request Example ``` curl --location 'https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/applykeychain' \ -X PUT \ --header 'Content-Type: application/xml' \ --header 'X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86' \ --data ' BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ' ``` #### Response Code 200 #### Response Body None. #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Validate Uploaded Workbook Validates a Tableau workbook (TWB) file that already exists in temporary storage on Tableau Cloud or Tableau Server. The TWB is validated against the TWB XSD schema and verifies that it can be loaded in Tableau. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Any authenticated user. **Access Scope**: `tableau:workbooks:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Use this method to validate a TWB file that's already been stored using the file upload REST API ([Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload) and [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload)). Provide the upload session ID as a query parameter to validate the uploaded file. The validation performs both syntactic validation (verifying the TWB conforms to the TWB XSD schema) and semantic validation (verifying the content can be interpreted by Tableau). For more information about the officially supported TWB XSD schema, see the [tableau-document-schemas](https://github.com/tableau/tableau-document-schemas) repository on GitHub. #### URI POST /api/api-version/sites/site-id/workbooks/validateUploadedWorkbook?uploadSessionId=upload-session-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
upload-session-idThe upload session ID returned from the Initiate File Upload endpoint.
#### Request Header This method can only return a JSON-formatted response. Set the HTTP `Accept` request header appropriately: `Accept: application/json` #### Request Body None #### cURL Example ``` curl --location --request POST 'https://example.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/validateUploadedWorkbook?uploadSessionId=12345:12ab34cd56ef78ab90cd12ef34ab56cd-0:0' --header 'X-Tableau-Auth: aBcDeFgHiJkLmNoPqRsTuV|1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p|12345678-1234-5678-9abc-def012345678' --header 'Accept: application/json' ``` #### Response Code 200 #### Response Body A validation response that returns a 200 response code, zero validation errors, and zero or more validation warnings indicates successful validation. Warnings are advisory, and won't prevent a workbook from loading in Tableau. Details about the validation warnings are returned in the response body as JSON. ``` { "timestamp": "2026-06-10T14:32:18.456Z", "uploadId": "12345:12ab34cd56ef78ab90cd12ef34ab56cd-0:0", "warnings": [ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } ] } ``` #### Errors
HTTP statuserror CodeConditionDetails
400 Missing uploadSessionId parameterThe required uploadSessionId parameter isn't present in the querystring.
404 Resource not foundThe uploadSessionId parameter couldn't be found.
422 Unprocessable entityThe TWB validation task completed, but detected errors. See the response body for detailed validation information.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Validation errors A validation response that returns zero or more validation errors indicates failed validation. Unlike validation warnings, validation errors _will_ prevent a workbook from loading in Tableau. Details about the validation errors and warnings are returned in the response body as JSON. Example response: { "timestamp": "2026-06-10T14:32:18.456Z", "errors": \[ { "severity": "ERROR", "message": "Missing required closing tag for element", "line": 127, "column": 5, "elementName": "preferences" } \], "warnings": \[ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } \] } ## Validate Workbook Validates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Any authenticated user. **Access Scope**: `tableau:workbooks:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This endpoint validates TWB file content without storing it on Tableau Cloud or Tableau Server. The validation performs both syntactic validation (verifying the TWB conforms to the TWB XSD schema) and semantic validation (verifying the content can be interpreted by Tableau). For more information about the officially supported TWB XSD schema, see the [tableau-document-schemas](https://github.com/tableau/tableau-document-schemas) repository on GitHub. #### URI POST /api/api-version/sites/site-id/workbooks/validateWorkbook #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Header This method can only return a JSON-formatted response. Set the HTTP `Accept` request header appropriately: `Accept: application/json` #### Request Body The request body is the TWB, sent as multipart form data. **Note:** The request body can't be a TWBX (packaged workbook). **Option 1: Use a code library or client that can assemble the request** - Most clients and code libraries can automatically create a multipart request that's appropriate for sending the TWB. In such cases, you only need to provide: - the `name` parameter and its value, `tableau_workbook` - the `filename` parameter and its value, the TWB filename - the TWB file **Option 2: Manually assemble the request** - Manually assembling the request has specific requirements: Set a `Content-Type` request header indicating the body is `multipart/form-data` or `multipart/mixed`, and define the `boundary` string. (A boundary string is a unique string that won't occur in the request body outside of its use as a delimiter.) Example: `Content-Type: multipart/form-data; boundary=12ab34cd-56ef-78ab-90cd-12ef34ab56cd` Build the request body - begin with the boundary string defined in the request header, prepended by "--" ; - add an inline `Content-Disposition` header that indicates `form-data` encoding, sets `name` equal to `tableau_workbook`, and sets `filename` equal to a string ending in `.twb`; - conclude with the boundary string defined in the request header, prepended by "--" and appended by "--". Example: (The placeholder `{workbook-xml}`represents the raw TWB XML.) ``` --12ab34cd-56ef-78ab-90cd-12ef34ab56cd Content-Disposition: form-data; name="tableau_workbook"; filename=superstore.twb {workbook-xml} --12ab34cd-56ef-78ab-90cd-12ef34ab56cd-- ``` For more information on sending the TWB using a multipart request, see the concepts covered in the "Uploading the file in parts" section of [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm#uploading-the-file-in-parts), or search the Internet using terms like **multipart** and **HTTP**. #### cURL Example (The placeholder `{path-to-twb}`represents the local path to the TWB file.) ``` curl --location 'https://example.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/validateWorkbook' --header 'X-Tableau-Auth: aBcDeFgHiJkLmNoPqRsTuV|1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p|12345678-1234-5678-9abc-def012345678' --header 'Accept: application/json' --form 'tableau_workbook=@"{path-to-twb}"' ``` #### Response Code 200 #### Response Body A validation response that returns a 200 response code, zero validation errors, and zero or more validation warnings indicates successful validation. Warnings are advisory, and won't prevent a workbook from loading in Tableau. Details about the validation warnings are returned in the response body as JSON. Example response: ``` { "timestamp": "2026-06-10T14:32:18.456Z", "warnings": [ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } ] } ``` #### Errors
HTTP statuserror CodeConditionDetails
400 Missing required parameterThe required tableau_workbook parameter isn't present in the request.
400 Invalid file type or contentThe file is not a valid TWB file or does not contain TWB XML content, or the "filename" parameter doesn't end with ".twb".
406406000No acceptable responseThis method can only return a JSON response. Use the Accept: application/json header.
422 Unprocessable entityThe TWB validation task completed, but detected errors. See the response body for detailed validation information.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Validation errors A validation response that returns zero or more validation errors indicates failed validation. Unlike validation warnings, validation errors _will_ prevent a workbook from loading in Tableau. Details about the validation errors and warnings are returned in the response body as JSON. Example response: { "timestamp": "2026-06-10T14:32:18.456Z", "errors": \[ { "severity": "ERROR", "message": "Missing required closing tag for element", "line": 127, "column": 5, "elementName": "preferences" } \], "warnings": \[ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } \] } ## Validate Workbook and Upload Validates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau. If validation succeeds, this method stores the TWB in a temporary location on Tableau Cloud or Tableau Server for further use. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Any authenticated user. **Access Scope**: `tableau:workbooks:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). The validation performs both syntactic validation (verifying the TWB conforms to the TWB XSD schema) and semantic validation (verifying the content can be interpreted by Tableau). For more information about the officially supported TWB XSD schema, see the [tableau-document-schemas](https://github.com/tableau/tableau-document-schemas) repository on GitHub. #### URI POST /api/api-version/sites/site-id/workbooks/validateWorkbookAndUpload #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Header This method can only return a JSON-formatted response. Set the HTTP `Accept` request header appropriately: `Accept: application/json` #### Request Body The request body is the TWB, sent as multipart form data. **Note:** The request body can't be a TWBX (packaged workbook). **Option 1: Use a code library or client that can assemble the request** - Most clients and code libraries can automatically create a multipart request that's appropriate for sending the TWB. In such cases, you only need to provide: - the `name` parameter and its value, `tableau_workbook` - the `filename` parameter and its value, the TWB filename - the TWB file **Option 2: Manually assemble the request** - Manually assembling the request has specific requirements: Set a `Content-Type` request header indicating the body is `multipart/form-data` or `multipart/mixed`, and define the `boundary` string. (A boundary string is a unique string that won't occur in the request body outside of its use as a delimiter.) Example: `Content-Type: multipart/form-data; boundary=12ab34cd-56ef-78ab-90cd-12ef34ab56cd` Build the request body - begin with the boundary string defined in the request header, prepended by "--" ; - add an inline `Content-Disposition` header that indicates `form-data` encoding, sets `name` equal to `tableau_workbook`, and sets `filename` equal to a string ending in `.twb`; - conclude with the boundary string defined in the request header, prepended by "--" and appended by "--". Example: (The placeholder `{workbook-xml}`represents the raw TWB XML.) ``` --12ab34cd-56ef-78ab-90cd-12ef34ab56cd Content-Disposition: form-data; name="tableau_workbook"; filename=superstore.twb {workbook-xml} --12ab34cd-56ef-78ab-90cd-12ef34ab56cd-- ``` For more information on sending the TWB using a multipart request, see the concepts covered in the "Uploading the file in parts" section of [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm#uploading-the-file-in-parts), or search the Internet using terms like **multipart** and **HTTP**. #### cURL Example (The placeholder `{path-to-twb}`represents the local path to the TWB file.) ``` curl --location 'https://example.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/validateWorkbookAndUpload' --header 'X-Tableau-Auth: aBcDeFgHiJkLmNoPqRsTuV|1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p|12345678-1234-5678-9abc-def012345678' --header 'Accept: application/json' --form 'tableau_workbook=@"{path-to-twb}"' ``` #### Response Code 200 #### Response Body A validation response that returns a 200 response code, zero validation errors, and zero or more validation warnings indicates successful validation. Warnings are advisory, and won't prevent a workbook from loading in Tableau. Details about the validation warnings are returned in the response body as JSON. ``` { "timestamp": "2026-06-10T14:32:18.456Z", "uploadId": "12345:12ab34cd56ef78ab90cd12ef34ab56cd-0:0", "warnings": [ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } ] } ``` #### Errors
HTTP statuserror CodeConditionDetails
400 Missing required parameterThe required tableau_workbook parameter isn't present in the request.
400 Invalid file type or contentThe file is not a valid TWB file or does not contain TWB XML content, or the "filename" parameter doesn't end with ".twb".
406406000No acceptable responseThis method can only return a JSON response. Use the Accept: application/json header.
422 Unprocessable entityThe TWB validation task completed, but detected errors. See the response body for detailed validation information.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Validation errors A validation response that returns zero or more validation errors indicates failed validation. Unlike validation warnings, validation errors _will_ prevent a workbook from loading in Tableau. Details about the validation errors and warnings are returned in the response body as JSON. Example response: { "timestamp": "2026-06-10T14:32:18.456Z", "errors": \[ { "severity": "ERROR", "message": "Missing required closing tag for element", "line": 127, "column": 5, "elementName": "preferences" } \], "warnings": \[ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } \] } ## Other articles in this section [Skip to main content](#main-content) # REST API Requirements The REST API is permanently enabled for Tableau Cloud. It is enabled by default on all supported versions of Tableau Server. While it is possible to disable REST traffic on Server, we strongly recommend that you maintain the enabled setting. Disabling the REST API will disrupt the functionality of a broad range of Tableau features. It will not improve performance or enhance security. Functionality impacted by disabling the REST API includes: - Search - Favorites - Collections - Content Management Tool - Personal Spaces - Tableau Prep (including publishing Flow output) - Tableau Metadata API - Tableau Resource Monitoring Tool If you choose to disable the REST API on your Tableau Server installation, test the functionality you require carefully. To disable or enable the REST API, use the [tsm configuration set](https://help.tableau.com/current/server-linux/en-us/cli_configuration_tsm.htm#TSMSet) command. Change the [api.server.enabled](https://help.tableau.com/current/server-linux/en-us/cli_configuration-set_tsm.htm) setting to false to disable the API: ``` tsm configuration set -k api.server.enabled -v false ``` Note: In Tableau Server 2023.1 and later, the api.server.enabled key is deprecated. This means that you can't disable REST traffic on Server. [Skip to main content](#main-content) # REST API and Resource Versions ## Two Version Types **Classic REST endpoints:** The more than 150 REST endpoints that let you programmatically take many of the actions available in the user interface of Tableau Cloud, on-premise Tableau Server, Tableau Prep and more. This powerful set of APIs started life in Tableau Server 2.5 and has been evolving organically as our products grow and mature. The existing REST APIs are in heavy usage throughout the Tableau community and will continue to be maintained and grow. Endpoints of the classic Tableau REST API have request URIs that begin with **`{server}/api/{api-version-number}/site/{site-luid}`**. The API version defines a set of resource versions that ship with a given release of Tableau Server (such as 2019.4). Versions of the REST API are identified using major and minor version numbers in the format `.`, as in `3.6`. For more information, see [REST API Versioning](#rest_api_versioning). **Per resource versioned RESTful endpoints:** Alongside the classic APIs, starting with Tableau Server 2020.2 we will be releasing a growing body of a new kind of endpoint. Because the new APIs are based a modern standard and designed for the mature Tableau environment, our teams will be able to produce more consistent endpoints at a faster pace. The new endpoints will call the same code that clicking the corresponding UI element calls, not always the case for classic APIs. URIs for this new generation of endpoints begin with **`{server}/api/-`**, where the version number is replaced with a hyphen. These resources are versioned independently of the REST API version number. For more information, see [Per Resource Versioning](#per_resource_versioning). **Site LUID in the URI path**: Note that in both cases, the site containing the resources addressed for a Tableau REST session is specified in the `contentUrl` value of the sign in request for a REST API session. The site LUID is returned in a sign in the `credentials token` element of the response. For classic endpoints, that LUID must be included in the URI path. For per resource requests, the site LUID is inferred from the sign in context. ## REST API Versioning When you make a request using the REST API, you include the API version number as part of the request, as in the following example: ``` https://MY-SERVER/api/3.29/auth/signin ``` When a new version of the REST API becomes available, if you try to call a method that was introduced in the new version but the URI includes a previous version, the method call will fail. In the [API reference documentation](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm), each method includes a **Version** section that tells you the version of the REST API in which that method was introduced. ### REST API Update releases Small changes to the REST API might be made during update releases, which are identified using the format _.._. For example, version `2.0.1` is an update release for version 2.0 of the REST API. Update releases might include bug fixes, and might include a new element or attribute in the XML body for a method. When you specify the API version in the URI of a request, do not include the update release value. For example, when you specify the version number in the URI for update release `2.0.1`, use version `2.0` in request URIs. ### REST API Schema versions Although an update release does not change the version of the REST API, an update release can include changes to the XML for requests and responses. If so, these updates are reflected in the [REST API schema](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_schema.htm) (.xsd file). Unlike the version numbers for the REST API as a whole, the version number of the schema file _does_ reflect update releases. If you rely on the schema (for example, if you generate code from it), you should make sure that you have the latest version of the .xsd file. You should also examine the changes in the schema and determine whether they affect you. You can determine the version of the schema file by looking at the `xsi:schemaLocation` attribute in the opening `` tag of the response body. The following example shows what the tag looks like for the 3.29 version of the schema. ``` ``` ### Tableau Cloud/Server versions and REST API versions Versions of the REST API are made available with releases of Tableau Cloud and Server. The following table lists versions of Tableau and of the corresponding REST API and REST API schema versions. | Tableau Cloud/Server version | REST API version | Schema version | | --- | --- | --- | | 2026.3 | 3.30 | 3.30 | | 2026.2 | 3.29 | 3.29 | | 2026.1 | 3.28 | 3.28 | | 2025.3 | 3.27 | 3.27 | | 2025.2 (Tableau Cloud only) | 3.26 | 3.26 | | 2025.1 | 3.25 | 3.25 | | 2024.3 (Tableau Cloud only) | 3.24 | 3.24 | | 2024.2 | 3.23 | 3.23 | | 2024.1 (Tableau Cloud only) | 3.22 | 3.22 | | 2023.3 | 3.21 | 3.21 | | 2023.2 (Tableau Cloud only) | 3.20 | 3.20 | | 2023.1 | 3.19 | 3.19 | | 2022.4 (Tableau Cloud only) | 3.18 | 3.18 | | 2022.3 | 3.17 | 3.17 | | 2022.2 (Tableau Cloud only) | 3.16 | 3.16 | | 2022.1 | 3.15 | 3.15 | | 2021.4 | 3.14 | 3.14 | | 2021.3 | 3.13 | 3.13 | | 2021.2 | 3.12 | 3.12 | | 2021.1 | 3.11 | 3.11 | | 2020.4 | 3.10 | 3.10 | | 2020.3 | 3.9 | 3.9 | | 2020.2 | 3.8 | 3.8 | | 2020.1 | 3.7 | 3.7 | | 2019.4 | 3.6 | 3.6 | | 2019.3 | 3.5 | 3.5 | | 2019.2 | 3.4 | 3.4 | | 2019.1 | 3.3 | 3.3 | | 2018.3 | 3.2 | 3.2 | | 2018.2 | 3.1 | 3.1 | | 2018.1 | 3.0 | 3.0 | | 10.5 | 2.8 | 2.8 | | 10.4 | 2.7 | 2.7 | | 10.3 | 2.6 | 2.6 | | 10.2 | 2.5 | 2.5 | | 10.1 | 2.4 | 2.4 | | 10.0 | 2.3 | 2.3 | | 9.3 | 2.2 | 2.2 | | 9.2 | 2.1 | 2.1 | | 9.1 | 2.0 | 2.0.1 | | 9.0.1 and later versions of 9.0 | 2.0 | 2.0.1 | | 8.3, 9.0 | 2.0 | 2.0 | ## Per Resource Versioning Endpoints with URIs that begin with `/api/-`  are of a new kind, where versions of each resource are independent of the Tableau REST API version. When you make a request using one of these new endpoints, the URI contains only the path to the target resource: {server}api/-/settings/site/extensions/dashboard [Dashboard extensions settings methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm) are an example of the new, per resource version scheme, which is as follows: - **For Tableau Cloud:** Features and fixes will be added to the current version of endpoint as long as they are additive and backward compatible. A request to one of these new resources returns the behavior of its latest version. - **For on-premise Tableau Server:** These new resources will have the version that was latest at the time of the Server version’s release. - **Resource versions:** The version of a resource will only increment when there is a breaking change introduced for the resource. You can request the behavior of the earlier version of a resource by specifying that version in your request. - **Client generation:** For both Tableau Cloud and on-premise Server, you can use the OpenAPI definition of the the API surface for these new endpoints to [generate client integration code](#generate_client_integration_code) in the language of your choice. - **Manual mediatype formation:** Most often we expect users to make calls via a generated client library, but to manually form a request to one of these new endpoints, the request header must include `Content-Type` (if the request type has a body) and `Accept` keys whose values are a mediatype containing the version string of the resource being called. The form of mediatype to use in your header values is as follows: - ``` application/vnd.{resource_string}+json ``` - An example would look something like: - ``` application/vnd.com.tableau.workbooks.v1.Workbook+json. ``` The exception to this rule is that when you omit the `Accept` value or make its value `application/*`. In this case, Tableau response will be the expected behavior of the latest version of the resource. This is provided to facilitate experimentation, and for automation scenarios where the requesting script or program parses and forks behavior based on the version of the response. ## Generate Client Integration Code The OpenAPI spec for these new endpoints on the Tableau Cloud or Server instance you use can be downloaded from `{server}/services/specifications/openapi`. There are many tools available that enable you to generate clients for many languages from an OpenAPI spec. The following commandline example uses [openapi generator](https://openapi-generator.tech/#try) and the [java cli](https://mvnrepository.com/artifact/org.openapitools/openapi-generator-cli/4.2.3) to create a Python client library. ``` java -jar openapi-generator-cli-4.2.3.jar generate -i {OpenAPI spec location} -o {output dir} --generator-name python --additional-properties=packageName=rest_client_python,projectName=rest_client_python ``` [Skip to main content](#main-content) # REST API Example Requests This topic illustrates the structure of REST API requests by showing the raw HTTP, including both headers and the body (as appropriate). ## How to read the examples In this topic, the first line of each example shows the verb (GET, POST, etc.) and the portion of the URI that describes the resource and the REST API version number. For example, for signing in the example URI shows this: POST /api/2.2/auth/signin HTTP/1.1 This indicates that you should make a POST request, using version 2.2 of the REST API, and that the URI should be something like the following: ``` http://my-server/api/2.2/auth/signin ``` where _my-server_ is the name or IP address of the computer where Tableau Server is installed. The lines that follow the verb and endpoint show the headers that you must include. If the examples shows a POST or PUT request, there's a blank line, followed by the XML information that's included in the body. ## Sign in The first REST API request in a session must be a sign-in request. This is a POST request that sends the user credentials in the body of the request. Because this is a POST request, the request must include the `Content-Type` header. You can send your the body of the request block as XML or JSON. For example, the following shows how you send an XML request block. POST /api/2.2/auth/signin HTTP/1.1 HOST: my-server Content-Type:text/xml You can also send the request using JSON by setting the `Content-Type` to `application/json`. You can receive the response in JSON or XML by setting the `Accept` header to `application/json` or `application/xml`. POST /api/2.2/auth/signin HTTP/1.1 HOST: my-server Content-Type:application/json Accept:application/json { "credentials": { "name": "administrator", "password": "passw0rd", "site": { "contentUrl": "" } } } ## Get a list of resources To get a list of resources like users, you send a GET request. The request must include an `X-Tableau-Auth` header with the authentication token that was returned in the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) call. There is no request body. The following examples shows a request that gets a list of users. GET /api/2.2/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/users HTTP/1.1 HOST: my-server X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd ## Create a new resource To create a new resource, such as a new user, you send a POST request. The request must include: - An `X-Tableau-Auth` header with the authentication token that was returned in the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) call - A `Content-Type` header set to `text/xml` or `application/xml` if you are sending an XML block, or set to `application/json` for a JSON request block. - A request body with an XML or a JSON block that includes the information for the new resource. The XML and JSON block is defined by an [XML schema](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_schema.htm). The information in the request block depends on what type of resource you're creating. The following example shows a request that creates a new user in an XML request. The response returns the ID of the resource you created. POST /api/2.2/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users HTTP/1.1 HOST: my-server X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd Content-Type: text/xml This example shows the same request in JSON. POST /api/2.2/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users HTTP/1.1 HOST: my-server X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd Content-Type: application/json { "user": { "name": "NewUser1", "siteRole": "Publisher" } } ## Update a resource To update an existing resource, you send a PUT request and include the ID of the resource that was returned in POST request. The request must include: - An `X-Tableau-Auth` header with the authentication token that was returned in the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) call. - A `Content-Type` header set to `text/xml`. - A request body with an XML or JSON block that includes the changes for the existing resource. The XML or JSON block is defined by an [XML schema](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_schema.htm). The information in the request block depends on the type of resource that you're updating. The following example shows a request that updates an existing user. The URI includes the ID of the user that was returned from the POST request. PUT /api/2.2/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d HTTP/1.1 HOST: my-server X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd Content-Type: text/xml This example shows the same request in JSON. PUT /api/2.2/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d HTTP/1.1 HOST: my-server X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd Content-Type: application/json { "user": { "fullName": "NewUser2", "siteRole": "ViewerWithPublish" } } ## Delete a resource To remove resource, you send a DELETE request. The request must include an `X-Tableau-Auth` header with the authentication token that was returned in the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) call. There is no request body. The following example shows a request that deletes an existing user. DELETE /api/2.2/sites/d0356794-bb9d-4c5c-b43d-ec384a2baf5a/users/2798bf2f-964d-4cf6-994a-0744c4555f84 HTTP/1.1 HOST: my-server X-Tableau-Auth: 12ab34cd56ef78ab90cd12ef34ab56cd ## Publish a resource To publish a resource such as a data source or a workbook, you have two options. You can publish the resource using a single call. In that case, you create a POST request with the content type of `multipart/mixed`, and you include the resource in the body of the request. Another option is to publish the resource in pieces. For that scenario, you initiate a file upload as a POST request, and then send a series of POST requests that each append another piece of the resource. When the resource has been completely uploaded, you make a final POST request to finish the upload. For details about how to publish, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). [Skip to main content](#main-content) # Revisions Methods Using the revisions methods of the Tableau Server REST API you can: - Get a list of all revisions of a workbook or data source - Download or delete a specific workbook or data source revision with or without its extract This functionality relates to the UI elements and concepts described at: [Allow Users to Save Revision History](https://help.tableau.com/current/server/en-us/revision_history_maintain.htm). ## 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: Revisions](https://www.postman.com/salesforce-developers/salesforce-developers/folder/guu9wfr/revisions) ## Download Data Source Revision Downloads a specific version of a data source prior to the current one in `.tdsx` format. To down load the current version of a data source use the [Download Data Source](#download_data_source) method. **Note:** This method is available only if version history is enabled for the specified site. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/revisions/revision-number/content #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source.
datasource-idThe ID of the data source to download.
revision-numberThe revision number of the data source to download. To determine what versions are available, call Get Data Source Revisions.
#### Request Body None #### Permissions Tableau Server users who are site administrators can download data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 The data source content in `.tdsx` format (`Content-Type: application/octet-stream`). The response will have the following content disposition header: `Content-Disposition: name="tableau_datasource"; filename="datasource-filename"` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403028Read forbiddenA non-administrator user attempted to download a data source, but the caller doesn't have required permissions.
403403053Version history not enabledversion history is not enabled for the specified site.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404024Data source revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Workbook Revision Downloads a specific version of a workbook in `.twb` or `.twbx` format. **Note:** This method is available only if version history is enabled for the specified site. For more information, see **Security note:** Content in .twb or .twbx files downloaded using this method is stored in plain text. All data, including filter values that may give semantic clues to the data, will be readable by anyone who opens the files. [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions/revision-number/content GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions/revision-number/content?includeExtract=extract-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to download.
revision-numberThe revision number of the workbook to download. To determine what versions are available, call Get Workbook Revisions. Note that the current revision of a workbook cannot be accessed by this call; use Download Workbook instead.
extract-value(Optional) The extract-value is a Boolean value (False or True). When the workbook specified for download has an extract, if you add the parameter ?includeExtract=False, the extract is not included when you download the workbook. You can use this option to improve performance if you are downloading workbooks or data sources that have large extracts.
#### Request Body None #### Permissions Users who are site administrators can download workbook revisions on the site that they are administrators for. Users who are not server administrators or site administrators can download workbook revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified workbook. - Save (write) permissions for the project that contains the workbook. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:workbooks:download ``` 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 One of the following, depending on the format of the workbook: - The workbook's content in `.twb` format (`Content-Type: application/xml`) - The workbook's content in `.twbx` format (`Content-Type: application/octet-stream`) In both cases, the response will have the following content disposition header: `Content-Disposition: name="tableau_workbook"; filename="workbook-filename"` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403053Version history not enabledversion history is not enabled for the specified site.
403403019Read forbiddenA non-administrator user attempted to download a workbook, but the caller doesn't have required permissions.
404404024Workbook revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Data Source Revisions Returns a list of revision information (history) for the specified data source. **Note:** This method is available only if version history is enabled for the specified site. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. To get a specific version of the data source from revision history, use the [Download Data Source Revision](#download_data_source_revision) method. #### URI GET /api/api-version/sites/site-id/datasources/datasource-id/revisions GET /api/api-version/sites/site-id/datasources/datasource-id/revisions?pageSize\=page-size&pageNumber\=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the data source to get revisions for.
datasource-idThe ID of the data source to get revisions for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions Tableau Server users who are site administrators can get data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ``` If the revision element includes the attribute `deleted="true"`, the data source has been deleted and cannot be downloaded using the [Download Data Source Revision](#download_data_source_revision) method. If a user has been deleted from the site, no `` element is included in the `` element. #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400006 Invalid page number The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400 400007 Invalid page size The page size parameter is not an integer, or is less than one.
403 403014 Page size limit exceeded The specified page size is larger than the maximum page size.
403 403053 Version history not enabled version history is not enabled for the specified site.
403 403054 A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 Data source not found The data source ID in the URI doesn't correspond to an existing data source.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Workbook Revisions Returns a list of revision information (history) for the specified workbook. **Note:** This method is available only if version history is enabled for the specified site. To get a specific version of the workbook from revision history, use the [Download Workbook Revision](#download_workbook_revision) method. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions?pageSize\=page-size&pageNumber\=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook to get revisions for.
workbook-idThe ID of the workbook to get revisions for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions Tableau Server users who are site administrators can get workbook revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get workbook revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified workbook. - Save (write) permissions for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ``` If the revision element includes the attribute `isDeleted="true"`, the workbook has been deleted and cannot be downloaded using the [Download Workbook Revision](#download_workbook_revision) method. If a user has been deleted from the site, no `` element is included in the `` element. #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400006 Invalid page number The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400 400007 Invalid page size The page size parameter is not an integer, or is less than one.
403 403014 Page size limit exceeded The specified page size is larger than the maximum page size.
403 403053 Version history not enabled version history is not enabled for the specified site.
403 403056 A non-administrator user attempted to get workbook revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in the URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove Data Source Revision Removes a specific version of a data source from the specified site. The content is removed, and the specified revision can no longer be downloaded using [Download Data Source Revision](#download_data_source_revision). If you call [Get Data Source Revisions](#get_data_source_revisions), the revision that's been removed is listed with the attribute `IsDeleted="true"`. **Note:** Calling this method permanently removes the specified data source revision. #### URI DELETE /api/api-version/sites/site-id/datasources/datasource-id/revisions/revision-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
datasource-idThe ID of the data source to remove the revision for.
revision-numberThe revision number of the data source to remove. To determine what versions are available, call Get Data Source Revisions.
#### Request Body None #### Permissions Tableau Server users who are site administrators can remove data source revisions on the site that they are administrators for. Users who are not server administrators or site administrators can remove data source revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified data source. - Save (write) permissions for the project that contains the data source. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:datasources: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 #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user attempted to remove a data source revision, but the caller doesn't have required permissions.
403403053Version history not enabledversion history is not enabled for the specified site.
403403055Cannot delete head revisionThe head (first) version cannot be deleted. To remove the data source, call Delete Data Source.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
404404024Data source revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove Workbook Revision Removes a specific version of a workbook from the specified site. The content is removed, and the specified revision can no longer be downloaded using [Download Workbook Revision](#download_workbook_revision). If you call [Get Workbook Revisions](#get_workbook_revisions), the revision that's been removed is listed with the attribute `IsDeleted="true"`. **Note:** Calling this method permanently removes the specified workbook revision. #### URI DELETE /api/api-version/sites/site-id/workbooks/workbook-id/revisions/revision-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
workbook-idThe ID of the workbook to remove the revision for.
revision-numberThe revision number of the workbook to remove. To determine what versions are available, call Get Workbook Revisions.
#### Request Body None #### Permissions Tableau Server users who are site administrators can remove workbook revisions on the site that they are administrators for. Users who are not server administrators or site administrators can remove workbook revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified workbook. - Save (write) permissions for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbooks: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Deletion forbiddenA non-administrator user attempted to remove a data source revision, but the caller doesn't have required permissions.
403403053Version history not enabledversion history is not enabled for the specified site.
403403055Cannot delete head revisionThe head (first) version cannot be deleted. To remove the workbook, call Delete Workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404024Workbook revision not foundThe revision number in the URI doesn't correspond to an existing workbook revision.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # REST API Samples To help you use the REST API, Tableau provides samples written in Python and in Java. Get the latest samples [on Github](https://github.com/tableau/rest-api-samples). [Skip to main content](#main-content) # Server Methods Using the server method of the Tableau Server REST API you can: - Get the current version of Tableau Server and REST API. - Get the details of the current Tableau Server session. - Delete a specified server session. - List the Active Directory domains in use by a server. - Change the domain name and nickname of a specified Active Directory domain in use by a server. ## 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: Server](https://www.postman.com/salesforce-developers/salesforce-developers/folder/2y3eww5/server) ## Delete Server Session Deletes a specified session. This method is not available for Tableau Cloud and is typically used in programmatic management of the life cycles of embedded Tableau sessions. #### URI DELETE api/_api-version_/sessions/_session-id_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
session-id

The unique ID of the session to be deleted. A session's ID and other metadata can be queried from the Tableau Server Postgres repository.

Reading the Postgres repository excessively can impact performance and that writing directly to the repository is not supported in any form. For more information, see Collect Data with the Tableau Server Repository and Tableau Server Postgres Data Dictionary.

#### 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:sessions: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 #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400105Session delete errorAn unknown error occurred and the session could not be deleted.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404000Resource not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe requested asset could not be found.
## Get Current Server Session Returns details of the current session of Tableau Server. #### URI GET /api/api-version/sessions/current #### Parameter Values
api-version

The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.

#### Request Body None #### Permissions This method can be called by all authenticated users. #### Response Code 200 #### Response Body ```
``` The response for users without administrator permissions contains only the site user, id, name, and content-url attributes. #### Version Version 3.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example Response ```
``` ## List Server Active Directory Domains Returns the details of the Active Directory domains that are in use on the server, including their full domain names, nicknames and IDs. If the server is configured to use local authentication, the command returns only the domain name `local`. #### URI GET /api/api-version/domains/ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### 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:domains: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 ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/domains" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response body:** ``` < . . . more domains . . . /> ``` ## Server Info Returns the version of Tableau Server and the supported version of the REST API. #### URI GET /api/api-version/serverinfo #### Parameter Values
api-version

The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.

#### Request Body None #### Permissions This method can be called by all users and does not require authentication. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:server: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 ``` product-version api-version ``` The response contains the following information: - build-number. The build number of your installation of Tableau Server. - product-version. The product version of your installation of Tableau Server. - api-version. The REST API version that is compatible with your version of Tableau Server. #### Version Version 2.4 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Server Active Directory Domain Changes the nickname or full domain name of an Active Directory domain on the server. This method is not available on Tableau Cloud. A domain nickname, also called short name, is the Windows NetBIOS domain name. You can modify the nickname for any domain the server is using. In general, you can modify the full domain name for any domain except the one that you used to sign in. However, if the user name that you are currently signed in with exists in both the current domain and the new domain, you can modify the full name for the current domain. For information about how to enable access for users from multiple domains, see [Support for multiple domains](https://help.tableau.com/current/server/en-us/users_manage_ad.htm#support-for-multiple-domains). If the domain is `local`, it's names cannot be changed. #### URI PUT /api/api-version/domains/domain-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
domain-idThe integer ID of the of the Active Directory domain being updated. Find a domain's ID using List Server Active Directory Domains.
#### Request Body ``` ``` #### Attribute Values Any combination of attributes is valid. If no attributes or nested elements are included, no update is made.
new-domain-nameA new full domain name you are using to replace the existing one.
new-domain-nicknameA new domain nickname you are using to replace the existing one.
#### 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:domains: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 **Example response:** ``` ``` #### Version Version 3.11 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized accessNo authorization credentials were provided.
401401002Unauthorized accessInvalid authorization credentials were provided.
404404032Resource not foundThe requested domain ID in the URI doesn't correspond to an existing domain.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example For an Active Directory with the ID of `1045`, name of `myOldDomainName`, and a nickname of `myOldDomainNickname`: `curl "http://MY-SERVER/api/3.29/domains/f34ab56cd12ab34cd56ef78ab90cd12ef" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-domain.xml` **Content of update-domain.xml:** ``` ``` **Example response body:** ``` ``` [Skip to main content](#main-content) # Site Methods Using the site methods of the Tableau Server REST API you can: - List sites on a server or get details of a specific site - Create, update, or delete a site - List views in a site - List authentication configurations on a site (Tableau Cloud only) This functionality relates to the UI elements and concepts described at: [Sites Overview](https://help.tableau.com/current/server-linux/en-us/sites_intro.htm). ## 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: Sites](https://www.postman.com/salesforce-developers/salesforce-developers/folder/fon10lz/sites) ## Create Site Creates a site on Tableau Server. To make changes to an existing site, call [Update Site](#update_site). This method isn’t available for Tableau Cloud. For more information, see [Work with Sites](https://help.tableau.com/current/server/en-us/help.htm#sites_intro.htm) and [Add or Edit Sites](https://help.tableau.com/current/server/en-us/help.htm#sites_add.htm) in the Tableau Server documentation. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/sites #### Request Body ``` ``` #### Attribute Values
site-name The name of the site.
content-url The subdomain name of the site's URL. This value can contain only characters that are upper or lower case alphabetic characters, numbers, hyphens (-), or underscores (_). If you provide unsupported special characters, Tableau creates the site content URL by omitting those characters from the string. For example, if you provide the site URL as "test.site", Tableau converts it to "testsite" and returns this new URL in the response.
admin-mode

(Optional) Specify ContentAndUsers to allow site administrators to use the server interface and tabcmd commands to add and remove users. (Specifying this option doesn’t give site administrators permissions to manage users using the REST API.) Specify ContentOnly to prevent site administrators from adding or removing users. (Server administrators can always add or remove users.)

Note: You can’t set adminMode to ContentOnly and also set userQuota. The default value is ContentAndUsers.

storage-quota (Optional) The maximum amount of space for the new site, in megabytes. If you set a quota and the site exceeds it, publishers will be prevented from uploading new content until the site is under the limit again.
disable-subscriptions

(Optional) Specify true to prevent users from being able to subscribe to workbooks on the specified site. The default is false.

editing-flows-enabled-flag

(Optional) Specify true to enable and false to disable editing flows for a site. For more information on flows, see Enable and Configure Tableau Prep Conductor.

The default is set to true, which means editing flows is enabled by default. For more information, see Implication of disabling Tableau Prep Conductor.

scheduling-flows-enabled-flag

(Optional) Specify true to enable and false to disable scheduling flows for a site. For more information on flows, see Enable and Configure Tableau Prep Conductor.

The default is set to true which means scheduling flows is enabled by default. For more information, see Implication of disabling Tableau Prep Conductor.

flows-enabled-flag

The flowsEnabled attribute is deprecated as of API version 3.10.

allow-subscription-attachments-flag

(Optional) If true, and subscription to attachments is enabled on the server, then users can create subscriptions that send an email with images of a workbook or view in a PDF attachment. The default value is true. If subscription to attachments is disabled in the server settings, then making this value true will have no effect. Default is true.

guest-access-enabled-flag

(Optional) Specify true to enable and false to disable the ability for guests, users without specific site access permission, to access the site. Default is false.

cache-warmup-enabled-flag

This attribute is removed in API 3.19 and later (Tableau Cloud September 2021). For current methods to improve Tableau performance see, View Acceleration.

(Optional) Set this value to true to enable cache warm up to improve workbook load time. Set the value to false to disable cache warmup. Default is true.

commenting-enabled-flag

(Optional) Specify true to enable and false to disable the ability for user comments on views in the site. Default is true.

revision-history-enabled (Optional) true if the site maintains revisions for changes to workbooks and data sources; otherwise, false. The default is false.
num-revision-limit (Optional) An integer between 2 and 10000 to indicate a limited number of revisions for content.

Setting this value to -1 removes any value that was set previously, and effectively removes any limit to the number of revisions that are maintained.

subscribe-others-enabled-flag

(Optional) Specify true to enable and false to disable the ability for view owners to subscribe other users to a view. Default is true.

extractEncryptionMode

(Optional) Specify enforced, enabled, or disabled. Default is disabled. For more information, see Extract and Encryption Methods.

requestAccessEnabled (Optional) Specify true to allow users send access request emails to content or project owners. Specify false if you don’t want users to be able to request access. The default is false.
runNowEnabled

(Optional) Specify true to allow users to run flows, extract refreshes, and schedules manually. Specify false if you don’t want users to be able to run flows, extract refreshes, and subscriptions manually. The default is true. If this attribute is set to false, the following methods will fail and will return an error message.

Run Flow Now

Run Flow Task

Update Data Source Now

Run Extract Refresh Task

Licensing attributes

For user-based license types, the maximum number of users is set by the licenses activated on that server. For core-based licensing, there’s no limit to the number of users; if you specify a maximum value, only licensed users are counted, and server administrators are excluded.

The REST API enables administrators to set licensing limits below the purchased maximum with two types of license-related attributes:
- User Quota - The total maximum number of licenses currently configured for a site.
- Tiered Capacities - If set, the configured maximum license count for each license type (role).

Online administrators can get these attributes. An on-premises server administrator can both get and set them but if license maximums are set using one attribute kind then the value(s) of the other kind must be null. Setting values for both kinds of attributes will result in an error.

For more information, see Licensing Overview.

User quota

all-license-limit-total

(Optional) The maximum total number of users with Creator, Explorer, or Viewer licenses currently allowed on a site.

On-premises server administrators can set userQuota with the following rules: The number can't exceed the number of licenses activated for the site; and if tiered capacity attributes are set, then userQuota will equal the sum of the tiered capacity values, and attempting to set userQuota will cause an error.

An administrator can revert the license limit to number of activated licenses on the site, or shift control of license limits to tiered capacities values, by omitting userQuota from a Create Site or Update Site request, or making its value -1.

Tiered capacity attributes

creator-license-limit
explorer-license-limit
viewer-license-limit

(Optional) The maximum number of licenses for users with the Creator, Explorer, or Viewer role, respectively, allowed on a site.

On-premises server administrators can set tiered capacity attributes with the following rules: the number can't exceed the number of licenses of a given type that are activated for the site; a value must be supplied for every tiered capacity license type every time any one or more of them is set.

A value of -1 removes the administrator-applied limit for a license type, and reverts the limit to the number of activated licenses configured for the role. Setting the value of a tiered capacity to -1 will not automatically increase the limit if more licenses are purchased and activated for the role in the future.

To use role-specific license limits, the userQuota must be set to null by omitting the attribute from Create Site or Update Site request, or setting its value to -1. Attempting to set values for both tiered capacities and userQuota will result in an error.

data-alerts-enabled-flag

(Optional, boolean) If true, data alerts are enabled on the site. Default value is true.

commenting-mentions-enabled-flag

(Optional, boolean) If true, mentions for commenting are enabled. Default value is true.

catalog-obfuscation-enabled-flag

(Optional, boolean) If true, catalog obfuscation is enabled on the site. Default value is true.

flow-auto-save-enabled-flag

(Optional, boolean) If true, flow auto save is enabled on the site. Default value is true.

run-now-enabled-flag

(Optional, boolean) If true, run now for schedules is enabled which allows non-administrators to run schedules manually. Default value is true.

metrics-content-type-enabled-flag

(Optional, boolean) If true, the metrics content type is enabled on the server. Default value is true.

notify-site-admins-on-throttle-flag

(Optional, boolean) If true, site admins will be notified if their background jobs are being throttled. Default value is false.

authoring-enabled-flag

(Optional, boolean) If true, web authoring is enabled. Default value is true.

custom-subscription-email-enabled-flag

(Optional, boolean) If true, sending custom subscription email is enabled. If set to false after being set true, the current custom subscription email is voided. Default value is false.

custom-subscription-email

A valid custom email that will be sent if customSubscriptionEmailEnabled is set to true. Default value is false.

custom-subscription-footer-enabled-flag

(Optional, boolean) If true, a custom footer will be included on subscription and data alert emails. If set to false after being set true, the current custom subscription footer is voided. Default value is false.

custom-subscription-footer

A custom subscription footer that will be added to subscription and data alerts if customSubscriptionFooterEnabled is set to true. Default value is false.

ask-data-mode

The mode of the ask data feature on the site. Can be set to one of two values:
  • DisabledByDefault - Enables creation of Ask Data lenses for all published data sources. Data sources do not have lenses created automatically.
  • DisabledAlways - Disables Ask Data lenses and related content throughout the site. Preserves information about lenses and data source indexes, which are restored if Ask Data is re-enabled.
Default value is DisabledByDefault. For more information, see Disable or Enable Ask Data for a Site.

named-sharing-enabled-flag

(Optional, boolean) If true, named sharing is enabled. Default value is true.

cataloging-enabled-flag

(Optional, boolean) If true, data catalog is enabled for the site. Default value is true.

derived-permissions-enabled-flag

(Optional, boolean) If true, derived permissions are enabled for the site. Default value is false.

user-visibility-mode

(Optional, string) When the value is FULL users can see the user of other site users. If the value is LIMITED User information on the site is not visible to other users. Default value is FULL. For more information, see User Visibility.
use-default-time-zone Optional, boolean) Set this to true, if you want the time-zone attribute use the Server time Zone at run time. This attribute is set to the official IANA name.  If this is set to false, the time-zone value must be specified.
time-zone (Optional, string) Use this attribute to specify a time zone other than the Server time zone at run time. Only canonical names in the official IANA database are supported. You can find the list of the canonical time zone names on Wikipedia.
autoSuspendRefreshEnabled (Optional) Tableau can automatically suspend extract refresh tasks for inactive workbooks to save resources. Specify true to enable or false to disable. Default is true.
autoSuspendRefreshInactivityWindow (Optional) An integer from 7 through 100 to indicate the number of days to wait before automatically suspending extract refresh tasks for inactive workbooks. The default is 30.
explainDataEnabled

(Optional, boolean) Set this attribute to false to disable Explain Data capabilities for a site. By default, this attribute is set to true. For more information about this site setting, see one of the following topics:

dqwSubscriptionsEnabled

(Optional, boolean) Set this attribute to false to exclude data quality warnings (DQWs) from subscription emails. By default, this attribute is set to true. For more information about this site setting, see one of the following topics:

groupAssertionsEnabled (Optional, boolean) Set to true to allow assertions into group membership using session info. Set to false if you do not want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for the entire site, including the following settings:
  • groupAssertionsSAMLEnabled
  • groupAssertionsOIDCEnabled
  • groupAssertionsConnectedAppsEnabled
groupAssertionsSAMLEnabled (Optional, boolean) Set to true to allow assertions into group membership using SAML session info. Set to false if you don’t want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for SAML sessions.
groupAssertionsOIDCEnabled

(Optional, boolean) Set to true to allow assertions into group membership using OIDC session info. Set to false if you don’t want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for OIDC sessions.

Note: This parameter only applies to Tableau Cloud.

groupAssertionsConnectedAppsEnabled (Optional, boolean) Set to true to allow assertions into group membership using Connected App JWT tokens. Set to false if you don’t want users to be able to be asserted in to groups via connected apps. The default is false. If this attribute is set to false, it will disable group assertions for JWT connected app connections.
groupSetsEnabled (Optional, boolean) Set to true to allow groups sets. Set to false if you don’t want group sets support for the site. The default is false. If this attribute is set to false, it will disable group sets for the site.
recycleBinEnabled (Optional, boolean) Set to true to enable the Recycle Bin. Set to false to disable it. The default is true.
#### Permissions This method can only be called by server administrators. #### Required scope for JWT authorization Introduced in Tableau Server 2022.3 (API 3.17). ``` tableau:sites: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 ``` ``` Response Body Details: - userQuota, storageQuota, and tiered capacity (tierCreatorCapacity, tierExplorerCapacity, tierViewerCapacity) attributes are only present in the response body if those quotas have been set for the site being queried. #### Response Headers Location: /api/3.29/sites/new-site-id #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing, incomplete, or contains malformed XML.
400 400000 Invalid storage quota The storage quota value wasn’t a positive number.
400 400000 Invalid user quota The user quota value wasn’t a positive number.
400 400013 Invalid administrator mode The user provided an administrator mode that isn’t ContentOnly or ContentAndUsers.

Note: An empty string or all whitespace is invalid.

405 405000 Invalid request method Request type was not POST.
409 409001 Site name conflict The site name in the request already belongs to an existing site.
409 409002 Site URL conflict The content URI in the request already belongs to an existing site.
409 409004 User quota and tiered capacity conflict The request cannot set both tiered capacity attributes and userQuota. One or the other must be null.
409 409004 License limit exceeded The request cannot set tiered capacity attributes or userQuota values that are larger than the number of active licenses configured for the site.
409 409004 Administrator mode or user quota conflict The request cannot set adminMode to ContentOnly and also specify a userQuota value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-site.xml` **Content of create-site.xml:** ``` ``` **Response body:** ``` ``` ## Delete Site Deletes the specified site. You can specify the site to delete by using the site ID, the site name, or the content URL. You use the key query string parameter to indicate how you are specifying the site, as shown in the URIs. Beginning in API version 3.18, you can delete a site asynchronously, which allows you to track the site deletion progress. This method is not available for Tableau Cloud. **Note**: You must have previously called the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_in) method and signed in to a site in order to delete the site. When you call this method, you must include the authentication token that you got back when you signed into the site. #### URI **Delete site** DELETE /api/api-version/sites/site-id DELETE /api/api-version/sites/site-name?key=name DELETE /api/api-version/sites/content-url?key=contentUrl **Delete site asynchronously** (beginning in API 3.18) DELETE /api/api-version/sites/async-delete/site-id DELETE /api/api-version/sites/async-delete/site-name?key=name DELETE /api/api-version/sites/async-delete/content-url?key=contentUrl #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site to delete.
site-name The name of the site to delete. If you specify a site name, you must also include the parameter key=name.
content-url

The permanent name of the site to sign in to. The content URL appears in the URL path of Tableau content in your browser address bar after the Tableau Server URL.

mySite is the content URL in the following example:

http://<server or cloud URL>/#/site/mySite/explore

#### 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:sites: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 **Delete site** 204 **Delete site asynchronously** (beginning in API 3.18) 201 #### Response Body **Delete site** None **Delete site asynchronously** (beginning in API 3.18) ``` ``` The `` element returns the following attributes: - job-id is a unique identifier for the job. You can use the value of this attribute to check the status of the delete job by passing it to the [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) method. - mode has the value of `Asynchronous`. - type has the value of `SiteDelete`. - progress is set to `0` when the asynchronous delete job is created, and then changes to `100` when the job is complete. This value indicates percentage of job progress. - createdAt provides a complete date and time that indicates when asynchronous delete was initiated. - finishCode is set to `1` when the asynchronous delete job is created, and then changes to `0` when the job is complete. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403002Deletion not allowed.An attempt was made to delete the default Tableau Server site.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Request Example **Delete site** `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` `curl "http://MY-SERVER/api/3.29/sites/marketing-site?key=contentUrl" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. **Delete site asynchronously** (beginning in API 3.18) `curl "http://MY-SERVER/api/3.29/sites/async-delete/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` `curl "http://MY-SERVER/api/3.29/sites/async-delete/marketing-site?key=contentUrl" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` `curl "http://MY-SERVER/api/3.29/sites/async-delete/marketing-site-name?key=name" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The responses above will return the job ID for a successful delete operation. You can use the value to check the status of the delete job by passing it to the [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) method. ## Get Data Acceleration Report for a Site Returns a report about data acceleration for the site. It lets you compare page load times for before and after data acceleration is enabled. This method is not available for Tableau Cloud. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. #### URI GET /api/api-version/sites/site-id/dataAccelerationReport #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the task.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:data_acceleration_reports: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 ``` ``` #### Attribute Values
sheetURIThe URI of the sheet in the workbook.
unacceleratedSessionCountThe number of sessions that were created to load the workbook sheet before it was accelerated. For example, if you loaded it 7 times in a row, the session is reused so the count will still be 1. Generally, the more data you compare, the better the comparison is. Note: If sheets were loaded but never accelerated, they are not shown.
averageUnAcceleratedPLTThe average page load time for the sheet before it was accelerated.
acceleratedSessionCountThe number of sessions that were created to load the workbook sheet after it was accelerated.
averageAcceleratedPLTThe average page load time for the sheet after it was accelerated.
#### Version In Tableau Server 2020.2 (API 3.8) through 2021.4 (API 3.15) data acceleration is supported. **Important changes for Tableau View Acceleration and Data Acceleration** Tableau's View Acceleration feature and Data Acceleration APIs are retired. These features were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
40540500Invalid requests methodRequest type was not GET
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/dataAccelerationReport" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ... ``` ## Get Embedding Settings for a Site Returns the current embedding settings for a specific site. Embedding settings can be used to restrict embedding Tableau views to only certain domains. This setting impacts all embedding scenarios including, Tableau Javascript API v2, Embedding API v3, and the embed code from the share dialog. For more information, see the [Tableau Site Settings for Embedding](https://help.tableau.com/current/api/embedding_api/en-us/docs/embedding_api_site.html) topic in the Tableau Embedding v3 Help. Beginning in version 2023.2 (June 2023) for Tableau Cloud and in version 2023.3 for Tableau Server, this setting might impact embedding scenarios that use Tableau connected apps. For more information, see the “[Control where content can be embedded](https://help.tableau.com/current/online/en-us/connected_apps_eas.htm#allowlist)” section in the connected apps topic in the Tableau Cloud Help. #### URI GET /api/api-version/sites/site-id/settings/embedding #### Path Parameter Values  
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the views.
#### Request Body None #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:embedding_site_settings: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 #### Permissions Any Tableau Cloud or Tableau Server user can call this method. #### Response Body ``` ``` ##### Example Response ```
``` #### Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/settings/embedding" -X GET -H "X-Tableau-Auth:1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d"` #### Version API version 3.16 and later. #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Recently Viewed for Site Gets the details of the views and workbooks on a site that have been most recently created, updated, or accessed by the signed in user. The 24 most recently viewed items are returned, though it may take some minutes after being viewed for an item to appear in the results. #### URI GET /api/api-version/sites/site-id/content/recent #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the views and workbooks.
#### Request Body None #### Permissions Users who are not server administrators or site administrators, the method returns only the views and workbooks that the user owns or has **Read** permissions for (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` ``` The value of view-url-name is the name of the view in its URL. For example, if a view named `View 1` shows the URL `https://MY_SERVER/#/site/MY_SITE/views/VIEW_1` in your browser address bar, then the the view-url-name would be `VIEW_1`. Modifying the name (display name) of a view will not impact the view-url-name (path element of the view's URL). #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl -X GET "https://qa-windows/api/3.5/sites/cd24a433-b66c-46cd-a4af-6cde73db9ee1/content/recent" -H "X-Tableau-Auth: pI8NzKb-S5-Jqiatds8jrQ|GKUYlgHjuHSPSVfS38plFpH31UkHGtNl"` **Example response:** ``` ``` The response for users without administrative permissions contains only the site id, name, and content-url attributes. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe 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.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ``` curl "http://MY-SERVER/api/3.29/sites?pageSize=1&pageNumber=1" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` **Example response:** ``` ``` ## Query Views for Site Returns all the views for the specified site, optionally including usage statistics. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version**: Available in API 2.2 and later. **License**: No additional license required. **Permissions**: For users who are not server administrators or site administrators, the method returns only the views that the user owns or has Read permissions for (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/views GET /api/api-version/sites/site-id/views?includeUsageStatistics=get-usage-information GET /api/api-version/sites/site-id/views?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/views?includeUsageStatistics=get-usage-information&pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/views?filter=filter-expression GET /api/api-version/sites/site-id/views?sort=sort-expression GET /api/api-version/sites/site-id/views?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 2.2. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the views.
get-usage-information(Optional) true to return usage statistics. The default is false.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) Fields and operators that you can use to filter results. For more information, see Filter expressions.
sort-expression(Optional) Field and direction to sort results. For more information, see Sorting.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the workbooks or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the REST API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand (**`&`**). #### Request Body None #### cURL Request `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views" -X GET -H "X-Tableau-Auth:1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d"` #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "1", "pageSize": "100", "totalAvailable": "2" }, "views": [ { "id": "1f1e1d1c-2b2a-2f2e-3d3c-3b3a4f4e4d4c", "name": "Economic Indicators", "contentUrl": "Finance/sheets/EconomicIndicators", "workbook": { "id": "1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" }, "owner": { "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" } }, { "id": "9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b", "name": "Investing in the Dow", "contentUrl": "Finance/sheets/InvestingintheDow", "workbook": { "id": "59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" }, "owner": { "id": "9f8e7d6c5-b4a3-f2e1-d0c9-b8a7f6e5d4c" } } ] } ``` The element is included in the response only if the method has `includeUsageStatistics=true` in the URI. #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
400400008Invalid parameter valueThe includeUsageStatistics was provided with a value other than true or false.
403403004Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Embedding Settings for Site Updates the embedding settings for a site. Embedding settings can be used to restrict embedding Tableau views to only certain domains. This setting impacts all embedding scenarios including Tableau Javascript API v2, Embedding API v3, and the embed code from the share dialog. For more information, see [Tableau Site Settings for Embedding](https://help.tableau.com/current/api/embedding_api/en-us/docs/embedding_api_site.html) in the Tableau Embedding API v3 Help. Beginning in version 2023.2 (June 2023) for Tableau Cloud and in version 2023.3 for Tableau Server, this setting might impact embedding scenarios that use Tableau connected apps. For more information, see the "Control where content can be embedded" section in the connected apps topics in the [Tableau Cloud Help](https://help.tableau.com/current/online/en-us/connected_apps_eas.htm#allowlist) or [Tableau Server Help](https://help.tableau.com/current/server/en-us/connected_apps_eas.htm#allowlist). #### URI PUT /api/api-version/sites/site-id/settings/embedding #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to update.
#### Request Body ``` ``` **Example request:** ``` ``` #### Request Attribute Values
unrestricted-embedding

(Optional) Specifies whether or not embedding is restricted.

When the setting is set to true, Tableau views on this site can be embedded in any domain.

When set to false, embedding is blocked for all domains, but you can allow embedding in certain domains using the allowList attribute.

allow-list

(Optional) Specifies the domains where Tableau views on this site can be embedded. Use this setting with unrestrictedEmbedding setting to restrict embedding functionality to only certain domains.

Important: We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow.

You can use wildcards in domain names and you can also list multiple domain names separated by spaces.

#### Permissions Any Tableau Cloud or Tableau Server user can call this method. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:embedding_site_settings: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 ``` ``` #### Version Version 3.16 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
403 403500 The user does not have permission

Tableau Cloud: Only site administrators can run this method.

#### Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d/settings/embedding" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-sembedding-settings.xml` **Content of update-embedding-settings.xml:** ``` ``` For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Site Modifies settings for the specified site, including the content URL, administration mode, user quota, state (active or suspended), storage quota, whether flows are enabled, whether subscriptions are enabled, and whether revisions are enabled. **Note:** You must be signed in to a site to update it. #### URI PUT /api/api-version/sites/site-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to update.
#### Request Body **Updating individual settings** ``` ``` **Updating the site logo** To set a new site logo, you pass a multi-part payload to the site. In addition to setting the `X-Tableau-Auth` header to the sign-in token, you must set the `Content-Type` header to `multipart/mixed` and include a boundary string. For example, the header might look like the following example: `Content-Type: multipart/mixed; boundary=az1by2cx34dw` The request body starts with the string you specify as the boundary. This is followed by two headers. You set `Content-Disposition` header to `form-data`, and then a `name` value set to `site_logo` and a `filename` value. You must also include a `Content-Type` header set to `application/octet-stream`. After the headers, you include a blank line then the binary data (not encoded). The binary data is followed by a line that includes the boundary string and the two required termination hyphens (`--`). The following example shows the request body using the boundary string that was specified in the example header earlier. \--az1by2cx34dw Content-Disposition: form-data; name="site\_logo"; filename="new-site-logo.png" Content-Type: application/octet-stream --az1by2cx34dw-- **Restoring the default site logo** To restore the default site logo, you pass a multi-part payload to the site, as you do to set the logo. However, instead of passing binary data for the image, you pass an empty image. And instead of setting the `Content-Type` header in the body to `application/octet-stream`, you set the content type to `text/plain`. The following example shows the request body using the boundary string that was specified in the example header earlier. \--az1by2cx34dw Content-Disposition: form-data; name="site\_logo"; filename="empty.txt" Content-Type: text/plain --az1by2cx34dw-- #### Attribute Values
new-site-name (Optional) The new name of the site.
new-content-url (Optional) The new site URL. This value can contain only characters that are valid in a URL. These characters include letters (A-Z, a-z), digits (0-9), hyphens ("-"), and underscores ("_") If you provide invalid characters, those characters are stripped from the URL and the site is created anyway. For example, if you try to set the site URL as test.site, it's converted to testsite and returned in the response. The response's site URL namespace is the authoritative source of truth for the new site URL.
new-admin-mode (Optional) Specify ContentAndUsers to allow site administrators to use the server interface and tabcmd commands to add and remove users. (Specifying this option doesn't give site administrators permissions to manage users using the REST API.) Specify ContentOnly to prevent site administrators from adding or removing users. (Server administrators can always add or remove users.)

Note: You cannot set adminMode to ContentOnly and also set a userQuota value. The default value is ContentAndUsers.

new-state (Optional) Active to set the site to active mode, or Suspended to suspend the site. Default is Active.
new-storage-quota (Optional) The new maximum amount of space for the new site, in megabytes. If you set a quota and the site exceeds it, publishers will be prevented from uploading new content until the site is under the limit again.
new-disable-subscriptions (Optional) true to prevent users from being able to subscribe to workbooks on the specified site. Default is false.
revision-history-enabled (Optional) true if the site maintains revisions for changes to workbooks and data sources; otherwise, false. The default is false.
revision-limit (Optional) An integer between 2 and 10000 to indicate a limited number of revisions for content.

Setting this value to -1 removes any value that was set previously, and effectively removes any limit to the number of revisions that are maintained.

allow-subscription-attachments-flag

(Optional) If true, and subscription to attachments is enabled on the server, then users can create subscriptions that send an email with images of a workbook or view in a PDF attachment. The default value is true. If subscription to attachments is disabled in the server settings, then making this value true will have no effect. Default is true.

subscribe-others-enabled-flag

(Optional) Specify true to enable and false to disable the ability for view owners to subscribe other users to a view. Default is true.

editing-flows-enabled-flag

(Optional) Specify true to enable and false to disable editing flows for a site. For more information on flows, see Enable and Configure Tableau Prep Conductor.

The default is set to true, which means editing flows is enabled by default. For more information, see Implication of disabling Tableau Prep Conductor.

scheduling-flows-enabled-flag

(Optional) Specify true to enable and false to disable scheduling flows for a site. For more information on flows, see Enable and Configure Tableau Prep Conductor.

The default is set to true, which means scheduling flows is enabled by default. For more information, see Implication of disabling Tableau Prep Conductor.

flows-enabled-flag

The flowsEnabled attribute is deprecated as of API 3.10.

guest-access-enabled-flag

(Optional) Specify true to enable and false to disable the ability for guests, users without specific site access permission, to access the site. Default is false.

cache-warmup-enabled-flag

This attribute was removed in API 3.19 and later. For current methods to improve Tableau performance see, View Acceleration.

(Optional) Set this value to true to enable cache warm up to improve workbook load times. Set the value to false to disable cache warmup. Default is true.

commenting-enabled-flag

(Optional) Specify true to enable and false to disable the ability for user comments on views in the site. Default is true.

extractEncryptionMode

(Optional) Specify enforced, enabled, or disabled. Default is disabled. For more information, see Extract and Encryption Methods.

dataAccelerationMode

(Optional) Specify enable_selective or disabled. The default is enable_selective, which lets you update particular workbooks to turn on data acceleration using the accelerationEnabled attribute. For more information, see Data Acceleration (Retired). Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.

requestAccessEnabled (Optional) Specify true to allow users send access request emails to content or project owners. Specify false if you don't want users to be able to request access. The default is false.
runNowEnabled

(Optional) Specify true to allow users to run flows, extract refreshes, and schedules manually. Specify false if you don't want users to be able to run flows, extract refreshes, and subscriptions manually. The default is true. If this attribute is set to false, the following methods will fail and will return an error message.

Run Flow Now

Run Flow Task

Update Data Source Now

Run Extract Refresh Task

Licensing attributes

For user-based license types, the maximum number of users is set by the licenses activated on that server. For core-based licensing, there's no limit to the number of users; if you specify a maximum value, only licensed users are counted, and server administrators are excluded.

The REST API enables administrators to set licensing limits below the purchased maximum with two types of license-related attributes:
- User Quota - The total maximum number of licenses currently configured for a site.
- Tiered Capacities - If set, the configured maximum license count for each license type (role).

. An on-premises server administrator can both get and set them but if license maximums are set using one attribute kind then the value(s) of the other kind must be null. Setting values for both kinds of attributes will result in an error.

For more information, see Licensing Overview.

User quota

all-license-limit-total

(Optional) The maximum total number of users with Creator, Explorer, or Viewer licenses currently allowed on a site.

On-premises server administrators can set userQuota with the following rules: The number can't exceed the number of licenses activated for the site; and if tiered capacity attributes are set, then userQuota will equal the sum of the tiered capacity values, and attempting to set userQuota will cause an error.

An administrator can revert the license limit to number of activated licenses on the site, or shift control of license limits to tiered capacities values, by omitting userQuota from a Create Site or Update Site request, or making its value -1.

Tiered capacity attributes

creator-license-limit
explorer-license-limit
viewer-license-limit

(Optional) The maximum number of licenses for users with the Creator, Explorer, or Viewer role, respectively, allowed on a site.

On-premises server administrators can set tiered capacity attributes with the following rules: the number can't exceed the number of licenses of a given type that are activated for the site; a value must be supplied for every tiered capacity license type every time any one or more of them is set.

A value of -1 removes the administrator-applied limit for a license type, and reverts the limit to the number of activated licenses configured for the role. Setting the value of a tiered capacity to -1 will not automatically increase the limit if more licenses are purchased and activated for the role in the future.

To use role-specific license limits, the userQuota must be set to null by omitting the attribute from Create Site or Update Site request, or setting its value to -1. Attempting to set values for both tiered capacities and userQuota will result in an error.

data-alerts-enabled-flag

(Optional, boolean) If true, data alerts are enabled on the site. Default value is true.

commenting-mentions-enabled-flag

(Optional, boolean) If true, mentions for commenting are enabled. Default value is true.

catalog-obfuscation-enabled-flag

(Optional, boolean) If true, catalog obfuscation is enabled on the site. Default value is true.

flow-auto-save-enabled-flag

(Optional, boolean) If true, flow auto save is enabled on the site. Default value is true.

run-now-enabled-flag

(Optional, boolean) If true, run now for schedules is enabled which allows non-administrators to run schedules manually. Default value is true.

metrics-content-type-enabled-flag

(Optional, boolean) If true, the metrics content type is enabled on the server. Default value is false.

notify-site-admins-on-throttle-flag

(Optional, boolean) If true, site admins will be notified if their background jobs are being throttled. Default value is false.

authoring-enabled-flag

(Optional, boolean) If true, web authoring is enabled. Default value is false.

custom-subscription-email-enabled-flag

(Optional, boolean) If true, sending custom subscription email is enabled. If set to false after being set true, the current custom subscription email is voided. Default value is false.

custom-subscription-email

A valid custom email that will be sent if customSubscriptionEmailEnabled is set to true. Default value is false.

custom-subscription-footer-enabled-flag

(Optional, boolean) If true, a custom footer will be included on subscription and data alert emails. If set to false after being set true, the current custom subscription footer is voided. Default value is false.

custom-subscription-footer

A custom subscription footer that will be added to subscription and data alerts if customSubscriptionFooterEnabled is set to true. Default value is false.

ask-data-mode

The mode of the ask data feature on the site. Can be set to one of two values:
  • DisabledByDefault - Enables creation of Ask Data lenses for all published data sources. Data sources do not have lenses created automatically.
  • DisabledAlways - Disables Ask Data lenses and related content throughout the site. Preserves information about lenses and data source indexes, which are restored if Ask Data is re-enabled.
Default value is DisabledByDefault. For more information, see Disable or Enable Ask Data for a Site.

named-sharing-enabled-flag

(Optional, boolean) If true, named sharing is enabled. Default value is true.

cataloging-enabled-flag

(Optional, boolean) If true, data catalog is enabled for the site. Default value is true.

derived-permissions-enabled-flag

(Optional, boolean) If true, derived permissions are enabled for the site. Default value is false.

user-visibility-mode

(Optional, string) When the value is FULL users can see the user of other site users. If the value is LIMITED User information on the site is not visible to other users. Default value is FULL. For more information, see User Visibility.
use-default-time-zone (Optional, boolean) Set this to true, if you want the time-zone attribute use the Server time Zone at run time. This attribute is set to official IANA name.  If this is set to false, the time-zone value must be specified.
time-zone (Optional, string) Use this attribute to specify a time zone other than the Server time zone at run time. Only canonical names in the official IANA database are supported. You can find the list of the canonical time zone names on Wikipedia.
autoSuspendRefreshEnabled (Optional) Tableau can automatically suspend extract refresh tasks for inactive workbooks to save resources. Specify true to enable or false to disable. Default is true.
autoSuspendRefreshInactivityWindow (Optional) An integer between 7 and 100 to indicate the number of days to wait before automatically suspending extract refresh tasks for inactive workbooks. The default is 30.
explainDataEnabled

(Optional, boolean) Set this attribute to false to disable Explain Data capabilities for a site. By default, this attribute is set to true. For more information about this site setting, see Disable or Enable Explain Data for a Site in the Tableau Server Help.

dqwSubscriptionsEnabled

(Optional, boolean) Set this attribute to false to exclude data quality warnings (DQWs) from subscription emails. By default, this attribute is set to true. For more information about this site setting, see Disable or Enable Explain Data for a Site in the Tableau Server Help.

attribute-capture-enabled

(Optional, boolean) Set this attribute to true to enable user attribute functions used in embedded content to accept the passing of user attributes from a JSON Web Token (JWT) via Tableau connected apps. The user attributes are passed to Tableau at runtime to control and customize the data that can show for an authorized user. By default, this attribute is set to false. For more information, see Tableau Embedding API v3 Help. This attribute is available starting from API version 3.25.

Starting in October 2025 (API version 3.27), you can also use this attribute to pass user information about your identity provider to Tableau Cloud. During single sign-on (SSO), user attribute functions in Tableau content can accept attributes from OIDC claims or SAML assertions. For more information, see OIDC or SAML topics in the Tableau Cloud Help.

groupAssertionsEnabled (Optional) Set to true to allow assertions into group membership using session info. Set to false if you don't want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for the entire site, including the following settings:
  • groupAssertionsSAMLEnabled
  • groupAssertionsOIDCEnabled
  • groupAssertionsConnectedAppsEnabled
groupAssertionsSAMLEnabled (Optional, boolean) Set to true to allow assertions into group membership using SAML session info. Set to false if you don't want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for SAML sessions.
groupAssertionsOIDCEnabled (Optional, boolean) Set to true to allow assertions into group membership using OIDC session info. Set to false if you don't want users to be able to be asserted in to groups. The default is false. If this attribute is set to false, it will disable group assertions for OIDC sessions.
groupAssertionsConnectedAppsEnabled (Optional, boolean) Set to true to allow assertions into group membership using Connected App JWT tokens. Set to false if you don't want users to be able to be asserted into groups via connected apps. The default is false. If this attribute is set to false, it will disable group assertions for JWT connected app connections.
groupSetsEnabled (Optional, boolean) Set to true to allow groups sets. Set to false if you don't want group sets support for the site. The default is false. If this attribute is set to false, it will disable group sets for the site.
recycleBinEnabled (Optional, boolean) Set to true to enable the Recycle Bin. Set to false to disable it. The default is true.
Any combination of the attributes inside the element is valid. Only the attributes that are included are updated for the site. If no attributes are present, no update occurs. To update only the logo, include an empty element (``) and the logo in the multipart message. Starting in API version 2.3, you can call Update Site to upload a custom logo image for the site. (For information about custom logos, see [Custom the Name or Logo](https://help.tableau.com/current/server/en-us/help.htm#customize_namelogo.htm) in the Tableau Server Help.) To upload a logo image, you include the image in a multipart message; this is similar to how you publish a workbook or data source. You must include the following headers in the request: - `MIME-Version: 1.0` - `Content-Type: multipart/mixed; boundary=boundary-string` - `X-Tableau-auth: authentication-token` The following example shows the request body for an Update Site request that updates the site with a new logo. For this example, the boundary string has been set in the header to `6691a87289ac461bab2c945741f136e6`. The `` element can be empty if you're calling Update Site only to update the logo image. ``` --6691a87289ac461bab2c945741f136e6 Content-Disposition: name="request_payload" Content-Type: text/xml --6691a87289ac461bab2c945741f136e6 Content-Disposition: name="site_logo"; filename="MySiteLogo.png" Content-Type: application/octet-stream logo stream here --6691a87289ac461bab2c945741f136e6-- ``` To clear a custom logo image and revert to using the default logo for the site, call Update Site with a multipart message, but leave the portion of the request body blank where you would normally include the logo stream. For more information about creating multipart messages, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### Permissions Tableau Server: This method can only be called by server administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:sites: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 ``` ``` Response Body Details: - userQuota, storageQuota, and tiered capacity (tierCreatorCapacity, tierExplorerCapacity, tierViewerCapacity) attributes are only present in the response body if those quotas have been set for the site being queried. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400008Invalid revision history limitThe value for the revision history limit isn't an integer.
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400004Invalid administrator modeAn administrator mode parameter was provided in the request with an invalid value. The valid values are ContentOnly and ContentAndUsers.
400400004Invalid stateA state parameter was provided in the request with an invalid value
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type wasn't PUT.
409409001Site name conflictThe new site name in the request already belongs to an existing site.
409409002Site URL conflictThe new content URL in the request already belongs to an existing site.
409409004User quota and tiered capacity conflictThe request can't set both tiered capacity attributes and userQuota. One or the other must be null.
409409004License limit exceededThe request can't set tiered capacity attributes or userQuota values that are larger than the number of active licenses configured for the site.
409409004Administrator mode or user quota conflictThe request can't set adminMode to ContentOnly and also specify a userQuota value.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-site.xml` **Content of update-site.xml:** ``` ``` **Example response:** ``` ``` [Skip to main content](#main-content) # Subscriptions Methods Using the subscriptions methods of the Tableau Server REST API you can do the operations listed in the following category: **Subscriptions** (scheduled e-mails to users of snapshots of a workbook's views) - List all subscriptions configured for a site or get the details of a specific subscription - Create a subscription to a workbook or view for a user and add it to a schedule - Update or delete a subscription for a user - Set or get the format of images delivered by a subscription - Suspend or resume a subscription This functionality relates to the UI elements and concepts described at: [Subscribe to Views](https://help.tableau.com/current/server/en-us/subscribe_user.htm). ## 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: Subscriptions](https://www.postman.com/salesforce-developers/salesforce-developers/folder/9bgg58b/subscriptions) ## Create Subscription Creates a new subscription to a view or workbook for a specific user on Tableau Server and Tableau Cloud. When a user is subscribed to the content, Tableau sends the content to the user in email on the schedule that you define. For more information, see [Subscribe to Views](https://help.tableau.com/current/server/en-us/subscribe_user.htm) in the Tableau Server documentation. Tableau Server and Tableau Cloud each have a different model for schedules and tasks. On Tableau Server, you create a schedule and add a task to it. On Tableau Cloud you create a task and define it's frequency. While the Create Subscription endpoint path and parameters are the same for both Server and Cloud, because the models are different, the request and response bodies are different. - [Tableau Server Request](#create_subscription_server) - [Tableau Cloud Request](#create_subscription_cloud) **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/sites/site-id/subscriptions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to create the subscription in.
#### JWT Access Scope `tableau:tasks:create` _(this scope is included in the scope: `tableau:tasks`)_ This scope can be used to enable this REST method to be called from a unified access token (UAT) or connected app. 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), or [Tableau Cloud connected app scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Tableau Server connected apps scopes](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm). _Available in API 3.20 (Tableau Cloud June 2023) / Tableau Server 2023.3._ ### Tableau Server Request Create a subscription task and add it to a server schedule on Tableau Server. _For Tableau Cloud, see [Tableau Cloud Request](#create_subscription_cloud)._ #### Request Body ``` ``` ``` { "subscription": { "subject": "subscription-subject", "attachImage": "attach-image-flag", "attachPdf": "attach-pdf-flag", "pageOrientation": "page-orientation", "pageSizeOption": "page-size-option", "message": "message", "suspended": "suspended-flag", "content": { "id": "content-id", "type": "content-type", "sendIfViewEmpty": "send-view-if-empty-flag", "customViewId": "custom-view-id" }, "schedule": { "id": "schedule-id" }, "user": { "id": "user-id" } } } ```
subscription-subject A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment. A description is required.
attach-image-flag

(Optional) Setting this true will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default behavior if neither attachImage or attachPdf are specified.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachImage to false will cause an error.

attach-pdf-flag

(Optional) Setting this true will cause the subscriber to receive mail with a .pdf file containing images of workbooks or views attached to it.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachPdf to true will cause an error.

page-orientation (Optional) The orientation of the pages produced when attach-pdf-flag is true. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-size-option (Optional) The type of page produced, which determines the page dimensions when attach-pdf-flag is true. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid. If this parameter is not present the page type will default to Letter.
message The text body of the subscription email message.
suspended-flag (Optional) If true, the subscription is created in a disabled state, meaning it won't run until it's enabled using the Update Subscription method or Resume Subscription in the web UI. The default value is false.
content-type Workbook to create a subscription for a workbook, or View to create a subscription for a view.
send-view-if-empty-flag (Optional) Applies to views only. If true, an image is sent even if the view specified in a subscription is empty. If false, nothing is sent if the view is empty. The default value is true.
custom-view-id (Optional) Applies to views only. The LUID of a custom view to use instead of the default view.
content-id The ID of the workbook or view to subscribe to.
schedule-id The ID of a schedule to associate the subscription with. To determine what schedules are available, call List Server Schedules. The type of the schedule must be Subscription.
user-id The ID of the user to create the subscription for.

Note: The user must have an email address defined in Tableau Server.

#### Permissions The following list summarizes the permissions required to subscribe a user to specific content: - Tableau Server users who are server administrators can subscribe any user to any content. - Site administrators can subscribe any user on the site to any content on that site. - Project leaders can subscribe users to any content that they are project leaders for. - Content owners can subscribe users to any content they own. - Non-owners can subscribe themselves to any content that they have Read (view) permissions for. #### Response Code 201 #### Response Body ``` ``` ``` { "subscription": { "id": "subscription-id", "subject": "subscription-subject", "suspended": "suspended-flag", "pageOrientation": "page-orientation", "pageSizeOption": "page-size-option", "message": "message", "content": { "id": "content-id", "type": "content-type", "sendIfViewEmpty": "send-view-if-empty-flag" }, "schedule": { "id": "schedule-id", "name": "schedule-name" }, "user": { "id": "user-id", "name": "user-name" } } } ``` #### Response Headers ``` Location: /api/3.29/sites/site-id/subscriptions/new-subscription-id ``` #### Version Available in API 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400067Invalid subscription subjectThe subscription subject is null or empty.
400400068Invalid subscription targetThe content type specified in the request body is not a workbook or view.
400400069Invalid subscription typeThe subscription type is not Workbook or View.
400400069Invalid schedule typeThe schedule type is not Subscription.
403403060No permissions to create subscription.The user does not have permission to create a subscription for the specified content.
403403063No user permissions for content.The user specified in the request body does not have Read (view) permissions for the specified content.
403403064No user email address.The user does not have an email address.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
400404006Workbook not foundThe workbook ID in the request body doesn't correspond to an existing workbook.
404404011View not foundThe view ID in the request body doesn't correspond to an existing view.
404404023Schedule not foundThe schedule ID in the request body doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ### Tableau Cloud Request Create a subscription task and define its frequency on Tableau Cloud. _For Tableau Server, see [Tableau Server Request](#create_subscription_server)._ **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:** Administrators and any user with the creator or explorer role can create a custom schedule for a subscription task.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks:create     Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) #### URI POST /api/api-version/sites/site-luid/subscriptions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` ``` ``` { "subscription": { "subject": "finance report", "attachImage": "true", "attachPdf": "true", "pageOrientation": "true", "pageSizeOption": "Folio", "message": "daily finance report", "suspended": "false", "content": { "id": "13237fd-6365-44d5-925b-644e5281b605", "type": "Workbook", "sendIfViewEmpty": "false", "customViewId": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd" }, "user": { "id": "456" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Request Attributes `subject, contentId, and userId` are **required** to create a custom schedule for a subscription, other attributes are optional with defaults. All attributes are optional when updating a custom schedule for a subscription.
subscription subject (Required to create subscription) string: A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment.
subscription attachImage

boolean: Setting this true will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default behavior if neither attachImage or attachPdf are specified. Default is false.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachImage to false will cause an error.

subscription attachPdf

boolean: Setting this true will cause the subscriber to receive mail with a .pdf file containing images of workbooks or views attached to it. Default is false.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachPdf to true will cause an error.

subscription pageOrientation enumeration: The orientation of the pages produced when attach-pdf-flag is true. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
subscription pageSizeOption enumeration: The type of page produced, which determines the page dimensions when attach-pdf-flag is true. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid. If this parameter is not present the page type will default to Letter.
subscription message string: The text body of the subscription email message.
subscription suspended boolean: If true, the subscription is created in a disabled state, meaning it won't run until it's enabled using the Update Subscription method or Resume Subscription in the web UI. The default value is false.
content id (Required to create subscription) LUID: The LUID of the workbook or view the user should be subscribed to.
content type (Required to create subscription) enumeration: Workbook to create a subscription for a workbook, or View to create a subscription for a view.
content sendIfViewEmpty boolean: Applies to views only. If true, an image is sent even if the view specified in a subscription is empty. If false, nothing is sent if the view is empty. The default value is true.
content customViewID

string: Applies to views only. The LUID of a custom view to use instead of the default view.

userId (Required to create subscription) LUID: The LUID of the user to create the subscription for.

Note: The user must have an email address defined in Tableau Server.

schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### cURL Request Example `curl -X POST "https://prod-ca-a.online.tableau.com/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/subscriptions" -H "Content-Type: application/xml" --data " "` #### Response Code 200 #### Response Body ``` ``` ``` { "subscription": { "id": "789", "subject": "finance report", "attachImage": "true", "attachPdf": "true", "pageOrientation": "true", "pageSizeOption": "Folio", "message": "Daily finance report", "content": { "id": "13237fd-6365-44d5-925b-644e5281b605", "type": "Workbook", "sendIfViewEmpty": "false" }, "user": { "id": "09876fd-6365-44d5-925b-644e528d5678" } }, "schedule": { "id": "54321fd-6365-44d5-925b-644e52812345", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user is not authorized to make this request..
404404002User not foundThe user specified in the request could not be found.
404404025Subscription not foundThe task for the subscription could not be found.
409409004invalid parameter valueThe request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between start and end times are not increments of one hour, this error will result.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Subscription Deletes the specified subscription on Tableau Server or Tableau Cloud. #### URI DELETE /api/api-version/sites/site-id/subscriptions/subscription-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the subscription.
subscription-idThe ID of the subscription to delete. To determine what subscriptions are available, call Query Subscriptions.
#### JWT Access Scope Available in API 3.20 (Tableau Cloud June 2023). Not available for Tableau Server. `tableau:tasks:delete` (this scope is included in the scope: `tableau:tasks`) 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 #### Permissions Tableau Server users can call this method to delete any subscription that they had permission to create. For details, see [Create Subscription](#create_subscription). #### Response Code 204 #### Response Body None #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400062Error deleting the subscription.An unspecified error occurred during the deletion operation.
401401002User not authenticated.The user making the request has not been authenticated for this site.
403403059Delete forbidden.A non-administrator user called this method but doesn't have permission to delete the subscription.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Subscription Returns information about the specified subscription. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/subscriptions/subscription-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the subscriptions.
subscription-idThe ID of the subscription to get information for.
#### JWT Access Scope `tableau:tasks:read` _(this scope is included in the scope: `tableau:tasks`)_ This scope can be used to enable this REST method to be called from a unified access token (UAT) or connected app. 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), or [Tableau Cloud connected app scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Tableau Server connected apps scopes](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm). _Available in API 3.20 (Tableau Cloud June 2023) / Tableau Server 2023.3._ #### Request Body None #### Permissions Tableau Server administrators and all site administrators can get subscription information for users of projects within the scope of their administrative permissions. Other users can get subscription information only for their own subscriptions. #### Curl Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/subscriptions/59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` Tableau Server and Tableau Cloud return different payloads in response to this request. For Tableau Server: **Server schedule** is returned. #### Response Code 200 #### Response Body Tableau Server and Tableau Cloud return different payloads in response to this request. ### Tableau Server Response For Tableau Server, a subscription task with a server schedule is returned. Copy ```                          ``` Copy ``` {  "subscription": {    "id": "subscription-id",    "subject": "subscription-subject",    "attachImage": "attach-image-flag",    "attachPdf": "attach-pdf-flag",    "suspended": "suspended-flag",    "pageOrientation": "page-orientation",    "pageSizeOption": "page-size-option",    "content": {      "id": "content-id",      "type": "content-type",      "sendIfViewEmpty": "send-view-if-empty-flag"    },    "schedule": {      "id": "schedule-id",      "name": "schedule-name"    },    "user": {      "id": "user-id",      "name": "user-name"    }  }} ``` ### Tableau Cloud Response For Tableau Cloud, a subscription task with frequency is returned. Copy ```                                                             ``` Copy ``` {  "subscription": {    "id": "92cb4f51-7a15-41d4-bce4-a0fcce5fa985",    "subject": "Subscription - postman",    "message": "Test out postman Subscriptions",    "attachImage": "true",    "attachPdf": "false",    "suspended": "false",    "content": {      "id": "be016ba6-d0a8-44ae-a057-b6df6931ccaa",      "type": "Workbook",      "sendIfViewEmpty": "true"    },    "schedule": {      "frequency": "Weekly",      "nextRunAt": "2023-06-08T17:05:00-0700",      "frequencyDetails": {        "start": "17:05:00",        "intervals": {          "interval": [            { "weekDay": "Thursday" }          ]        }      }    },    "user": {      "id": "14064b01-7d58-4978-bdeb-a5f8d7694863",      "name": "gmysite.com"    }  }} ``` #### Version For Tableau Server: API 2.3 and later. For Tableau Cloud: API 3.20 (June 2023) and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403058UnauthorizedThe user attempted to get information for a subscription that they don't have permission to access.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404025Subscription not foundThe specified subscription doesn't correspond to an existing subscription.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Subscriptions Returns a list of all the subscriptions on the specified site. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/subscriptions GET /api/api-version/sites/site-id/subscriptions?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the subscriptions.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### JWT Access Scope `tableau:tasks:read` _(this scope is included in the scope: `tableau:tasks`)_ This scope can be used to enable this REST method to be called from a unified access token (UAT) or connected app. 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) or access scopes for connected apps: [Tableau Cloud connected app scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Tableau Server connected apps scopes](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm). _Available in API 3.20 (Tableau Cloud June 2023 / Tableau Server 2023.3._ #### Request Body None #### Curl Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/subscriptions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Permissions Tableau Server administrators and all site administrators can get subscription information for users of projects within the scope of their administrative permissions. Other users can get subscription information only for their own subscriptions. #### Response Code 200 #### Response Body Tableau Server and Tableau Cloud return different payloads in response to this request. ### Tableau Server Request For Tableau Server, a subscription task with a server schedule is returned. Copy ```                                                      ``` Copy ``` {  "pagination": {    "pageNumber": "pageNumber",    "pageSize": "page-size",    "totalAvailable": "total-available"  },  "subscriptions": {    "subscription": {      "id": "subscription-id",      "subject": "subscription-subject",      "attachImage": "attach-image-flag",      "attachPdf": "attach-pdf-flag",      "suspended": "suspended-flag",      "pageOrientation": "page-orientation",      "pageSizeOption": "page-size-option",      "content": {        "id": "content-id",        "type": "content-type",        "sendIfViewEmpty": "send-view-if-empty-flag"      },      "schedule": {        "id": "schedule-id",        "name": "schedule-name"      },      "user": {        "id": "user-id",        "name": "user-name"      }    }  }} ``` ### Tableau Cloud Request For Tableau Cloud, a task with frequency is returned. Copy ```                                                                                                                                                        ``` Copy ``` {  "pagination": {    "pageNumber": "1",    "pageSize": "100",    "totalAvailable": "1"  },  "subscriptions": {    "subscription": {      "id": "92cb4f51-7a15-41d4-bce4-a0fcce5fa985",      "subject": "Subscription - postman",      "message": "weekly report",      "attachImage": "true",      "attachPdf": "false",      "suspended": "false",      "content": {        "id": "be016ba6-d0a8-44ae-a057-b6df6931ccaa",        "type": "Workbook",        "sendIfViewEmpty": "true"      },      "schedule": {        "frequency": "Weekly",        "nextRunAt": "2023-06-08T17:05:00-0700",        "frequencyDetails": {          "start": "17:05:00",          "intervals": {            "interval": [              { "weekDay": "Thursday" }            ]          }        }      },      "user": {        "id": "14064b01-7d58-4978-bdeb-a5f8d7694863",        "name": "memysite.com"      }    }  }} ``` #### Version For Tableau Server: API 2.3 and later. For Tableau Cloud: API 3.20 (June 2023) and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe 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.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe specified site doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Subscription Modifies an existing subscription on Tableau Server. You can change the subject, server schedule, and suspension state for the subscription. Tableau Server and Tableau Cloud each have a different model for schedules and tasks. On Tableau Server, you create a schedule and add a task to it. On Tableau Cloud you create a task and define it's frequency. While the Create Subscription endpoint path and parameters are the same for both Server and Cloud, because the models are different, the request and response bodies are different. - [Tableau Server Requests](#update_subscription_server) - [Tableau Cloud Request](#update_subscription_cloud) #### URI PUT /api/api-version/sites/site-id/subscriptions/subscription-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
subscription-idThe ID of the subscription to update.
#### JWT Access Scope `tableau:tasks:update` _(this scope is included in the scope: `tableau:tasks`)_ This scope can be used to enable this REST method to be called from a unified access token or connected app. 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), or [Tableau Cloud connected app scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Tableau Server connected apps scopes](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm). _Available in API 3.20 (Tableau Cloud June 2023 / Tableau Server 2023.3._ ### Tableau Server Request Update the attributes of a subscription task on a server schedule on Tableau Server. _For Tableau Cloud, see [Tableau Cloud Request](#update_subscription_cloud)._ ``` ``` ``` { "subscription": { "subject": "subscription-subject", "attachImage": "attach-image-flag", "attachPdf": "attach-pdf-flag", "pageOrientation": "page-orientation", "pageSizeOption": "page-size-option", "suspended": "suspended-flag", "schedule": { "id": "new-schedule-id" }, "content": { "sendIfViewEmpty": "send-view-if-empty-flag" } } } ``` #### Attribute Values
new-subscription-subject (Optional) A new subject for the subscription.
attach-image-flag

(Optional) Setting this true will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default behavior if neither attachImage or attachPdf are specified.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachImage to false will cause an error.

attach-pdf-flag

(Optional) Setting this true will cause the subscriber to receive mail with a .pdf file containing images of workbooks or views attached to it.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachPdf to true will cause an error.

page-orientation (Optional) The orientation of the pages produced when attach-pdf-flag is true. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-size-option (Optional) The type of page produced, which determines the page dimensions when attach-pdf-flag is true. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid. If this parameter is not present the page type will default to Letter.
suspended-flag

(Optional boolean) If true, the subscription is disabled, meaning it won't run until it's enabled using the Update Subscription method or Resume Subscription in the web UI. If false, the subscription is enabled.

new-schedule-id (Optional) The ID of a server schedule to associate this subscription with. To determine what schedules are available, call List Server Schedules. The type of the schedule must be Subscription.
send-view-if-empty-flag (Optional) Applies to views only. If true, an image is sent even if the view specified in a subscription is empty. If false, nothing is sent if the view is empty. The default value is true.
#### Permissions Tableau Server users can call this method to update any subscription that they have permission to create. For details, see [Create Server Subscription](#create_subscription). #### Response Code 200 #### Response Body ``` ``` ``` { "subscription": { "id": "subscription-id", "subject": "subscription-subject", "suspended": "suspended-flag", "pageOrientation": "page-orientation", "pageSizeOption": "page-size-option", "content": { "id": "content-id", "type": "content-type", "sendIfViewEmpty": "send-view-if-empty-flag" }, "schedule": { "id": "schedule-id", "name": "schedule-name" }, "user": { "id": "user-id", "name": "user-name" } } } ``` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400067Invalid subscription subjectThe subscription subject is null or empty.
400400069Invalid subscription typeThe subscription type is not Workbook or View.
400400069Invalid schedule typeThe schedule type is not Subscription.
400400133Invalid data condition typeThe data condition type is invalid for the subscription.
403403065No permissions to update subscription.The user does not have permission to update the specified subscription.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404023Schedule not foundThe schedule ID in the request body doesn't correspond to an existing schedule.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ### Tableau Cloud Request Update the attributes of a subscription task and its frequency on Tableau Cloud. _For Tableau Server, see [Tableau Server Request](#update_subscription_server)._ **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:** Administrators and any user with the creator role can create a custom schedule for a subscription task.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks:update     Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) #### URI PUT /api/api-version/sites/site-luid/subscriptions/task-luid #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
task-luidThe LUID of the extract refresh task. Use Query subscriptions to find task IDs by subscription subject or user.
#### Request Body ``` ``` ``` { "subscription": { "subject": "finance report", "attachImage": "true", "attachPdf": "true", "pageOrientation": "true", "pageSizeOption": "Folio", "suspended": "false", "message": "daily finance report", "content": { "id": "13237fd-6365-44d5-925b-644e5281b605", "type": "Workbook", "sendIfViewEmpty": "false" }, "user": { "id": "456" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Request Attributes `subject, contentId, userId` and all `schedule` attributes are **required** to create a custom schedule for a subscription, other attributes are optional with defaults. All attributes are optional when updating a custom schedule for a subscription.
subscription subject (Required to create subscription) string: A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment.
subscription attachImage

boolean: Setting this true will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default behavior if neither attachImage or attachPdf are specified. Default is false.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachImage to false will cause an error.

subscription attachPdf

boolean: Setting this true will cause the subscriber to receive mail with a .pdf file containing images of workbooks or views attached to it. Default is false.

If subscriptions to attachments are disabled in Tableau server or site settings, then making a request that sets attachPdf to true will cause an error.

subscription pageOrientation enumeration: The orientation of the pages produced when attach-pdf-flag is true. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
subscription pageSizeOption enumeration: The type of page produced, which determines the page dimensions when attach-pdf-flag is true. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid. If this parameter is not present the page type will default to Letter.
subscription message string: The text body of the subscription email message.
subscription suspended boolean: If true, the subscription is disabled, meaning it won't run until it's enabled using the Update Subscription method or Resume Subscription in the web UI. If false, the subscription is enabled.
content id (Required to create subscription) LUID: The LUID of the workbook or view the user should be subscribed to.
content type (Required to create subscription) enumeration: Workbook to create a subscription for a workbook, or View to create a subscription for a view.
content sendIfViewEmpty boolean: Applies to views only. If true, an image is sent even if the view specified in a subscription is empty. If false, nothing is sent if the view is empty. The default value is true.
userId (Required to create subscription) LUID: The LUID of the user to create the subscription for.

Note: The user must have an email address defined in Tableau Server.

schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### cURL Request Example `curl --location --request PUT "qa-near.tsi.lan/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/subscriptions/r2345998-2ead-4894-bb50-1054a9109876" --header "Content-Type: application/xml" --data " > "` #### Response Code 200 #### Response Body ``` ``` ``` { "subscription": { "id": "789", "subject": "finance report", "attachImage": "true", "attachPdf": "true", "pageOrientation": "true", "pageSizeOption": "Folio", "message": "daily finance report", "content": { "id": "13237fd-6365-44d5-925b-644e5281b605", "type": "Workbook", "sendIfViewEmpty": "false" }, "user": { "id": "09876fd-6365-44d5-925b-644e528d5678" } }, "schedule": { "id": "54321fd-6365-44d5-925b-644e52812345", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403004Unauthorized AccessThe user is not authorized to make this request.
404404002User not foundThe user specified in the request could not be found.
404404025Subscription not foundThe task for the subscription could not be found.
409409004invalid parameter valueThe request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between start and end times are not increments of one hour, this error will result.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Tableau Extensions Settings Methods Tableau extensions settings control which dashboard extensions are allowed to run on a Tableau Server, and on a site on Server or Cloud. Server rules have the form of a "blocklist" that contains domain names. Site rules consist of a "safelist" that contains extension URLs. If a domain is on a server's blocklist, then no extension under that domain can run on that server. If the URL of an extension is not on the safelist for a site, then that extension cannot run on that site. The server blocklist takes precedence, so if the domain of an extension URL is on the server blocklist it is not allowed on a site even if that extension's URL is on the site safelist. Server rules have the form of a "blocklist" that contains domain names. Site rules consist of a "safelist" that contains extension URLs. If a domain is on a server's blocklist, then no extension under that domain can run on that server. If the URL of an extension is not on the safelist for a site, then that extension cannot run on that site. The server blocklist takes precedence, so if the domain of an extension URL is on the server blocklist it is not allowed on a site even if that extension's URL is on the site safelist. Using the site methods of the Tableau Server REST API you can: - Enable or disable dashboard extensions at the site or server level - List the dashboard settings of a site or server This functionality relates to the UI elements and concepts described at: [Sites Overview](https://help.tableau.com/current/server-linux/en-us/sites_intro.htm). ## List Tableau extensions server settings Lists the settings for extensions of a server. **Version:** Available in API 3.21 (Tableau Server 2023.3) and later. Not available for Tableau Cloud. _[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 users with server administrator permissions.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:extensions\_server\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/settings/extensions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body None #### cURL Request Example `curl -X GET "http://MY-SERVER/api/3.29/settings/extensions" -H "Content-Type: application/xml" -H "X-Tableau-Auth: SBGBfOYRSN2JoFe866wpIg|hLI0ZzWmK3xfMtwD8WoztCMqfWaFdcCj|a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body Copy ```         true        https://test.com     ``` Copy ``` {  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403000Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
404404000Bad RequestThe requested resource could not be found.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Tableau extensions site settings Lists the settings for extensions of a site. **Version:** Available in API 3.21 (Tableau Cloud June 2023 / Tableau Server 2023.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:** Any authenticated user can list the extension settings for a site using this method.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:extensions\_site\_settings:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-luid/settings/extensions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### cURL Request Example `curl --location "http://MY-SERVER/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/settings/extensions " --header "X-Tableau-Auth: SBGBfOYRSN2JoFe866wpIg|hLI0ZzWmK3xfMtwD8WoztCMqfWaFdcCj|a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body Copy ```             true        false                    http://localhost:9123/Dynamic.html            true            true                true          true         true         false     ``` Copy ``` {  "extensionsEnabled": "true",  "useDefaultSetting": "false",  "safeList": [  {    "url": "http://localhost:9123/Dynamic.html",    "fullDataAllowed": true,    "promptNeeded": true    }   ],  "allowTrusted": true,    "includeSandboxed": true,    "includeTableauBuilt": true,    "includePartnerBuilt": false  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403000Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
404404000Site Not FoundThe site ID in the URI doesn't correspond to an existing site.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Tableau extensions server settings Updates the settings for extensions of a server. **Version:** Available in API 3.21 ( Tableau Server 2023.3) and later. Not available for Tableau Cloud. _[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 users with server administrator permissions.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:extensions\_server\_settings:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/settings/extensions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
#### Request Body Copy ```       true      https://test.com   ``` Copy ``` {  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }} ``` #### Request Attributes
extensionsEnabled

Required. Boolean. If true extensions are allowed to run on the server. If false all extentions are disabled on the server.

blocklist

(Optional) Array. A list of domains that are not allowed to serve extensions to the Tableau Server. Domains are in the form of https://blocked_example.com

(Optional) String. The URL of the extension you want to from the server.

#### cURL Request Example `curl --location --request PUT "http://MY-SERVER/api/3.29/settings/extensions" --header "Content-Type: application/xml" --header "X-Tableau-Auth: YqB9_MHoTHO26HGsFBFEBg|bQDOIH4MsqFGvUDYTrRYh633vrZHBt6d|a946d998-2ead-4894-bb50-1054a91dcab3" --data "truehttps://test.com "` #### Response Code 200 #### Response Body Copy ```      true   https://test.com   ``` Copy ``` {  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403000Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
404404000Bad RequestThe requested resource could not be found.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Tableau extensions site settings Updates the settings for extensions of a site. **Version:** Available in API 3.21 (Tableau Cloud June 2023 / Tableau Server 2023.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 users with site or server administrator.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:extensions\_site\_settings:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/settings/extensions #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body Copy ```       true    false          http://localhost:9123/Dynamic.html      true      true        true      true      true      false   ``` Copy ``` {     "extensionsSiteSettings": {  "extensionsEnabled": true,  "useDefaultSetting": false,  "safeList": [    {    "url": "http://localhost:9123/Dynamic.html",    "fullDataAllowed": true,    "promptNeeded": true    }   ],  "allowTrusted": true,  "includeSandboxed": true,  "includeTableauBuilt": true,  "includePartnerBuilt": false  } } ``` #### Request Attributes
extensionsEnabled

Required. Boolean. If true, extensions are allowed to run on the site. If false, no extensions are aloowed to run on the site even if their URL is in the site safelist.

useDefaultSetting (Optional) Boolean. If extensions are enabled on the server, the default settings allow extensions to run on a site, provided the extension is not specifically blocked on the server.
safeList url

(Optional) Array. The list of URLs of the extensions allow to run on the site. Regular expressions are supported.

An extension permissions to run an a site are also dependent on the domain of the URL not being present on the server blocklist, and server and site extension enablement being true.

Note that updating the safelist replaces the existing list with the new list. If you want to add a URL to the existing list, you must also include the existing URLs in the new list.

safeList fullDataAllowed (Optional) Boolean. Set to true to allow the extension full access to the underlying data. By default, when you add an extension to the safe list, the extension only has access to the summary (or aggregated) data. Many extensions require full data access to function properly.
safeList promptNeeded (Optional) Boolean. The prompt tells users details about the extension and whether the extension has access to full data. Set to true to give users the ability to allow or deny the extension from running. Set to false to hide this prompt from users, allowing the extension to run immediately.
allowTrusted (Optional) Boolean. If true, specific categories of extensions (sandboxed, Tableau-built, or partner-built) are allowed to run by default on the site. If false, no extensions are allowed unless they are explicitly added to the safeList.
includeSandboxed (Optional) Boolean. Valid only if allowTrusted is true. When true, sandboxed extensions are allowed to run by default. Sandboxed extensions run in a protected environment and cannot access other resources or data on the web.
includeTableauBuilt (Optional) Boolean. Valid only if allowTrusted is true. When true, extensions built by Tableau are allowed to run by default.
includePartnerBuilt (Optional) Boolean. Valid only if allowTrusted is true. When true, extensions built by Tableau's trusted partners are allowed to run by default.
#### cURL Request Example `curl --location --request PUT http://MY-SERVER/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/settings/extensions " --header "Content-Type: application/xml" --header "X-Tableau-Auth: YqB9_MHoTHO26HGsFBFEBg|bQDOIH4MsqFGvUDYTrRYh633vrZHBt6d|a946d998-2ead-4894-bb50-1054a91dcab3" --data "truefalsehttp://localhost:9123/Dynamic.htmltruetruetruetruetruefalse"` #### Response Code 200 #### Response Body Copy ```       true    false          http://localhost:9123/Dynamic.html      true      true        true    true    true    false                                                           ``` Copy ``` {  "extensionsSiteSettings": {    "extensionsEnabled": "true",    "useDefaultSetting": "false",    "safeList": [    {     "url": "http://localhost:9123/Dynamic.html",     "fullDataAllowed": true,     "promptNeeded": true     }    ],   "allowTrusted": true,    "includeSandboxed": true,    "includeTableauBuilt": true,    "includePartnerBuilt": false    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403000Non-admin access forbiddenThe client attempted to access an API method while signed in as a non-administrator user.
404404000Site Not FoundThe site ID in the URI doesn't correspond to an existing site.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Tableau Knowledge Graph Methods Read and write the per-site Tableau Knowledge Graph. Graph node visibility depends on content permissions. Users can see nodes that they have read access to, and can change nodes that they have write access to. **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. ## Create a semantic context Create a semantic context node carrying one or more statements. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:write\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/semantic-contexts [view details](#) ## Delete a semantic context Delete a semantic context created and managed in Tableau Knowledge, along with its statements. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:write\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) DELETE {server}/api/v1/knowledge/semantic-contexts/{ctx\_id} [view details](#) ## Get the lineage of a node Get the lineage neighborhood of a node. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/v1/knowledge/nodes/{node\_id}/lineage [view details](#) ## Get a node by ID Get a single node by its ID, including its semantic statements and directly connected nodes. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/v1/knowledge/nodes/{node\_id} [view details](#) ## Get the downstream impact of a node Get the assets that depend on a node, to see the impact if it changes. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/v1/knowledge/nodes/{node\_id}/impact [view details](#) ## List knowledge graphs List the knowledge graphs on the caller's Tableau site, each with its ID, name, description, status, and **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) GET {server}/api/v1/knowledge/graphs [view details](#) ## List edges around a node List the edges connected to a node. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/edges/search [view details](#) ## Search graph nodes Search graph nodes using natural-language semantic search. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/nodes/search [view details](#) ## Search semantic contexts attached to a node Search the semantic contexts attached to a specific node. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/nodes/{node\_id}/semantic-contexts/search [view details](#) ## Search semantic contexts Search semantic contexts across the graph. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/semantic-contexts/search [view details](#) ## List knowledge sources List the data sources and workbooks connected to the graph. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/sources/search [view details](#) ## Get graph-health suggestions Get a report on the health of the graph, including a score and suggested improvements. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:read\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) POST {server}/api/v1/knowledge/suggestions/search [view details](#) ## Update a semantic context Partially update a semantic context. **Version:** Available in Tableau Cloud September 2026 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) **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. [Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm) **License:** Tableau Cloud+ **Access Scope:** \`tableau:knowledge:write\` [Tableau Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) | [Tableau Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Tableau Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) PATCH {server}/api/v1/knowledge/semantic-contexts/{ctx\_id} [view details](#) [Skip to main content](#main-content) # Tableau MCP Methods Using the Tableau MCP methods of the REST API you can: - Get Tableau MCP Site Settings - Create or update Tableau MCP Site Settings The functionality in these methods relates to Tableau MCP Site Settings concepts described at: [Configurating Tableau MCP - Site Settings](https://tableau.github.io/tableau-mcp/docs/configuration/mcp-config/site-settings). ## Create Tableau MCP Settings for Site Replaces the current list of Tableau MCP settings for a given site. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Server administrators and site administrators. **Access Scope**: `tableau:mcp_site_settings:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). For more information about configuring the Tableau MCP settings for a site, see [Site settings for Tableau MCP](https://tableau.github.io/tableau-mcp/docs/configuration/mcp-config/site-settings). #### URI POST /api/api-version/sites/site-id/settings/mcp #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body ``` mcp-setting-key mcp-setting-value ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "mcp-setting-key", "value": "mcp-setting-value" } ] } } ``` #### Attribute Values
mcp-setting-key (Required) String. Specifies the setting to assign a value to.

mcp-setting-value

(Required) String. Provides the value for the associated key.
#### Response Code 200 #### Response Body ``` EXCLUDE_TOOLS search-content ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "EXCLUDE_TOOLS", "value": "search-content" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid parameterThe mcpSiteSettings entity is empty; the settings key is null, missing, or invalid; or site LUID format is invalid.
401401002Invalid authentication credentialsMissing or invalid authentication credentials.
401403001Missing authentication tokenAuthentication token not provided.
403403000Insufficient permissionsUser isn't an administrator.
403403010Site mismatchAuthenticated user's site does not match the site LUID in the request.
403403157Feature disabledFeature not enabled.
403N/AInsufficient OAuth scopeThe user lacks the required OAuth scope.
404404000Site not foundA site with the specified LUID does not exist.
500500000Internal server errorUnknown server error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Tableau MCP Settings for Site Gets the list of Tableau MCP settings for a specified site. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Any authenticated user. **Access Scope**: `tableau:mcp_site_settings:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). For more information about configuring the Tableau MCP settings for a site, see [Site settings for Tableau MCP](https://tableau.github.io/tableau-mcp/docs/configuration/mcp-config/site-settings). #### URI GET /api/api-version/sites/site-id/settings/mcp #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body None #### Response Code 200 #### Response Body ``` INCLUDE_TOOLS datasource,search-content INCLUDE_TAGS sales,marketing MAX_RESULT_LIMIT 50 MAX_RESULT_LIMITS query-datasource:1000 ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "INCLUDE_TOOLS", "value": "datasource,search-content" }, { "key": "INCLUDE_TAGS", "value": "sales,marketing" }, { "key": "MAX_RESULT_LIMIT", "value": "50" }, { "key": "MAX_RESULT_LIMITS", "value": "query-datasource:1000" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid parameterThe site LUID format is invalid.
401401002Invalid authentication credentialsMissing or invalid authentication credentials.
401403001Missing authentication tokenAuthentication token not provided.
403403010Site mismatchAuthenticated user's site does not match the site LUID in the request.
403403157Feature disabledFeature not enabled.
403N/AInsufficient OAuth scopeThe user lacks the required OAuth scope.
404404000Site not foundA site with the specified LUID does not exist.
500500000Internal server errorUnknown server error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Tableau MCP Settings for Site Updates the current list of Tableau MCP settings for a specified site. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Server administrators and site administrators. **Access Scope**: `tableau:mcp_site_settings:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). For more information about configuring the Tableau MCP settings for a site, see [Site settings for Tableau MCP](https://tableau.github.io/tableau-mcp/docs/configuration/mcp-config/site-settings). #### URI PUT /api/api-version/sites/site-id/settings/mcp #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Body ``` mcp-settings-key mcp-settings-value mcp-settings-key mcp-settings-key mcp-settings-value ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "mcp-settings-key", "value": "mcp-settings-value" }, { "key": "mcp-settings-key" }, { "key": "mcp-settings-key", "value": "mcp-settings-value" } ] } } ``` #### Attribute Values
key(Required) String. Specifies which setting to add, modify, or remove.
value(Optional) String. Provides the value associated with the key. If this property is omitted, then the associated key will be removed from the current Tableau MCP settings for the given site.
#### Response Code 200 #### Response Body ``` INCLUDE_TOOLS datasource,search-content INCLUDE_TAGS sales,marketing,reviews DISABLE_METADATA_API_REQUESTS true MAX_RESULT_LIMITS query-datasource:1000 ``` ``` { "mcpSiteSettings": { "settings": [ { "key": "INCLUDE_TOOLS", "value": "datasource,search-content" }, { "key": "INCLUDE_TAGS", "value": "sales,marketing,reviews" }, { "key": "DISABLE_METADATA_API_REQUESTS", "value": "true" }, { "key": "MAX_RESULT_LIMITS", "value": "query-datasource:1000" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400409004Invalid parameterThe mcpSiteSettings entity is empty; the settings key is null, missing, or invalid; or site LUID format is invalid.
401401002Invalid authentication credentialsMissing or invalid authentication credentials.
401403001Missing authentication tokenAuthentication token not provided.
403403000Insufficient permissionsUser isn't an administrator
403403010Site mismatchAuthenticated user's site does not match the site LUID in the request.
403403157Feature disabledFeature not enabled.
403N/AInsufficient OAuth scopeThe user lacks the required OAuth scope.
404404000Site not foundA site with the specified LUID does not exist.
500500000Internal server errorUnknown server error.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ![Tableau REST API](https://help.tableau.com/current/api/rest_api/en-us/Resources/tableau-logo.png) - Analytics Extensions Settings Methods - Use Postman - getGet enabled state of analytics extensions on server - putEnable or disable analytics extensions on server - getGet enabled state of analytics extensions on site - putUpdate enabled state of analytics extensions on site - getList analytics extension connections on site - postAdd analytics extension connection to site - delDelete analytics extension connection from site - getGet analytics extension details - putUpdate analytics extension connection of site - getList analytics extension connections of workbook - delRemove current analytics extension connection for workbook - getGet current analytics extension for workbook - putUpdate analytics extension for workbook - Ask Data Lens Methods - Retired - Use Postman - getList ask data lenses in site - Retired in API 3.22 - postCreate ask data lens - Retired in API 3.22 - postImport ask data lens - Retired in API 3.22 - delDelete ask data lens - Retired in API 3.22 - getGet ask data lens - Retired in API 3.22 - Collections Methods - delDelete collections - getList collections - postCreate a collection - postBatch update collections - delDelete collections - getGet details of a collection - getList items in a collection - postAdd items to a collection - postRemove items from a collection - patchReorder items in a collection - Content Exploration Methods - Use Postman - postGet batch content usage statistics - getGet usage statistics for content item - getGet content search results - getGet Content Suggestions - Custom Domain Methods - delDelete custom domain settings - getGet custom domain settings - postCreate custom domain settings - putUpdate custom domain settings - getGet Custom Domain Name - Dashboard Extensions Settings Methods - Retired - Use Postman - getList settings for dashboard extensions on server - Retired in API 3.21 - putUpdate dashboard extensions settings of server - Retired in API 3.21 - getList blocked dashboard extensions on server - Retired in API 3.21 - postBlock dashboard extension on server - Retired in API 3.21 - delUnblock dashboard extension on server - Retired in API 3.21 - getGet blocked dashboard extension on server - Retired in API 3.21 - getList dashboard extension settings of site - Retired in API 3.21 - putUpdate dashboard extension settings of site - Retired in API 3.21 - getList allowed dashboard extensions on site - Retired in API 3.21 - postAllow dashboard extension on site - Retired in API 3.21 - delDisallow dashboard extension on site - Retired in API 3.21 - getGet allowed dashboard extension on site - Retired in API 3.21 - putUpdate settings for allowed dashboard extension on site - Retired in API 3.21 - Identity Pools Methods - Use Postman - getList Authentication Configurations on Server - postCreate Authentication Configuration - delDelete Authentication Configuration - putUpdate Authentication Configuration - getList Identity Pools - postCreate Identity Pool - delDelete Identity Pool - getGet Identity Pool - putUpdate Identity Pool - getList Identity Stores - postConfigure Identity Store - delDelete Identity Store - Pulse Methods - Use Postman - getList site alerts - getList metric definitions - postCreate metric definition - getLists all definition tags for the site. - delDelete metric definition - getGet metric definition - patchUpdate metric definition - getList metrics in definition - getBatch list metric definitions (few) - postBatch list metric definitions (many) - getGet site entitlements - postGenerate metric card image - postGenerate current metric value insight bundle - postGenerate basic insight bundle - postGenerate breakdown insight bundle - postGenerate insight brief - postGenerate detail insight bundle - postGenerate exploration insight bundle - postGenerate springboard insight bundle - postList metric definition measurement periods - postCreate metric - delDelete metric - getGet metric - patchUpdate metric - postCreate metric tag for user - delDelete metric tag - getBatch list metrics (few) - postBatch list metrics (many) - getList followed metrics groups - postGet or create metric - getGets recommended metrics - getList subscriptions - postCreate subscription - delDelete Pulse subscription - getGet Pulse subscription - postBatch create Pulse subscriptions - getBatch get Pulse subscriptions - getBatch get Pulse subscriber counts - getList Pulse user preferences - patchUpdate Pulse user preferences - Tableau Knowledge Graph Methods - getList knowledge graphs - postSearch graph nodes - getGet a node by ID - postList knowledge sources - postList edges around a node - getGet the lineage of a node - getGet the downstream impact of a node - postCreate a semantic context - postSearch semantic contexts - postSearch semantic contexts attached to a node - patchUpdate a semantic context - delDelete a semantic context - postGet graph-health suggestions [API docs by Redocly](https://redocly.com/redoc/) # Tableau REST API OpenAPI Endpoints (Current) Versions: _Tableau Server 2021.1 / Tableau Cloud March 2022 and later_ This documentation describes the growing number OpenAPI endpoints being released alongside more than 150 [classic REST endpoints](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm) that are currently in wide usage in the Tableau community. There are some differences users of the classic endpoints will recognize when viewing these new endpoints. - Request bodies for these new REST endpoints must be formatted using JSON. - Endpoint URIs may contain a hyphen (`-`) instead of an API version number, indicating that the resource is versioned separately from the numbered API release. 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). > Starting in Tableau Server 2022.1 / Tableau Cloud March 2022, differences between releases will be noted in this reference.To view the previous version of this reference, see [Tableau REST API OpenAPI Endpoints (v2021.4)](https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#operation/addAnalyticsExtensionsConnection). ## [](#tag/Analytics-Extensions-Settings-Methods)Analytics Extensions Settings Methods Enable and configure [analytics extensions](https://help.tableau.com/current/server/en-us/config_r_tabpy.htm) on sites and, for on premise installations, on servers. With these extensions you can extend Tableau dynamic calculations with languages like R and python, and with other tools and platforms. For more information, see [Analytics Extensions API](https://tableau.github.io/analytics-extensions-api/). When upgrading from a server version less than 2020.2, analytics extensions must be enabled on each site even if external services were enabled on the server being upgraded. Connections for sites must be ported manually. Using the analytics extensions settings methods you can: - Enable and disable analytics extensions for a Tableau server (on-premise only) or for a site. - Create and manage an extension's connections to the service hosting your custom calculations. ## [](#tag/Analytics-Extensions-Settings-Methods/Use-Postman)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: [Analytics Extensions Settings Methods](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-2273366b-11e3-454c-8f8a-f68a59a7b375) ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_getAnalyticsExtensionsServerSettings)Get enabled state of analytics extensions on server Gets the enabled/disabled state of analytics extensions on a server. > **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:extensions_server_settings:read`. Added in API 3.28. _Access Scopes Overview: [Access scopes for connected apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/server/extensions/analytics https://tableau.example.com/api/-/settings/server/extensions/analytics ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ServerSettings+json Copy `{ - "enabled": true }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_updateAnalyticsExtensionsServerSettings)Enable or disable analytics extensions on server Enables or disables analytics extensions on a server. > **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:extensions_server_settings:update`. Added in API 3.28. _Access Scopes Overview: [Access scopes for connected apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.analyticsextensions.v1.ServerSettings+json
enabled
boolean
### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/settings/server/extensions/analytics https://tableau.example.com/api/-/settings/server/extensions/analytics ### Request samples - Payload Content type application/vnd.tableau.analyticsextensions.v1.ServerSettings+json Copy `{ - "enabled": true }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ServerSettings+json Copy `{ - "enabled": true }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_getAnalyticsExtensionsSiteSettings)Get enabled state of analytics extensions on site Gets the enabled/disabled state of analytics extensions on a site. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server or site administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:read`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/site/extensions/analytics https://tableau.example.com/api/-/settings/site/extensions/analytics ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.SiteSettings+json Copy `{ - "enabled": true }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_updateAnalyticsExtensionsSiteSettings)Update enabled state of analytics extensions on site Enables or disables analytics extensions on a site. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server or site administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:update`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.analyticsextensions.v1.SiteSettings+json
enabled
boolean
### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/settings/site/extensions/analytics https://tableau.example.com/api/-/settings/site/extensions/analytics ### Request samples - Payload Content type application/vnd.tableau.analyticsextensions.v1.SiteSettings+json Copy `{ - "enabled": true }` ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.SiteSettings+json Copy `{ - "enabled": true }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_getAnalyticsExtensionsConnections)List analytics extension connections on site Lists a site's analytics extension connections for external services. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server or site administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:read`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/site/extensions/analytics/connections https://tableau.example.com/api/-/settings/site/extensions/analytics/connections ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ConnectionMetadataList+json Copy Expand all Collapse all `{ - "connectionMetadataList": [ - { - "connection_brief": { - "connection_name": "string", - "connection_type": "UNDEFINED" }, - "connection_luid": "string" } ] }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_addAnalyticsExtensionsConnection)Add analytics extension connection to site Adds a new analytics extension connection for an external service to a site. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server or site administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:create`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.analyticsextensions.v1.ConnectionItem+json
object (tableau.analyticsextensions.v1.ConnectionBrief)
connection_luid
string
host
string

Required. The location of an external service (TabPy, Rserve, EINSTEIN_DISCOVERY, Generic API, or other) that responds to your analytics extension requests. The case sensitive value must be a URI, IPv4 or IPv6 address that is a maximum of 255 Unicode characters.

Starting in Tableau Server 2022.1 / Tableau Cloud April 2022, a host address can include path information (www.example.com/path), where previous versions supported only the root domain name (www.example.com).

is_auth_enabled
boolean

For Tableau Cloud: The value is always true.

For on premise Tableau servers: Optional. Set to true if authentication is enabled on the external service. If true, username and password are required. Default is false.

is_ssl_enabled
boolean

For Tableau Cloud: The value is always true.

For on premise Tableau servers: Optional. Set to true if authentication is enabled on the external service. If true, username and password are required. Default is false.

password
string

For Tableau Cloud: A password is always required.

port
integer <int32>

Required. Integer between 1 and 65535.

username
string

For Tableau Cloud: A username is always required.

### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/settings/site/extensions/analytics/connections https://tableau.example.com/api/-/settings/site/extensions/analytics/connections ### Request samples - Payload Content type application/vnd.tableau.analyticsextensions.v1.ConnectionItem+json Copy Expand all Collapse all `{ - "connection_brief": { - "connection_name": "string", - "connection_type": "UNDEFINED" }, - "connection_luid": "string", - "host": "string", - "is_auth_enabled": true, - "is_ssl_enabled": true, - "password": "string", - "port": 0, - "username": "string" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ConnectionItem+json Copy Expand all Collapse all `{ - "connection_brief": { - "connection_name": "string", - "connection_type": "UNDEFINED" }, - "connection_luid": "string", - "host": "string", - "is_auth_enabled": true, - "is_ssl_enabled": true, - "password": "string", - "port": 0, - "username": "string" }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_deleteAnalyticsExtensionsConnection)Delete analytics extension connection from site Deletes a specific analytics extension connection for an external service from a site. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Can only be called by users with site or server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
connection_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/settings/site/extensions/analytics/connections/{connection\_luid} https://tableau.example.com/api/-/settings/site/extensions/analytics/connections/{connection\_luid} ### Response samples - 400 - 401 - 403 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_getAnalyticsExtensionsConnection)Get analytics extension details Get the details of a specified analytics extension connection to an external service. > **Version:** Available in API 3.11 (Tableau Cloud March 2021/ Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Can only be called by users with site or server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:read`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### path Parameters
connection_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/site/extensions/analytics/connections/{connection\_luid} https://tableau.example.com/api/-/settings/site/extensions/analytics/connections/{connection\_luid} ### Response samples - 200 - 400 - 401 - 403 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ConnectionItem+json Copy Expand all Collapse all `{ - "connection_brief": { - "connection_name": "string", - "connection_type": "UNDEFINED" }, - "connection_luid": "string", - "host": "string", - "is_auth_enabled": true, - "is_ssl_enabled": true, - "password": "string", - "port": 0, - "username": "string" }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_updateAnalyticsExtensionsConnection)Update analytics extension connection of site Updates the details of specified analytics extension connection for an external service to a site. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Can only be called by users with site or server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:update`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### path Parameters
connection_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.analyticsextensions.v1.ConnectionItem+json
object (tableau.analyticsextensions.v1.ConnectionBrief)
connection_luid
string
host
string

Required. The location of an external service (TabPy, Rserve, EINSTEIN_DISCOVERY, Generic API, or other) that responds to your analytics extension requests. The case sensitive value must be a URI, IPv4 or IPv6 address that is a maximum of 255 Unicode characters.

Starting in Tableau Server 2022.1 / Tableau Cloud April 2022, a host address can include path information (www.example.com/path), where previous versions supported only the root domain name (www.example.com).

is_auth_enabled
boolean

For Tableau Cloud: The value is always true.

For on premise Tableau servers: Optional. Set to true if authentication is enabled on the external service. If true, username and password are required. Default is false.

is_ssl_enabled
boolean

For Tableau Cloud: The value is always true.

For on premise Tableau servers: Optional. Set to true if authentication is enabled on the external service. If true, username and password are required. Default is false.

password
string

For Tableau Cloud: A password is always required.

port
integer <int32>

Required. Integer between 1 and 65535.

username
string

For Tableau Cloud: A username is always required.

### Responses **200** Successful. **400** Invalid Request. One or more of the following connection parameters could be incorrect: host name, port, connection type, username, password, or SSL settings. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/settings/site/extensions/analytics/connections/{connection\_luid} https://tableau.example.com/api/-/settings/site/extensions/analytics/connections/{connection\_luid} ### Request samples - Payload Content type application/vnd.tableau.analyticsextensions.v1.ConnectionItem+json Copy Expand all Collapse all `{ - "connection_brief": { - "connection_name": "string", - "connection_type": "UNDEFINED" }, - "connection_luid": "string", - "host": "string", - "is_auth_enabled": true, - "is_ssl_enabled": true, - "password": "string", - "port": 0, - "username": "string" }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ConnectionItem+json Copy Expand all Collapse all `{ - "connection_brief": { - "connection_name": "string", - "connection_type": "UNDEFINED" }, - "connection_luid": "string", - "host": "string", - "is_auth_enabled": true, - "is_ssl_enabled": true, - "password": "string", - "port": 0, - "username": "string" }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_getConnectionOptionsForWorkbook)List analytics extension connections of workbook Lists basic details of each analytics extension connection available for a specified workbook, including connection type and name. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can be called by users that have permissions to the specified workbook. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:read`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### path Parameters
workbook_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** The user does not have permissions to this workbook. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/connections https://tableau.example.com/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/connections ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ConnectionMetadataList+json Copy Expand all Collapse all `{ - "connectionMetadataList": [ - { - "connection_brief": { - "connection_name": "string", - "connection_type": "UNDEFINED" }, - "connection_luid": "string" } ] }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_deleteConnectionFromWorkbook)Remove current analytics extension connection for workbook Remove the currently used analytics extension connection to an external service from the specified workbook. The connection remains configured, and is available for further usage by the workbook. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can be called by users that have permissions to the specified workbook. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:delete`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### path Parameters
workbook_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** The user does not have permissions for this workbook. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection https://tableau.example.com/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection ### Response samples - 400 - 401 - 403 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_getSelectedConnectionForWorkbook)Get current analytics extension for workbook Gets basic details, including connection type and name, of the analytics extension connection to an external service that the specified workbook is currently using. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can be called by users that have permissions to the specified workbook. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:read`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### path Parameters
workbook_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** The user does not have permissions for this workbook. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection https://tableau.example.com/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ConnectionMetadata+json Copy Expand all Collapse all `{ - "connection_brief": { - "connection_name": "string", - "connection_type": "UNDEFINED" }, - "connection_luid": "string" }` ## [](#tag/Analytics-Extensions-Settings-Methods/operation/AnalyticsExtensionsService_updateWorkbookWithConnection)Update analytics extension for workbook Updates the analytics extension connection to external service currently used by a workbook. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can be called by users that have permissions to the specified workbook. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:analytics_extensions:update`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) or [Server](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm)_ ##### path Parameters
workbook_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.analyticsextensions.v1.ConnectionMapping+json
connection_luid
string
workbook_luid
string
### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** The user does not have permissions to this workbook. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection https://tableau.example.com/api/-/settings/site/extensions/analytics/workbooks/{workbook\_luid}/selected\_connection ### Request samples - Payload Content type application/vnd.tableau.analyticsextensions.v1.ConnectionMapping+json Copy `{ - "connection_luid": "string", - "workbook_luid": "string" }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.analyticsextensions.v1.ConnectionMapping+json Copy `{ - "connection_luid": "string", - "workbook_luid": "string" }` ## [](#tag/Ask-Data-Lens-Methods-Retired)Ask Data Lens Methods - Retired * * * **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** > **Important changes for Ask Data and Metrics** > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Ask data lenses enable you to refine the way a user's natural language query is interpreted, based on the specific audience they belong to. For instance, you might make one lens for medical staff at a hospital, and another for administrative staff. A lens allows you to define synonyms to associate key words with common terms used for them. For instance, "SF" for "San Francisco", or "Rx" for "prescription". You can also configure recommended visualizations for each lens. > Introduced: Tableau Cloud June 2022. Not currently available for Tableau Server. > > Using the Tableau REST API, you can: > > - Create a lens and configure its properties > - Delete a lens > - Import an existing lens > - Get a list of lenses on a site or the details of a specified lens ## [](#tag/Ask-Data-Lens-Methods-Retired/Use-Postman)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: [Ask Data Lens Methods - Retired](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-42ceab2a-996a-4466-a9b7-aa8e5239d560) ## [](#tag/Ask-Data-Lens-Methods-Retired/operation/LensService_listLenses)List ask data lenses in site - Retired in API 3.22 * * * **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** > **Important changes for Ask Data and Metrics** > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Returns a list of ask data lenses in a site. > **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can be called by any user. Responses will include only the lenses to the user has access to. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:lenses:read` > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** The requested URI was invalid. **401** Unable to authenticate user. Credentials are missing or invalid. **404** The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/askdata/lenses https://tableau.example.com/api/-/askdata/lenses ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.nlp.lens.publicrest.v1.ListLensesResponse+json Copy Expand all Collapse all `{ - "lenses": [ - { - "datasource_id": "string", - "description": "string", - "id": "string", - "name": "string", - "owner_id": "string", - "project_id": "string", - "repository_url": "string", - "site_id": "string" } ] }` ## [](#tag/Ask-Data-Lens-Methods-Retired/operation/LensService_createLens)Create ask data lens - Retired in API 3.22 * * * **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** > **Important changes for Ask Data and Metrics** > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Create an ask data lens. > **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can be called by users who have **Create** permissions for lenses on the site. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:lenses:create` > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.nlp.lens.publicrest.v1.CreateLensRequest+json
datasource_id
string

Required. Luid of the datasource to which the lens is associated to

description
string

Optional. Description of the lens. 4000 characters maximum

Array of objects (tableau.nlp.lens.publicrest.v1.FieldDetail)

Optional. The fields of the lens. If not specified, a lens with all the qualifying fields from the data source will be created.

A lens field contains synonyms used for natural language query, to map words that might be used to mean the same thing as the name of fields or the values fields might have.

is_feedback_enabled
boolean

Required. Indicates if feedback to lens author setting is enabled.

name
string

Required. Name of the lens . Up to 300 characters

project_id
string

Required. Luid of the project in which lens should be created.

### Responses **201** Successful. **400** A resource described in the specified lens was invalid. Check that LUIDs are correct, required elements are present, and character limits are not exceeded. **401** Unable to authenticate user. Credentials are missing or invalid. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/askdata/lenses https://tableau.example.com/api/-/askdata/lenses ### Request samples - Payload Content type application/vnd.tableau.nlp.lens.publicrest.v1.CreateLensRequest+json Copy Expand all Collapse all `{ - "datasource_id": "string", - "description": "string", - "fields": [ - { - "custom_description": "string", - "custom_label": "string", - "field_synonyms": [ - "string" ], - "graph_id": "string", - "value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ] } ], - "is_feedback_enabled": true, - "name": "string", - "project_id": "string" }` ### Response samples - 201 - 400 - 401 - 500 - 503 Content type application/vnd.tableau.nlp.lens.publicrest.v1.CreateLensResponse+json Copy Expand all Collapse all `{ - "lens": { - "datasource_id": "string", - "description": "string", - "fields": [ - { - "custom_description": "string", - "custom_label": "string", - "field_synonyms": [ - "string" ], - "graph_id": "string", - "inherited_field_synonyms": [ - "string" ], - "inherited_value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ], - "value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ] } ], - "id": "string", - "is_feedback_enabled": true, - "name": "string", - "owner_id": "string", - "project_id": "string", - "recommended_visualization_groups": [ - { - "description": "string", - "name": "string", - "recommended_visualizations": [ - { - "colloquial_alias": "string", - "expression": "string", - "interpretation": "string" } ] } ], - "repository_url": "string", - "site_id": "string" } }` ## [](#tag/Ask-Data-Lens-Methods-Retired/operation/LensService_importLens)Import ask data lens - Retired in API 3.22 * * * **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** > **Important changes for Ask Data and Metrics** > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Import an existing ask data lens on a server to a site, and optionally transform the metadata of the lens in the process. > **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by server administrators or site administrators. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:lenses:create` > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ The request and response bodies for a lens import each have two parts: the first describes the attributes of the lens being imported, and the second describes transformations, which are changes to the lens metadata, to apply during import. Use the entire response object from a request to the [Get ask data lens method](#tag/get_data_lens) in your import request body. Lens attributes that can optionally be transformed include name, data source, project, and owner. The original metadata of a lens is replaced by the transformation metadata in the new project the lens is imported to. While `lens_transformation` is optional in an import request, a transformation definition will be needed in most cases. **Example transformation use cases** - To publish a lens to a new site with modified metadata, sign in to the new site and include the following in your request: '' "lens\_transformations": { "datasource\_id": "", "project\_id": "", "owner\_id": "" "name": "", "description": "", } '' - To publish a lens to a different project in the same site, while signed in to the site, use: '' "lens\_transformations": { "project\_id": "new project id", } '' ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.nlp.lens.publicrest.v1.ImportLensRequest+json
object (tableau.nlp.lens.publicrest.v1.Lens)

Details of the lens to be imported.

object (tableau.nlp.lens.publicrest.v1.LensTransformation)

Optional. The details of transformation to perform on the lens during import.

### Responses **201** Successful. **400** A resource described in the specified lens was invalid. Check that LUIDs are correct, required elements are present, and character limits are not exceeded. **401** The user does not have server or site administrator permissions. **404** The specified lens, or a resource described in the lens,could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/askdata/lenses/import https://tableau.example.com/api/-/askdata/lenses/import ### Request samples - Payload Content type application/vnd.tableau.nlp.lens.publicrest.v1.ImportLensRequest+json Copy Expand all Collapse all `{ - "lens": { - "datasource_id": "string", - "description": "string", - "fields": [ - { - "custom_description": "string", - "custom_label": "string", - "field_synonyms": [ - "string" ], - "graph_id": "string", - "inherited_field_synonyms": [ - "string" ], - "inherited_value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ], - "value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ] } ], - "id": "string", - "is_feedback_enabled": true, - "name": "string", - "owner_id": "string", - "project_id": "string", - "recommended_visualization_groups": [ - { - "description": "string", - "name": "string", - "recommended_visualizations": [ - { - "colloquial_alias": "string", - "expression": "string", - "interpretation": "string" } ] } ], - "repository_url": "string", - "site_id": "string" }, - "lens_transformations": { - "datasource_id": "string", - "description": "string", - "name": "string", - "owner_id": "string", - "project_id": "string" } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.nlp.lens.publicrest.v1.ImportLensResponse+json Copy Expand all Collapse all `{ - "lens": { - "datasource_id": "string", - "description": "string", - "fields": [ - { - "custom_description": "string", - "custom_label": "string", - "field_synonyms": [ - "string" ], - "graph_id": "string", - "inherited_field_synonyms": [ - "string" ], - "inherited_value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ], - "value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ] } ], - "id": "string", - "is_feedback_enabled": true, - "name": "string", - "owner_id": "string", - "project_id": "string", - "recommended_visualization_groups": [ - { - "description": "string", - "name": "string", - "recommended_visualizations": [ - { - "colloquial_alias": "string", - "expression": "string", - "interpretation": "string" } ] } ], - "repository_url": "string", - "site_id": "string" } }` ## [](#tag/Ask-Data-Lens-Methods-Retired/operation/LensService_deleteLens)Delete ask data lens - Retired in API 3.22 * * * **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** > **Important changes for Ask Data and Metrics** > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Delete an ask data lens. > **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can be called by users with administrator and lens owner permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:lenses:delete` > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
lens_id
required
string

The LUID of the lens to be deleted.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful. **400** The LUID of the lens specified was invalid. **401** Unable to authenticate user. Credentials are missing or invalid. **404** A lens with the specified LUID could not be found. **500** Unknown error. There was an internal server error. **503** The service is unavailable. delete/api/-/askdata/lenses/{lens\_id} https://tableau.example.com/api/-/askdata/lenses/{lens\_id} ### Response samples - 204 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.nlp.lens.publicrest.v1.GetLensResponse+json Copy Expand all Collapse all `{ - "lens": { - "datasource_id": "string", - "description": "string", - "fields": [ - { - "custom_description": "string", - "custom_label": "string", - "field_synonyms": [ - "string" ], - "graph_id": "string", - "inherited_field_synonyms": [ - "string" ], - "inherited_value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ], - "value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ] } ], - "id": "string", - "is_feedback_enabled": true, - "name": "string", - "owner_id": "string", - "project_id": "string", - "recommended_visualization_groups": [ - { - "description": "string", - "name": "string", - "recommended_visualizations": [ - { - "colloquial_alias": "string", - "expression": "string", - "interpretation": "string" } ] } ], - "repository_url": "string", - "site_id": "string" } }` ## [](#tag/Ask-Data-Lens-Methods-Retired/operation/LensService_getLens)Get ask data lens - Retired in API 3.22 * * * **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** > **Important changes for Ask Data and Metrics** > Tableau's Ask Data and Metrics features were retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. With advances in natural language technologies, we're developing an improved interface that will make it easier to ask questions of your data and stay on top of changes. For more information, see [How Tableau GPT and Tableau Pulse are reimagining the data experience](https://www.tableau.com/blog/tableau-pulse-and-tableau-gpt). * * * Get the details of the specified ask data lens. > **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can be called by users who have **Read** access to the lens. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:lenses:read` > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
lens_id
required
string

The LUID of the lens.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** The LUID of the lens specified, or the LUID of the datasource it describes, was invalid. **401** Unable to authenticate user. Credentials are missing or invalid. **404** A lens with the specified LUID could not be found. **500** Unknown error. There was an internal server error. **503** The service is unavailable. get/api/-/askdata/lenses/{lens\_id} https://tableau.example.com/api/-/askdata/lenses/{lens\_id} ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.nlp.lens.publicrest.v1.GetLensResponse+json Copy Expand all Collapse all `{ - "lens": { - "datasource_id": "string", - "description": "string", - "fields": [ - { - "custom_description": "string", - "custom_label": "string", - "field_synonyms": [ - "string" ], - "graph_id": "string", - "inherited_field_synonyms": [ - "string" ], - "inherited_value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ], - "value_synonyms": [ - { - "synonyms": [ - "string" ], - "value": "string" } ] } ], - "id": "string", - "is_feedback_enabled": true, - "name": "string", - "owner_id": "string", - "project_id": "string", - "recommended_visualization_groups": [ - { - "description": "string", - "name": "string", - "recommended_visualizations": [ - { - "colloquial_alias": "string", - "expression": "string", - "interpretation": "string" } ] } ], - "repository_url": "string", - "site_id": "string" } }` ## [](#tag/Collections-Methods)Collections Methods Collections REST API endpoints enable you to retrieve and manipulate [Tableau collections](https://help.tableau.com/current/pro/desktop/en-us/collections.htm) programmatically. You can use a Tableau collection to make and share a list of resources. The list items don't need to be in the same project. Users that access a shared collection will only be able to see the items that they have permissions to. With collections REST methods, you can: - List all collections that the signed in user has access to. - Create a collection or delete a specified collection the signed in user has access to. - Get the details of a specified collection the signed in user has access to. - Create or delete specified items in a collection the signed in user has access to. - Update the properties of a batch of collections the signed in user has access to. - List all items of a collection that the signed in user has permissions to. - Transfer ownership of specified collections from one user to another. **Using Filters & Sort Options** When using GET methods for collections endpoints, you can use `filter` and `sort` parameters to: - Filter which collections or items are returned - Control the order in which items appear in the results Valid filter options are: `type` - The resource type of items in a collection, called `contentType` in responses. The value can be one or more comma separated types. - `ownerLuid` - The LUID of the owner. - `visibility` - The value can be `public` or `private`. If no value is provided, then both private and public collections visible to the user will be returned. A private collection is one that has not been shared and can only be seen by its owner, or a user with server or site administrator permissions. A public collection is one that has been shared and is visible to whoever it is shared with. - `createdTime` - The creation time in ISO 8601 format. - `updatedTime` - The last updated time in ISO 8601 format. - `modifiedTime` - The last updated time in ISO 8601 format. - `siteId` - The integer ID value of the site that the collection belongs to. - `favorite` - The boolean value of whether the item is marked as a favorite for the currently signed in user. - `luid` The LUID of the collection. - `title` - The title of the collection item. Use quotes for entry (i.e. `filter=name:eq:Superstore Workbook`). Valid sort options are: - `type` - The resource type of items in a collection, called `contentType` in responses. - `visibility` - The value can be `public` or `private`. If no value is provided, then both private and public collections visible to the user will be returned. A private collection is one that has not been shared and can only be seen by its owner, or a user with server or site administrator permissions. A public collection is one that has been shared and is visible to whoever it is shared with. - `createdTime` - The creation time. - `updatedTime` - The last updated time. - `modifiedTime` - The last updated time. - `title` - The title of the collection item. - `name` - The title of the collection. - `ownerName` - The name of the owner. - `position` - The custom order of the content in the collection. ## [](#tag/Collections-Methods/operation/deleteCollections)Delete collections Deletes collections. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:delete. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
luid
Array of strings

Use luids query param to supply a list of the LUIDs of collections to be deleted (for example: collections?luids=40a06f8b-a3d7-4fd6-b943-bff3ff75ffd5,4d951950-b3f1-4b3d-90cb-6cfb17d5065f). Alternately, use a single luid path param to delete a single collection (for example: collections/40a06f8b-a3d7-4fd6-b943-bff3ff75ffd).

### Responses **200** Successful. delete/api/-/collections https://tableau.example.com/api/-/collections ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "errors": [ - { - "errorCode": 0, - "errorMessage": "string", - "erroredItem": { - "contentLuid": "string", - "contentType": "string" }, - "luid": "string" } ], - "response": [ - "string" ] }` ## [](#tag/Collections-Methods/operation/getCollections)List collections Lists collections. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:read. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
filter
string

(Optional) The field(s) that will be used to filter results.

Valid options include: ownerLuid; visibility; createdTime; updatedTime; luid; siteId; favorite.

For more information, see Filtering and Sorting.

page number
integer <int32>

(Optional) The page number of returnable items to provide in response. The default value is 1.

page size
integer <int32>

(Optional) The number of items to return per response page. The default value is 100.

sort order
string

(Optional) The name of the field used to sort results. Valid options include: visibility; createdTime; updatedTime; ownerName; name; modifiedTime.

Sort direction can be asc or desc, default is asc if no direction is provided.

For more information, see Filtering and Sorting.

### Responses **200** Successful. get/api/-/collections https://tableau.example.com/api/-/collections ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "errors": [ - { - "errorCode": 0, - "errorMessage": "string", - "erroredItem": { - "contentLuid": "string", - "contentType": "string" }, - "luid": "string" } ], - "items": [ - { - "createdTime": "string", - "description": "string", - "favorite": true, - "id": 0, - "luid": "string", - "name": "string", - "ownerAlias": "string", - "ownerDomain": "string", - "ownerName": "string", - "permissionedItemCount": 0, - "siteId": "string", - "totalItemCount": 0, - "updatedTime": "string", - "userId": "string", - "visibility": "string" } ], - "moreItems": true, - "pagination": { - "pageNumber": 0, - "pageSize": 0, - "totalAvailable": 0 }, - "totalCount": 0 }` ## [](#tag/Collections-Methods/operation/createCollection)Create a collection Creates a new collection. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:create. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### Request Body schema: application/jsonapplication/xmlapplication/json required
description
string

(Optional) Description for the new collection.

name
required
string

Name for the new collections. If this name already exists for the user, a number will be appended.

### Responses **200** Successful. post/api/-/collections https://tableau.example.com/api/-/collections ### Request samples - Payload Content type application/jsonapplication/xmlapplication/json Copy `{ - "description": "string", - "name": "string" }` ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy `{ - "createdTime": "string", - "description": "string", - "favorite": true, - "id": 0, - "luid": "string", - "name": "string", - "ownerAlias": "string", - "ownerDomain": "string", - "ownerName": "string", - "permissionedItemCount": 0, - "siteId": "string", - "totalItemCount": 0, - "updatedTime": "string", - "userId": "string", - "visibility": "string" }` ## [](#tag/Collections-Methods/operation/batchUpdateCollections)Batch update collections Batch updates collections. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:update. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### Request Body schema: application/jsonapplication/xmlapplication/json required
Array of objects (tableau.collectionsservice.BatchUpdateCollectionModel)
### Responses **200** Successful. post/api/-/collections/batchUpdate https://tableau.example.com/api/-/collections/batchUpdate ### Request samples - Payload Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "items": [ - { - "description": "string", - "luid": "string", - "name": "string", - "ownerLuid": "string" } ] }` ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "errors": [ - { - "errorCode": 0, - "errorMessage": "string", - "erroredItem": { - "contentLuid": "string", - "contentType": "string" }, - "luid": "string" } ], - "response": [ - "string" ], - "typeToMatchJSON": "string" }` ## [](#tag/Collections-Methods/operation/deleteCollections_1)Delete collections Deletes collections. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:delete. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)\* ##### path Parameters
luid
required
string
##### query Parameters
luid
Array of strings

Use luids query param to supply a list of the LUIDs of collections to be deleted (for example: collections?luids=40a06f8b-a3d7-4fd6-b943-bff3ff75ffd5,4d951950-b3f1-4b3d-90cb-6cfb17d5065f). Alternately, use a single luid path param to delete a single collection (for example: collections/40a06f8b-a3d7-4fd6-b943-bff3ff75ffd).

### Responses **200** Successful. delete/api/-/collections/{luid} https://tableau.example.com/api/-/collections/{luid} ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "errors": [ - { - "errorCode": 0, - "errorMessage": "string", - "erroredItem": { - "contentLuid": "string", - "contentType": "string" }, - "luid": "string" } ], - "response": [ - "string" ] }` ## [](#tag/Collections-Methods/operation/getCollection)Get details of a collection Gets the details of a collection. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:read. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
luid
required
string

The LUID of the collection to return details for.

### Responses **200** Successful. get/api/-/collections/{luid} https://tableau.example.com/api/-/collections/{luid} ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "collection": { - "createdTime": "string", - "description": "string", - "favorite": true, - "id": 0, - "luid": "string", - "name": "string", - "ownerAlias": "string", - "ownerDomain": "string", - "ownerName": "string", - "permissionedItemCount": 0, - "siteId": "string", - "totalItemCount": 0, - "updatedTime": "string", - "userId": "string", - "visibility": "string" }, - "errors": [ - { - "errorCode": 0, - "errorMessage": "string", - "erroredItem": { - "contentLuid": "string", - "contentType": "string" }, - "luid": "string" } ] }` ## [](#tag/Collections-Methods/operation/getCollectionItems)List items in a collection Lists items in a collection. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:read. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
luid
required
string

The LUID of the collection whose items are being listed.

##### query Parameters
filter
string

(Optional) The field(s) that will be used to filter results.

Valid options include: ownerLuid; title; createdTime; modifiedTime; luid; type; favorite.

For more information, see Filtering and Sorting.

page number
integer <int32>

(Optional) The page number of returnable items to provide in response. The default value is 1.

page size
integer <int32>

(Optional) The number of items to return per response page. The default value is 100.

sort order
string

(Optional) The name of the field used to sort results. Valid options include: position; createdTime; modifiedTime; ownerName; title; type.

Sort direction can be asc or desc, default is asc if no direction is provided.

For more information, see Filtering and Sorting.

### Responses **200** Successful. get/api/-/collections/{luid}/items https://tableau.example.com/api/-/collections/{luid}/items ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "errors": [ - { - "errorCode": 0, - "errorMessage": "string", - "erroredItem": { - "contentLuid": "string", - "contentType": "string" }, - "luid": "string" } ], - "items": [ - { - "addedDate": "string", - "collectionLuid": "string", - "content": { - "contentType": "string", - "id": 0, - "siteId": 0, - "syncToken": "string", - "title": "string" }, - "extraData": { - "property1": 0, - "property2": 0 }, - "position": 0 } ], - "moreItems": true, - "pagination": { - "pageNumber": 0, - "pageSize": 0, - "totalAvailable": 0 }, - "totalCount": 0 }` ## [](#tag/Collections-Methods/operation/addCollectionItems)Add items to a collection Adds items to a collection. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:update. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
luid
required
string

The LUID of the collection that items are being added to.

##### Request Body schema: application/jsonapplication/xmlapplication/json required
Array of objects (tableau.collectionsservice.CollectionAddItemModel)

A list of the items to add to or remove from a collection.

### Responses **200** Successful. post/api/-/collections/{luid}/items/batchCreate https://tableau.example.com/api/-/collections/{luid}/items/batchCreate ### Request samples - Payload Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "items": [ - { - "contentLuid": "string", - "contentName": "string", - "contentType": "string" } ] }` ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "errors": [ - { - "errorCode": 0, - "errorMessage": "string", - "erroredItem": { - "contentLuid": "string", - "contentType": "string" }, - "luid": "string" } ], - "response": 0, - "typeToMatchJSON": "string" }` ## [](#tag/Collections-Methods/operation/removeCollectionItems)Remove items from a collection Removes items from a collection. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections: update. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
luid
required
string

The LUID of the collection that items are being removed from.

##### Request Body schema: application/jsonapplication/xmlapplication/json required
Array of objects (tableau.collectionsservice.CollectionAddItemModel)

A list of the items to add to or remove from a collection.

### Responses **200** Successful. post/api/-/collections/{luid}/items/batchDelete https://tableau.example.com/api/-/collections/{luid}/items/batchDelete ### Request samples - Payload Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "items": [ - { - "contentLuid": "string", - "contentName": "string", - "contentType": "string" } ] }` ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy Expand all Collapse all `{ - "errors": [ - { - "errorCode": 0, - "errorMessage": "string", - "erroredItem": { - "contentLuid": "string", - "contentType": "string" }, - "luid": "string" } ], - "response": 0, - "typeToMatchJSON": "string" }` ## [](#tag/Collections-Methods/operation/reorderItems)Reorder items in a collection Reorders items in a collection. > **Version:** Available in API 3.28 (Cloud February 2026 / Server 2026.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Tableau administrators can call this method for all sites they administer. Other users can call this method for collections that they own. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:collections:update. Added in API 3.28. > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
luid
required
string
##### Request Body schema: application/json required
Array of objects (tableau.collectionsservice.CollectionOrderItemModel)

A list of item orderings to reorder collection items

### Responses **200** Successful. patch/api/-/collections/{luid}/orderItems https://tableau.example.com/api/-/collections/{luid}/orderItems ### Request samples - Payload Content type application/json Copy Expand all Collapse all `{ - "itemOrderings": [ - { - "itemId": "string", - "itemIdToMoveAfter": "string", - "itemType": "string", - "itemTypeToMoveAfter": "string" } ] }` ### Response samples - 200 Content type application/jsonapplication/xmlapplication/json Copy `"string"` ## [](#tag/Content-Exploration-Methods)Content Exploration Methods Content exploration methods enable you to view: **Search Results:** Explore your Tableau content based on relevance to an provided term and filter expression. **Usage Statistics:** Get the count of the number of times a user has directly or indirectly accessed a specified content item, or a batch of content items. Statistics are available for workbooks, views, data sources, flows and other Tableau resources. The response contains counts for a variety of time periods, ranging from two weeks up to the resource's lifetime. **Suggestions:** Get suggestions for autocompletion as a user types, based on matches of their input. Searches across all supported content types for objects relevant to the specified term. ## [](#tag/Content-Exploration-Methods/Use-Postman)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: [Content Exploration Methods](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-cb6815ea-2c84-4561-bde2-8ff6cd0d7692) ## [](#tag/Content-Exploration-Methods/operation/UsageStatsService_BatchGetUsage)Get batch content usage statistics Gets usage statistics for multiple content items. The batch of can include multiple content types. > **Version:** Available in API 3.17 ( Tableau Cloud December 2022) 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)_ > **Permissions:** Tableau administrators can get statistics for all content they administer. Other users can get statistics for any content they own or have at least _Read_ permissions for. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:content:read`. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.usagestats.v1.BatchGetUsageRequest+json
Array of objects (tableau.usagestats.v1.ContentItemId)
### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/content/usage-stats https://tableau.example.com/api/-/content/usage-stats ### Request samples - Payload Content type application/vnd.tableau.usagestats.v1.BatchGetUsageRequest+json Copy Expand all Collapse all `{ - "content_items": [ - { - "luid": "string", - "type": "string" } ] }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.usagestats.v1.ContentItemUsageStatsList+json Copy Expand all Collapse all `{ - "content_items": [ - { - "content": { - "luid": "string", - "type": "string" }, - "usage": { - "hitsLastOneMonthTotal": 0, - "hitsLastThreeMonthsTotal": 0, - "hitsLastTwelveMonthsTotal": 0, - "hitsLastTwoWeeksTotal": 0, - "hitsTotal": 0 } } ], - "errors": [ - { - "httpErrorCode": 0, - "message": "string" } ] }` ## [](#tag/Content-Exploration-Methods/operation/UsageStatsService_GetUsageStats)Get usage statistics for content item Gets the usage statistics for a Tableau content item, specified by LUID and content type, such as workbook, datasource, or flow. > **Version:** Available in API 3.17 ( Tableau Cloud December 2022) 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)_ > **Permissions:** Tableau administrators can get statistics for all content they administer. Other users can get statistics for any content they own or have at least _Read_ permissions for. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:content:read`. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
luid
required
string
type
required
string

The content type of the kind of resource being specified, for instance: 'workbooks', 'flows', and 'datasources'.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Usage statistics are not supported for the provided content type. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/content/usage-stats/{type}/{luid} https://tableau.example.com/api/-/content/usage-stats/{type}/{luid} ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.usagestats.v1.UsageStats+json Copy `{ - "hitsLastOneMonthTotal": 0, - "hitsLastThreeMonthsTotal": 0, - "hitsLastTwelveMonthsTotal": 0, - "hitsLastTwoWeeksTotal": 0, - "hitsTotal": 0 }` ## [](#tag/Content-Exploration-Methods/operation/ContentExplorationService_getSearch)Get content search results Searches across all supported content types for objects relevant to the search expression specified in the querystring of the request URI. > **Version:** Available in API 3.16 ( Tableau Cloud June 2022 / Server 2022.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Search results will be limited to those objects that the user has permissions to access. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:content:read`. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ For example, `MY_SERVER/api/-/search?terms=productID` could return the Sales workbook that contains a data field named `productID` as well as Superstore database containing a table with a column named `productID`. Query parameters can be combined to refine your search. For instance, the request for a search on the term "sales", for workbooks created in 2021 or later, sorted by the number of times the content has been viewed since its creation, with smallest number of views first, would look like: `/search?terms=sales&filter=type:eq:workbook&modifiedTime:gte:2021&order_by=hitsTotal:ascc` Content types returned can include:
  • lens
  • datasource
  • virtualconnection
  • collection
  • project
  • flow
  • datarole
  • table
  • database
  • view
  • workbook
##### query Parameters
filter
string

(Optional) An expression to filter the response using one of the following parameters, or a combination of expressions separated by a comma.

  • type

    The content type, using the eq or in operator in expressions like:

    ?filter=type:eq:workbook

    ?filter=type:in:[workbook,datasource]

    Note: The in operator is available in API 3.17 (Tableau Cloud October 2022 / Server 2022.3) and later.

or:

  • ownerId

    Resource owner ID or last modified time, using eq, lte, gte, gt, lt or in operator in an expression like:

    filter=ownerId:in:[100,200,300]

or:

  • modifiedTime

    Resource owner ID or last modified time, using eq, lte, gte, gt, lt or in operator in an expression like:

    filter=modifiedTime:gte:2022-01-11T08:00:00.000Z

For more information about filter expressions, see Filtering and Sorting in the Tableau REST API.

limit
integer <int32>

(Optional) The number of items to return on each response page. The default is 10.

order_by
string
Enum: "hitsTotal" "hitsSmallSpanTotal" "hitsMediumSpanTotal" "hitsLargeSpanTotal" "downstreamWorkbookCount"


(Optional) The sorting method for items returned, based on the popularity of the item. You can sort based on:

  • hitsTotal - The number of times a content item has been viewed since it was created.
  • hitsSmallSpanTotal The number of times viewed in the last month.
  • hitsMediumSpanTotal The number of times viewed in the last three months.
  • hitsLargeSpanTotal The number of times viewed in the last twelve months.
  • downstreamWorkbookCount The number workbooks in a given project. This value is only returned when the request filter expression is =type:eq:table or =type:eq:database.

Append :asc or :desc to determine sort direction. The default is asc.

Your search expression can have more than one comma separated order_by element. If there is a tie between two items for the first order_by expression, then sort order between the two items will be determined by the second order_by expression. The following expression sorts items from the fewest views since creation and, in case of a tie, by the one that has the most recent views.

?order_by=hitsTotal:asc,hitsSmallSpanTotal:desc

page
integer <int64>

(Optional) The number of the page in the list response pages to return. Maximum number of items returned is 2,000

terms
string

(Optional) One or more terms the search uses as the basis for which items are relevant to return. The items may be of any supported content type. The relevance may be assessed based on any element of a given item. If no terms are supplied, then results will be based filtering and page size limits.

### Responses **200** Success Search requests return a JSON response body containing two forms of metadata: \- **Metadata describing the search request**. These properties are at the top level of the JSON hierarchy of the response body. To learn more, expand this 200 response section. \- **Metadata describing the items returned by the search**. Attributes shown for a given item in the `items` array vary by the content type of the item (workbook, datasource, flow, ...), and include the full range of available attributes for that content type. **400** The page number, page size, filter, or sort expression was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **403** The specified page size is larger than the maximum page size.. **404** The specified URI was invalid. **405** Request type was not GET. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/search https://tableau.example.com/api/-/search ### Response samples - 200 - 400 - 401 - 403 - 404 - 405 - 500 - 503 Content type application/vnd.tableau.search-results.v2+json Copy Expand all Collapse all `{ - "items": [ - { - "content": { - "property1": { }, - "property2": { } }, - "uri": "string" } ], - "limit": 0, - "next": "string", - "pageIndex": 0, - "prev": "string", - "startIndex": 0, - "total": 0 }` ## [](#tag/Content-Exploration-Methods/operation/ContentExploration_getSuggestions)Get Content Suggestions Returns a specified number of suggestions for auto-completion of user input as they type. You can specify content types of suggestions and prioritize recently viewed content. > **Version:** Available in API 3.19 ( Tableau Cloud March 2023 / Server 2023.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Suggestions will be limited to those objects that the user has permissions to access. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:content:read`. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### query Parameters
filter
string

A filter to restrict suggestions to specified content types. The supported operators are: in and eq. For instance, the parameter: filter:in:workbooks,datasources would limit suggestions returned to only those for workbooks and data sources.

limit
integer <int32>

The number of suggestions to return. The default is 10.

recentsLuids
string

A comma separated list of luids that will be prioritized in scoring of content items matched to suggest.

terms
required
string

The term that is matched to find suggestions.

### Responses **200** Successful. **400** Usage statistics are not supported for the provided content type. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/suggestions https://tableau.example.com/api/-/suggestions ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.search-results.v2+json Copy Expand all Collapse all `{ - "filter": "string", - "hits": { - "items": [ - { - "content": { - "property1": { }, - "property2": { } }, - "uri": "string" } ], - "limit": 0, - "next": "string", - "pageIndex": 0, - "prev": "string", - "startIndex": 0, - "total": 0 }, - "sort": "string", - "terms": "string" }` ## [](#tag/Custom-Domain-Methods)Custom Domain Methods Custom domains allow your Tableau Cloud site to use a subdomain of your top level domain. For example, if you control `example.com`, you can use the subdomain `analytics.example.com` for your Tableau Cloud site. By using your domain, you maintain brand identity because the user won't see Tableau URLs in the address bar of their browser. Furthermore, because it's your domain, security constraints around third-party cookies don't apply. For information on custom domains, see [Use a Custom Domain with Tableau Cloud](https://help.tableau.com/current/online/en-us/custom_domain.htm). The custom domain REST API methods allow you to create, update, delete, or get information on custom domains using the REST API. > Note: If you use custom OAuth authentication for any connectors, you must configure a new OAuth client to use the custom domain with those connectors. The new client should use the custom domain as the Redirect URL. For more information on setting up custom OAuth, see [Configure Custom OAuth](https://help.tableau.com/current/online/en-us/protected_auth.htm#configure-custom-oauth). ## [](#tag/Custom-Domain-Methods/operation/CustomDomainsService_deleteSiteCustomDomainSettings)Delete custom domain settings Deletes the custom domain setup for a Tableau site. > **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. _[Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Only users with administrator permissions can view a site's custom domain settings. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:custom_domains:delete`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
site_luid
required
string

The LUID of the Tableau site associated with the custom domain.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful. **400** The request was malformed. **401** User could not be authenticated. Credentials were missing or invalid. **404** The requested resource could not be found. **500** An unknown error occurred. **503** Tableau service was unavailable. Retry at a later time. delete/api/-/customdomains/settings/site/{site\_luid} https://tableau.example.com/api/-/customdomains/settings/site/{site\_luid} ### Response samples - 204 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.customdomains.v1.DeleteSiteCustomDomainSettingsResponse+json Copy `{ - "site_luid": "string" }` ## [](#tag/Custom-Domain-Methods/operation/CustomDomainsService_getSiteCustomDomainSettings)Get custom domain settings Gets the custom domain settings for a Tableau site. > **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. _[Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Only users with administrator permissions can view a site's custom domain settings. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:custom_domains:read`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
site_luid
required
string

The LUID of the Tableau site.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** The request was malformed. **401** User could not be authenticated. Credentials were missing or invalid. **404** The requested resource could not be found. **500** An unknown error occurred. **503** Tableau service was unavailable. Retry at a later time. get/api/-/customdomains/settings/site/{site\_luid} https://tableau.example.com/api/-/customdomains/settings/site/{site\_luid} ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.customdomains.v1.SiteCustomDomainSettingsResponse+json Copy `{ - "certificate_update_in_progress": true, - "custom_domain": "string", - "intermediate_domain": "string", - "last_error": "string", - "request_initiation_date": "string", - "site_luid": "string", - "status": "Requested", - "tls_certificate_expiry_date": "string", - "tls_certificate_uploaded_date": "string" }` ## [](#tag/Custom-Domain-Methods/operation/CustomDomainsService_createSiteCustomDomainSettings)Create custom domain settings Starts the process of custom domain setup for a Tableau site. For more information, see [Setup Steps to Enable a Custom Domain](#setup_steps_to_enable_a_custom_domain). > **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. _[Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Only users with administrator permissions can create a custom domain for a site. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:custom_domains:create`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
site_luid
required
string

The LUID of the Tableau site associated with the custom domain.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.customdomains.v1.SiteCustomDomainSettingsRequest+json
custom_domain
string

The custom domain associated with the Tableau site.

site_luid
string

The LUID of the Tableau site associated with the custom domain.

status
string
Enum: "Requested" "CnameVerificationRequested" "CnameVerificationInProgress" "CnameVerificationFailed" "CnameVerificationSuccess" "Provisioning" "Deleting" "CustomDomainProvisioned"

The provisioning status of the custom domain.

tls_certificate
string

The TLS certificate for the custom domain, including the CA certs.

The form of the certificate is:

-----BEGIN CERTIFICATE-----
MIIGiTCCBHGgAwIBAgIIY5dpPr2gQjowDQYJKoZIhvcNAQENBQAwgYsxCzAJBgNV
…
A7jcIyoWtoPP1rZ3VjP4LIVVro8pce7MNtD9CzUYN8kQk1iftBKWjcCd20Km
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIGqzCCBJOgAwIBAgIIYifB1rX/1pAwDQYJKoZIhvcNAQELBQAwgYUxCzAJBgNV
...
g+qyDLoAy/td0D8ha8SlWt5ee2cAF9Xu7Y9jNe21Ug==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDpjCCAyugAwIBAgIQDTYMRISRziTtCzVA2HCg3TAKBggqhkjOPQQDAzBhMQsw
...
7LX35CV+ypuVTbKZkjATTvROgmL5AgTbsAg=
-----END CERTIFICATE-----
tls_certificate_private_key
string

The private key corresponding to the TLS certificate.

-----BEGIN PRIVATE KEY-----
  MIIEpAIBAAKCAQEAgN9TePjxsgvjZ8QERQILf3YbofaBHGks5E3k9dRP0cx7sw1O
  …
  xpAh+dRkr0vjsj/ZnJyYfaUQDcV4wslFcn6eKoINEQrtBj40P1iqig==
  -----END PRIVATE KEY-----
### Responses **201** Successful. **400** The request was malformed. **401** User could not be authenticated. Credentials were missing or invalid. **404** The requested resource could not be found. **500** An unknown error occurred. **503** Tableau service was unavailable. Retry at a later time. post/api/-/customdomains/settings/site/{site\_luid} https://tableau.example.com/api/-/customdomains/settings/site/{site\_luid} ### Request samples - Payload Content type application/vnd.tableau.customdomains.v1.SiteCustomDomainSettingsRequest+json Copy `{ - "custom_domain": "string", - "site_luid": "string", - "status": "Requested", - "tls_certificate": "string", - "tls_certificate_private_key": "string" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.customdomains.v1.SiteCustomDomainSettingsResponse+json Copy `{ - "certificate_update_in_progress": true, - "custom_domain": "string", - "intermediate_domain": "string", - "last_error": "string", - "request_initiation_date": "string", - "site_luid": "string", - "status": "Requested", - "tls_certificate_expiry_date": "string", - "tls_certificate_uploaded_date": "string" }` ## [](#tag/Custom-Domain-Methods/operation/CustomDomainsService_updateSiteCustomDomainSettings)Update custom domain settings Updates the custom domain setup for a Tableau site. For more information, see [Setup Steps to Enable a Custom Domain](#setup_steps_to_enable_a_custom_domain). > **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. _[Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Only users with administrator permissions can update a site's custom domain settings. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:custom_domains:update`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
site_luid
required
string

The LUID of the Tableau site associated with the custom domain.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.customdomains.v1.SiteCustomDomainSettingsRequest+json
custom_domain
string

The custom domain associated with the Tableau site.

site_luid
string

The LUID of the Tableau site associated with the custom domain.

status
string
Enum: "Requested" "CnameVerificationRequested" "CnameVerificationInProgress" "CnameVerificationFailed" "CnameVerificationSuccess" "Provisioning" "Deleting" "CustomDomainProvisioned"

The provisioning status of the custom domain.

tls_certificate
string

The TLS certificate for the custom domain, including the CA certs.

The form of the certificate is:

-----BEGIN CERTIFICATE-----
MIIGiTCCBHGgAwIBAgIIY5dpPr2gQjowDQYJKoZIhvcNAQENBQAwgYsxCzAJBgNV
…
A7jcIyoWtoPP1rZ3VjP4LIVVro8pce7MNtD9CzUYN8kQk1iftBKWjcCd20Km
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIGqzCCBJOgAwIBAgIIYifB1rX/1pAwDQYJKoZIhvcNAQELBQAwgYUxCzAJBgNV
...
g+qyDLoAy/td0D8ha8SlWt5ee2cAF9Xu7Y9jNe21Ug==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDpjCCAyugAwIBAgIQDTYMRISRziTtCzVA2HCg3TAKBggqhkjOPQQDAzBhMQsw
...
7LX35CV+ypuVTbKZkjATTvROgmL5AgTbsAg=
-----END CERTIFICATE-----
tls_certificate_private_key
string

The private key corresponding to the TLS certificate.

-----BEGIN PRIVATE KEY-----
  MIIEpAIBAAKCAQEAgN9TePjxsgvjZ8QERQILf3YbofaBHGks5E3k9dRP0cx7sw1O
  …
  xpAh+dRkr0vjsj/ZnJyYfaUQDcV4wslFcn6eKoINEQrtBj40P1iqig==
  -----END PRIVATE KEY-----
### Responses **200** Successful. **400** The request was malformed. **401** User could not be authenticated. Credentials were missing or invalid. **404** The requested resource could not be found. **500** An unknown error occurred. **503** Tableau service was unavailable. Retry at a later time. put/api/-/customdomains/settings/site/{site\_luid} https://tableau.example.com/api/-/customdomains/settings/site/{site\_luid} ### Request samples - Payload Content type application/vnd.tableau.customdomains.v1.SiteCustomDomainSettingsRequest+json Copy `{ - "custom_domain": "string", - "site_luid": "string", - "status": "Requested", - "tls_certificate": "string", - "tls_certificate_private_key": "string" }` ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.customdomains.v1.SiteCustomDomainSettingsResponse+json Copy `{ - "certificate_update_in_progress": true, - "custom_domain": "string", - "intermediate_domain": "string", - "last_error": "string", - "request_initiation_date": "string", - "site_luid": "string", - "status": "Requested", - "tls_certificate_expiry_date": "string", - "tls_certificate_uploaded_date": "string" }` ## [](#tag/Custom-Domain-Methods/operation/CustomDomainsService_getSiteCustomDomain)Get Custom Domain Name Gets the custom domain for a Tableau site, if one is provisioned. For more information about how, see [Using Custom Domains](https://help.tableau.com/current/online/en-us/custom_domain.htm). > **Version:** Available in API 3.26 (Tableau Cloud June 2025) and later. Not available for Tableau Server. _[Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Can be called by any user that is a member of the site associated with the custom domain. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:custom_domains:read`. Added in API 3.28. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
site_luid
required
string

The LUID of the Tableau site associated with the custom domain.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** The request was malformed. **401** User could not be authenticated. Credentials were missing or invalid. **404** The requested resource could not be found. **500** An unknown error occurred. **503** Tableau service was unavailable. Retry at a later time. get/api/-/customdomains/site/{site\_luid} https://tableau.example.com/api/-/customdomains/site/{site\_luid} ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.customdomains.v1.GetSiteCustomDomainResponse+json Copy `{ - "custom_domain": "string", - "site_luid": "string" }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired)Dashboard Extensions Settings Methods - Retired * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Enable and configure security for [dashboard extensions](https://help.tableau.com/current/server/en-us/config_r_tabpy.htm) on sites and, for on premise installations, on servers. With these extensions you can add custom features to a dashboard using JavaScript. Using the extension methods of the Tableau Server REST API you can: - List the settings for extensions of a server or site - Enable or disable extensions or sandboxed extensions for a server or site - List, get, create, and delete entries in server blocked extensions list - List, get, create, update, and delete entries in server allowed (safe) extensions list This functionality relates to the UI elements and concepts described at [Manage Dashboard Settings](https://help.tableau.com/current/server/en-us/dashboard_extensions_server.htm). ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/Use-Postman)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: [Dashboard Extensions Settings Methods - Retired](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-c2c99bc2-1b14-49d1-83d1-76856843e4ea) ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsServerSettingsService_getDashboardExtensionsServerSettings)List settings for dashboard extensions on server - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extension settings of a server. > **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/server/extensions/dashboard https://tableau.example.com/api/-/settings/server/extensions/dashboard ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.ServerSettings+json Copy Expand all Collapse all `{ - "block_list_items": [ - { - "block_list_item_luid": "string", - "url": "string" } ], - "extensions_enabled": true }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsServerSettingsService_updateDashboardExtensionsServerSettings)Update dashboard extensions settings of server - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings for dashboard extensions of a server > **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.extensions.dashboard.v1.ServerSettings+json
Array of objects (tableau.extensions.dashboard.v1.BlockListItem)
extensions_enabled
boolean

Specifies whether sandboxed extensions are allowed to run on the site.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/settings/server/extensions/dashboard https://tableau.example.com/api/-/settings/server/extensions/dashboard ### Request samples - Payload Content type application/vnd.tableau.extensions.dashboard.v1.ServerSettings+json Copy Expand all Collapse all `{ - "block_list_items": [ - { - "block_list_item_luid": "string", - "url": "string" } ], - "extensions_enabled": true }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.ServerSettings+json Copy Expand all Collapse all `{ - "block_list_items": [ - { - "block_list_item_luid": "string", - "url": "string" } ], - "extensions_enabled": true }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsServerSettingsService_getDashboardExtensionsBlockListItems)List blocked dashboard extensions on server - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extensions on the blocked list of a server. > **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/server/extensions/dashboard/blockListItems https://tableau.example.com/api/-/settings/server/extensions/dashboard/blockListItems ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.BlockListItems+json Copy Expand all Collapse all `{ - "block_list_items": [ - { - "block_list_item_luid": "string", - "url": "string" } ] }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsServerSettingsService_createDashboardExtensionsBlockListItem)Block dashboard extension on server - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Adds a dashboard extension to the block list of a server. > **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.extensions.dashboard.v1.BlockListItem+json
block_list_item_luid
string
url
string

Location of the dashboard extension to be blocked from a site.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/settings/server/extensions/dashboard/blockListItems https://tableau.example.com/api/-/settings/server/extensions/dashboard/blockListItems ### Request samples - Payload Content type application/vnd.tableau.extensions.dashboard.v1.BlockListItem+json Copy `{ - "block_list_item_luid": "string", - "url": "string" }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.BlockListItem+json Copy `{ - "block_list_item_luid": "string", - "url": "string" }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsServerSettingsService_deleteDashboardExtensionsBlockListItem)Unblock dashboard extension on server - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Deletes a specific extension from the block list of a server. > **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
block_list_item_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/settings/server/extensions/dashboard/blockListItems/{block\_list\_item\_luid} https://tableau.example.com/api/-/settings/server/extensions/dashboard/blockListItems/{block\_list\_item\_luid} ### Response samples - 400 - 401 - 403 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsServerSettingsService_getDashboardExtensionsBlockListItem)Get blocked dashboard extension on server - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Gets the details of a specific dashboard extension on the blocked list of a server. > **Version:** Available in API 3.11 ( Tableau Server 2021.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
block_list_item_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/server/extensions/dashboard/blockListItems/{block\_list\_item\_luid} https://tableau.example.com/api/-/settings/server/extensions/dashboard/blockListItems/{block\_list\_item\_luid} ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.BlockListItem+json Copy `{ - "block_list_item_luid": "string", - "url": "string" }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsSiteSettingsService_getDashboardExtensionsSiteSettings)List dashboard extension settings of site - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extension settings of the site you are signed into. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server or site administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/site/extensions/dashboard https://tableau.example.com/api/-/settings/site/extensions/dashboard ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.SiteSettings+json Copy Expand all Collapse all `{ - "allow_sandboxed": true, - "extensions_enabled": true, - "safe_list_items": [ - { - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" } ] }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsSiteSettingsService_updateDashboardExtensionsSiteSettings)Update dashboard extension settings of site - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings for dashboard extensions for the site you are signed into. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server or site administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.extensions.dashboard.v1.SiteSettings+json
allow_sandboxed
boolean

Specifies whether sandboxed extensions are allowed to run on the site.

extensions_enabled
boolean

Specifies whether extensions are allowed to run on the site.

Array of objects (tableau.extensions.dashboard.v1.SafeListItem)
### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/settings/site/extensions/dashboard https://tableau.example.com/api/-/settings/site/extensions/dashboard ### Request samples - Payload Content type application/vnd.tableau.extensions.dashboard.v1.SiteSettings+json Copy Expand all Collapse all `{ - "allow_sandboxed": true, - "extensions_enabled": true, - "safe_list_items": [ - { - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" } ] }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.SiteSettings+json Copy Expand all Collapse all `{ - "allow_sandboxed": true, - "extensions_enabled": true, - "safe_list_items": [ - { - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" } ] }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsServerSettingsService_getDashboardExtensionsSafeListItems)List allowed dashboard extensions on site - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Lists the dashboard extensions on the safe list of the site you are signed into. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server or site administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/site/extensions/dashboard/safeListItems https://tableau.example.com/api/-/settings/site/extensions/dashboard/safeListItems ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.SafeListItems+json Copy Expand all Collapse all `{ - "safe_list_items": [ - { - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" } ] }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsServerSettingsService_createDashboardExtensionsSafeListItem)Allow dashboard extension on site - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Adds a dashboard extension to the safe list of the site you are signed into. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server or site administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.extensions.dashboard.v1.SafeListItem+json
allow_full_data
boolean

When true, the extension has access to underlying data of a workbook. This setting is only effective when the extension is on the site safe list. Default is false.

prompt_needed
boolean

When true, the user will be prompted to grant an extension access to the underlying data of a workbook. This setting is only effective when the extension is on the site safe list. Default is false.

safe_list_item_luid
string
url
string

Location (URL) of the dashboard extension to be allowed on a site.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/settings/site/extensions/dashboard/safeListItems https://tableau.example.com/api/-/settings/site/extensions/dashboard/safeListItems ### Request samples - Payload Content type application/vnd.tableau.extensions.dashboard.v1.SafeListItem+json Copy `{ - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.SafeListItem+json Copy `{ - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsSiteSettingsService_deleteDashboardExtensionsSafeListItem)Disallow dashboard extension on site - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Deletes a specific dashboard extension from the safe list of the site you are signed into. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Can only be called by users with site or server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
safe_list_item_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} https://tableau.example.com/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} ### Response samples - 400 - 401 - 403 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsSiteSettingsService_getDashboardExtensionsSafeListItem)Get allowed dashboard extension on site - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Gets the details of a specific dashboard extension on the safe list of the site you are signed into. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Can only be called by users with site or server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
safe_list_item_luid
required
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} https://tableau.example.com/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.SafeListItem+json Copy `{ - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" }` ## [](#tag/Dashboard-Extensions-Settings-Methods-Retired/operation/DashboardExtensionsSiteSettingsService_updateDashboardExtensionsSafeListItem)Update settings for allowed dashboard extension on site - Retired in API 3.21 * * * **Retired in API 3.21 (Cloud October 2023 / Server 2023.3)** > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. * * * Updates the settings of a specific dashboard extension in the safe list of the site you are signed into. > **Version:** Available in API 3.11 (Tableau Cloud March 2021 / Server 2021.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Can only be called by users with site or server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [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) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
safe_list_item_luid
required
any
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.extensions.dashboard.v1.SafeListItem+json
allow_full_data
boolean

When true, the extension has access to underlying data of a workbook. This setting is only effective when the extension is on the site safe list. Default is false.

prompt_needed
boolean

When true, the user will be prompted to grant an extension access to the underlying data of a workbook. This setting is only effective when the extension is on the site safe list. Default is false.

safe_list_item_luid
string
url
string

Location (URL) of the dashboard extension to be allowed on a site.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} https://tableau.example.com/api/-/settings/site/extensions/dashboard/safeListItems/{safe\_list\_item\_luid} ### Request samples - Payload Content type application/vnd.tableau.extensions.dashboard.v1.SafeListItem+json Copy `{ - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 500 - 503 Content type application/vnd.tableau.extensions.dashboard.v1.SafeListItem+json Copy `{ - "allow_full_data": true, - "prompt_needed": true, - "safe_list_item_luid": "string", - "url": "string" }` ## [](#tag/Identity-Pools-Methods)Identity Pools Methods Identity pools are an identity management tool that uses provisioning and authentication information to enable user access to Tableau Server. Identity pools enable a more centralized and flexible identity management workflow. For more information, see [Provision and Authenticate Users Using Identity Pools](https://help.tableau.com/current/server-linux/en-us/identity_pools.htm) in the Tableau Server Help. The identity pools methods allow you to: 1. **Provision users** by creating a new local identity store instance. **Note:** Skip this step to use an existing local identity store or the external identity store you configured in TSM during Tableau Server setup. 2. **Set up an authentication method** to authenticate your users to Tableau Server using OpenID Connect (OIDC). 3. **Create an identity pool** that uses the identity store and authentication method you configured. 4. **Add users to an identity pool** using the [Add User to Identity Pool](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#add_user_to_idpool) endpoint using the Tableau REST API. Refer to the Tableau Server Help for [testing](https://help.tableau.com/current/server-linux/en-us/identity_pools_manage.htm#test), [managing](https://help.tableau.com/current/server-linux/en-us/identity_pools_manage.htm#manage), and [troubleshooting](https://help.tableau.com/current/server/en-us/identity_pools_manage.htm#troubleshoot) identity pools. **Note:** Identity pools do not replace the user provisioning and authentication configurations you made during Tableau Server setup. The purpose of identity pools is to complement and support additional user provisioning and authentication options you might need in your organization. ### Prerequisites Before getting started with identity pools, the following requirements must be met: - Integration with an OIDC identity provider (IdP), such as Okta, is already configured - You are running Tableau Server 2023.1 or later - You have performed the [identity migration](https://help.tableau.com/current/server-linux/en-us/identity_migration.htm) if you are running Tableau Server after upgrading from version 2021.4 or earlier - You have performed the steps described at [Step 1: Configure Tableau Server and establish a session](https://help.tableau.com/current/server-linux/en-us/identity_pools_manage.htm#step1) in the Tableau Server Help You can use the [Identity Pools](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-b229dea8-ee9c-4fbb-80d1-7e9153c207ee) Postman collection in the Salesforce Developer's Postman workspace to learn about, develop, and test the methods described. This functionality relates to the concepts and procedures described in the [Set Up and Manage Identity Pools](https://help.tableau.com/current/server/en-us/identity_pools_manage.htm) topic in the Tableau Server Help. ## [](#tag/Identity-Pools-Methods/Use-Postman)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: [Identity Pools (Server-only) Methods](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-7355cbd6-bbd1-4561-bcc8-8d799d3ee8af) ## [](#tag/Identity-Pools-Methods/operation/AuthnService_ListAuthConfigurations)List Authentication Configurations on Server List information about all authentication instances associated with identity pools. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/authn-service/auth-configurations https://tableau.example.com/api/-/authn-service/auth-configurations ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.ListAuthConfigurationsResponse+json Copy Expand all Collapse all `{ - "instances": [ - { - "auth_type": "OIDC", - "created_at": "string", - "id": 0, - "iframed_idp_enabled": false, - "oidc": { - "client_authentication": "CLIENT_SECRET_BASIC", - "client_id": "string", - "client_secret": "string", - "config_url": "string", - "connection_timeout": 0, - "custom_scope": "string", - "enable_slo": false, - "essential_acr_values": "string", - "id_claim": "sub", - "ignore_domain": false, - "ignore_jwk": false, - "prompt": "string", - "read_timeout": 0, - "username_claim": "email", - "voluntary_acr_values": "string" }, - "updated_at": "string" } ] }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_RegisterAuthConfiguration)Create Authentication Configuration Create an instance of OpenID Connect (OIDC) authentication. For more information, see [Step 3: Set up authentication](https://help.tableau.com/current/server/en-us/identity_pools_manage.htm#step3) in the Tableau Server Help. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.authn.v1.RegisterAuthConfigurationRequest+json
auth_type
string
Value: "OIDC"

Required. Authentication type.

iframed_idp_enabled
boolean
Default: false

If true, allows the identity provider (IdP) to authenticate inside of an iFrame. The IdP must disable clickjack protection to allow iFrame presentation.

object (tableau.authn.v1.OidcConfig)
### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/authn-service/auth-configurations https://tableau.example.com/api/-/authn-service/auth-configurations ### Request samples - Payload Content type application/vnd.tableau.authn.v1.RegisterAuthConfigurationRequest+json Copy Expand all Collapse all `{ - "auth_type": "OIDC", - "iframed_idp_enabled": false, - "oidc": { - "client_authentication": "CLIENT_SECRET_BASIC", - "client_id": "string", - "client_secret": "string", - "config_url": "string", - "connection_timeout": 0, - "custom_scope": "string", - "enable_slo": false, - "essential_acr_values": "string", - "id_claim": "sub", - "ignore_domain": false, - "ignore_jwk": false, - "prompt": "string", - "read_timeout": 0, - "username_claim": "email", - "voluntary_acr_values": "string" } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.RegisterAuthConfigurationResponse+json Copy Expand all Collapse all `{ - "auth_configuration": { - "auth_type": "OIDC", - "created_at": "string", - "id": 0, - "iframed_idp_enabled": false, - "oidc": { - "client_authentication": "CLIENT_SECRET_BASIC", - "client_id": "string", - "client_secret": "string", - "config_url": "string", - "connection_timeout": 0, - "custom_scope": "string", - "enable_slo": false, - "essential_acr_values": "string", - "id_claim": "sub", - "ignore_domain": false, - "ignore_jwk": false, - "prompt": "string", - "read_timeout": 0, - "username_claim": "email", - "voluntary_acr_values": "string" }, - "updated_at": "string" } }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_DeleteAuthConfiguration)Delete Authentication Configuration Delete an authentication instance. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
id
required
integer <int32>

Required. Authentication instance ID.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/authn-service/auth-configurations/{id} https://tableau.example.com/api/-/authn-service/auth-configurations/{id} ### Response samples - 400 - 401 - 403 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_UpdateAuthConfiguration)Update Authentication Configuration Update an authentication instance. **Note:** The request body must specify all the required and desired parameters, not jus the parameters you want to update. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
id
required
integer <int32>

Required. Authentication instance ID.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.authn.v1.UpdateAuthConfigurationRequest+json
auth_type
string
Value: "OIDC"

Required. Authentication type.

id
integer <int32>

Required. Authentication instance ID.

iframed_idp_enabled
boolean
Default: false

if true, allows the identity provider (IdP) to authenticate inside of an iFrame. The IdP must disable clickjack protection to allow iFrame presentation.

object (tableau.authn.v1.OidcConfig)
### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/authn-service/auth-configurations/{id} https://tableau.example.com/api/-/authn-service/auth-configurations/{id} ### Request samples - Payload Content type application/vnd.tableau.authn.v1.UpdateAuthConfigurationRequest+json Copy Expand all Collapse all `{ - "auth_type": "OIDC", - "id": 0, - "iframed_idp_enabled": false, - "oidc": { - "client_authentication": "CLIENT_SECRET_BASIC", - "client_id": "string", - "client_secret": "string", - "config_url": "string", - "connection_timeout": 0, - "custom_scope": "string", - "enable_slo": false, - "essential_acr_values": "string", - "id_claim": "sub", - "ignore_domain": false, - "ignore_jwk": false, - "prompt": "string", - "read_timeout": 0, - "username_claim": "email", - "voluntary_acr_values": "string" } }` ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.UpdateAuthConfigurationResponse+json Copy Expand all Collapse all `{ - "auth_configuration": { - "auth_type": "OIDC", - "created_at": "string", - "id": 0, - "iframed_idp_enabled": false, - "oidc": { - "client_authentication": "CLIENT_SECRET_BASIC", - "client_id": "string", - "client_secret": "string", - "config_url": "string", - "connection_timeout": 0, - "custom_scope": "string", - "enable_slo": false, - "essential_acr_values": "string", - "id_claim": "sub", - "ignore_domain": false, - "ignore_jwk": false, - "prompt": "string", - "read_timeout": 0, - "username_claim": "email", - "voluntary_acr_values": "string" }, - "updated_at": "string" } }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_ListIdentityPools)List Identity Pools List all identity pools. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/authn-service/identity-pools https://tableau.example.com/api/-/authn-service/identity-pools ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.ListIdentityPoolsResponse+json Copy Expand all Collapse all `{ - "pools": [ - { - "auth_type": "OIDC", - "auth_type_instance_id": 0, - "created_at": "string", - "description": "string", - "identity_pool_id": { - "value": "string" }, - "identity_pool_name": "string", - "identity_store_instance_id": 0, - "identity_store_type": "LOCAL", - "is_enabled": true, - "updated_at": "string" } ] }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_RegisterIdentityPool)Create Identity Pool Create an identity pool. For more information, see [Step 4: Create an identity pool](https://help.tableau.com/current/server/en-us/identity_pools_manage.htm#step4) in the Tableau Server Help. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.authn.v1.RegisterIdentityPoolRequest+json
auth_type_instance
integer <int32>

Required. ID of the authentication instance to configure with this identity pool.

description
string

Identity pool description displayed to users when they sign in.

identity_store_instance
integer <int32>

Required. ID of the identity store instance to configure with this identity pool.

is_enabled
boolean

Identity pool is enabled by default.

name
string

Required. Identity pool name. Must be unique. This name is visible on the Tableau Server landing page when users sign in.

### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/authn-service/identity-pools https://tableau.example.com/api/-/authn-service/identity-pools ### Request samples - Payload Content type application/vnd.tableau.authn.v1.RegisterIdentityPoolRequest+json Copy `{ - "auth_type_instance": 0, - "description": "string", - "identity_store_instance": 0, - "is_enabled": true, - "name": "string" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.RegisterIdentityPoolResponse+json Copy Expand all Collapse all `{ - "pool": { - "auth_type": "OIDC", - "auth_type_instance_id": 0, - "created_at": "string", - "description": "string", - "identity_pool_id": { - "value": "string" }, - "identity_pool_name": "string", - "identity_store_instance_id": 0, - "identity_store_type": "LOCAL", - "is_enabled": true, - "updated_at": "string" } }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_DeleteIdentityPool)Delete Identity Pool Delete an identity pool. **Important:** In Tableau Server, move users to another identity pool before deleting an identity pool. Users will no longer be able to sign in to Tableau Server unless they are a member of an identity pool. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
uuid
required
string

Required. Identity pool ID.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/authn-service/identity-pools/{uuid} https://tableau.example.com/api/-/authn-service/identity-pools/{uuid} ### Response samples - 400 - 401 - 403 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_FindIdentityPoolByUuid)Get Identity Pool Get information about an identity pool. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
uuid
required
string

Required. Identity pool ID.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/authn-service/identity-pools/{uuid} https://tableau.example.com/api/-/authn-service/identity-pools/{uuid} ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.FindIdentityPoolByUuidResponse+json Copy Expand all Collapse all `{ - "pool": { - "auth_type": "OIDC", - "auth_type_instance_id": 0, - "created_at": "string", - "description": "string", - "identity_pool_id": { - "value": "string" }, - "identity_pool_name": "string", - "identity_store_instance_id": 0, - "identity_store_type": "LOCAL", - "is_enabled": true, - "updated_at": "string" } }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_UpdateIdentityPool)Update Identity Pool Update information about an identity pool. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
uuid
required
string

Required. Identity pool ID.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.authn.v1.UpdateIdentityPoolRequest+json
description
string

Identity pool description displayed to users when they sign in.

is_enabled
boolean

Identity pool is enabled by default.

name
string

Identity pool name. Must be unique. This name is visible on the Tableau Server landing page when users sign in.

uuid
string

Required. Identity pool ID.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. put/api/-/authn-service/identity-pools/{uuid} https://tableau.example.com/api/-/authn-service/identity-pools/{uuid} ### Request samples - Payload Content type application/vnd.tableau.authn.v1.UpdateIdentityPoolRequest+json Copy `{ - "description": "string", - "is_enabled": true, - "name": "string", - "uuid": "string" }` ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.UpdateIdentityPoolResponse+json Copy Expand all Collapse all `{ - "pool": { - "auth_type": "OIDC", - "auth_type_instance_id": 0, - "created_at": "string", - "description": "string", - "identity_pool_id": { - "value": "string" }, - "identity_pool_name": "string", - "identity_store_instance_id": 0, - "identity_store_type": "LOCAL", - "is_enabled": true, - "updated_at": "string" } }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_ListIdentityStoresTAG)List Identity Stores List information about all identity store instances used to provision users. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/authn-service/identity-stores https://tableau.example.com/api/-/authn-service/identity-stores ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.ListIdentityStoresResponse+json Copy Expand all Collapse all `{ - "instances": [ - { - "created_at": "string", - "display_name": "string", - "id": 0, - "name": "string", - "type": "LOCAL", - "updated_at": "string" } ] }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_RegisterIdentityStoreTAG)Configure Identity Store Configure a new local identity store to provision users. For more information, see [Step 2: Set up an identity store](https://help.tableau.com/current/server/en-us/identity_pools_manage.htm#step2) in the Tableau Server Help. **Note:** This identity store is in addition to the identity store you configured during Tableau Server setup. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.authn.v1.RegisterIdentityStoreRequest+json
display_name
string

Identity store display name.

name
string

Required. Identity store name. Must be unique.

type
string
Value: "0"

Required. Identity store type used to provision users. Use 0 to configure a new local identity store. Note: Configuring a new identity store of type Active Directory or LDAP is not supported.

### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/authn-service/identity-stores https://tableau.example.com/api/-/authn-service/identity-stores ### Request samples - Payload Content type application/vnd.tableau.authn.v1.RegisterIdentityStoreRequest+json Copy `{ - "display_name": "string", - "name": "string", - "type": "0" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.authn.v1.RegisterIdentityStoreResponse+json Copy Expand all Collapse all `{ - "store_instance": { - "created_at": "string", - "display_name": "string", - "id": 0, - "name": "string", - "type": "LOCAL", - "updated_at": "string" } }` ## [](#tag/Identity-Pools-Methods/operation/AuthnService_DeleteIdentityStoreTAG)Delete Identity Store Delete an identity store. **Important:** You cannot delete the identity store you configured during Tableau Server setup. > **Version:** Available in API 3.19 (Tableau Server 2023.1) and later. Not available for Tableau Cloud. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** This method can only be called by users with server administrator permissions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** Not available. > _Access Scopes Overview: [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) | [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm)_ ##### path Parameters
id
required
integer <int32>

Required. Identity store ID.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **403** Server or site administrator permissions are required for this request. **404** Invalid request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/authn-service/identity-stores/{id} https://tableau.example.com/api/-/authn-service/identity-stores/{id} ### Response samples - 400 - 401 - 403 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Pulse-Methods)Pulse Methods With Tableau Pulse, Tableau Cloud users can follow metrics and use guided exploration to understand more about their data. In addition to viewing metrics from the Tableau Pulse home page, users can receive digests via Slack or email that include insights into important changes in their data so users can stay up to date. ### Tableau Pulse Overview - A **metric definition** specifies the metadata for all related metrics created using the definition. This includes the data source, measure, time dimension, and which data source dimensions can be filtered by users or programmatically to create related metrics. - Example: A metric definition might specify that the data source is the Superstore sales database, and that the measure to focus on is the aggregation "sum of sales". It could define the filterable dimensions as region and product line, that the time dimension for analysis is order date, and that the favorable direction is for the metric to increase. - A **metric** is the interactive object that users follow and receive updates on. It specifies the values to give the filterable dimensions of the metric's definition and the measurement time period of the metric. - Example: A user or REST request could filter the metric, and its automatically generated insights, based on the West region and product line sold. The insight provided might call out that discounted sales have risen sharply in a region between last quarter and the current one. - A user who follows (has a **subscription** to) a metric can receive digests via email or Slack. Digests can also be viewed in the Metrics home page in the Tableau UI. - A digest provides summary visualizations and text describing the top **insight**s for a metric. It also displays links to further metric details and to suggested follow up questions based on the metric's data and insights. - An **insight** is a data-driven observation about a metric. Tableau automatically generates and ranks insights by usefulness. - An **insight bundle** is a collection of insights for a metric That can be configured to include various elements. For more information and to learn about the UI features related to these methods, see [Create Pulse Metrics](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm). ### Configuring Pulse insights for a metric You can use Pulse REST API methods to generate an insight bundle for a metric. An insight bundle request specifies the metric being analyzed, the output format (text or HTML), time frame, and additional filters for the insights in the bundle. #### Standard bundle types In the request, you configure the type of insight **bundle** that should be provided for a metric. Types include: - `ban` - Shows the current aggregated value for a metric, period over period change, and the highest ranked insight for each filterable dimension of the metric. - `springboard` - Shows the current value, period over period change, and the highest ranked insight for the metric. - `basic` - Similar to a springboard insight, but data is focused on the dimensions of a metric that are low bandwidth because they have small value sets. It shows the current value, period over period change, and the highest ranked insight for the metric for that data. - `exploration` - Focuses on performance trends. Provides insights into the metric’s behavior over time, including summary visualizations of highs, lows, and trends, plus follow-up insights based on top-ranked data. - `breakdown` - Focuses on attribution. Provides detailed breakdowns of the top contributors for each filterable dimension of the metric. #### Legacy bundle type - `detail` - Shows insights on performance over time of the metric, a summary visualization of metric highs and lows and trends, breakdowns of top contributors for each filterable dimension of the metric, and followup insights based on the top ranked insights not already presented. While the `detail` type remains supported, we recommend using a combination of `exploration` and `breakdown` bundles instead. > **Process suggestion:** Bundles are rich and complex objects that can be challenging to build manually. One approach to efficiently create the JSON for a bundle is to use the Tableau user interface to create the form of metric definition and metrics you want to produce programmatically. Then you can navigate to a metric and use your browsers' inspector to view and copy the JSON response for the insight bundle. You can use the JSON directly or as a template in your code. ### Insight types Depending on the type of insight bundle you request and the shape of your data source, some or all of the following types of insights will be returned. | Name | Description | | --- | --- | | Period over Period Change | Shows how a metric has changed between two periods. Highlights the change between a metric value for a recent time range compared to an equivalent time range in a prior period or the past. | | Forecast (Tableau+ license edition required) | `INSIGHT_TYPE_METRIC_FORECAST` Shows the expected values for a metric for the remainder of the period, along with a forecast confidence range. Forecasts are calculated based on historical metric data and appear on the overview chart for a metric only if Tableau Pulse is confident in the forecast. Forecast confidence is affected by data quality, variance, and recency and the number of date periods to be forecast. You can see a low-confidence forecast by using the Ask button on a metric's insights exploration page. | | Concentrated Contribution Alert (Risky Monopoly) | `INSIGHT_TYPE_RISKY_MONOPOLY` Shows when a small number of dimension members make up a majority (50% or more) of the contribution to a metric. Shows dimensions with a concentration of very high values. A risky monopoly is a situation when a small number of dimension members make up a majority (50% or more) of the contribution to a metric. | | Correlated Metrics | `INSIGHT_TYPE_CORRELATED_METRIC` Shows a relationship between two metrics based on candidates that are considered for correlation. | | Top Contributors | `INSIGHT_TYPE_TOP_DIMENSION_MEMBER_MOVERS` Shows the highest values in a dimension for a metric within a given time range. A top contributor is a dimension member that ranks in the top N in contribution to the scoped metric’s value, aggregated on a specified time range. | | Bottom Contributors | `INSIGHT_TYPE_BOTTOM_CONTRIBUTORS` Shows the lowest values in a dimension for a metric within a given time range. A bottom contributor is a dimension member that ranks in the bottom N in contribution to the scoped metric’s value, aggregated on a specified time range. | | Top Drivers | `INSIGHT_TYPE_TOP_DRIVERS` Shows values for dimension members that changed the most in the same direction as the observed change in the metric. Shows the values for a metric that increased the most across a specified time offset. A top driver is a dimension member that ranks in the top N in driving a change in a metric value between two separate but equivalent time ranges. Top drivers are analyzed using metric values from two separate but equivalent time ranges (such as Sales for day of October 2 versus Sales for day of October 3) to look for changes to the contributions in the same direction of the change made by dimension members. | | Top Detractors | `INSIGHT_TYPE_TOP_DETRACTORS` Shows values for dimension members that changed the most in the opposite direction to the observed change in the metric. Shows values for a metric that are most opposed to top drivers decreased the most across a specified time offset. A top detractor is a dimension member that ranks in the bottom N in driving a change in a metric value between two separate but equivalent time ranges. This insight's values oppose the observed change the most. Top detractors are analyzed using metric values from two separate but equivalent time ranges (such as Sales for day of October 2 versus Sales for day of October 3) to look for changes to the contributions in the same direction of the change made by dimension members. | | Unusually High/Low Metric value | `INSIGHT_TYPE_UNUSUAL_CHANGE` Shows unexpected changes in a metric value. Shows when the value of a metric for a given time range is higher or lower than the expected range based on historic observations of the metric. This insight highlights when the value of a metric for a given time range is higher or lower than the expected range based on historic observations of the metric. | | New Trend Detected | `INSIGHT_TYPE_NEW_TREND` Shows new trends that vary significantly from the current trend. This insight communicates the rate of change, direction, and fluctuations for the metric value. | | Outliers | `INSIGHT_TYPE_RECORD_LEVEL_OUTLIERS` Shows values that fell outside of the range of most of the rest of the values for a metric. | | Goal and Threshold Breakdown | `INSIGHT_TYPE_BREAKDOWN_BENCHMARK` Shows the progress to goal or threshold on the breakdown chart for a metric. | | Pace to Goal (Tableau+ license edition required) | `INSIGHT_TYPE_PACE_TO_GOAL` Shows whether a metric with a sum or count aggregation is on track to reach its goal by the end of the period. Requires Forecast insight to be on. Can be turned on or off in the Insights tab in metric definition settings. If you turn off the Forecast insight, the Pace to Goal insight is also turned off. | For more detailed information on the types of insights, see [The Insights Platform and Insight Types in Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_insights_platform_insight_types.htm). ### What do Pulse REST API methods enable? > Metric definitions > > - Create, update, and delete metric definitions > - Get a list of metric definitions for a site > - Get a list of metrics for a metric definition > - Get a specified batch of metric definitions > > Metrics > > - Get the details of a metric > - Get a metric if it exists or create it if it doesn't > - Create, update, and delete a metric > - Get a specified batch of metrics > > Metric Insights > > - Generate a basic insight bundle for a metric > - Generate a springboard insight bundle for a metric > - Generate a detail insight bundle for a metric > > Metric Subscriptions > > - Get the details of a subscription to a metric > - Get a list of subscriptions to a metric for a user > - Create or delete a subscription to a metric > - Update the followers of a metric > - Get a specified batch of subscriptions to a metric > - Create subscriptions for a batch of users or groups to a metric > - Get a count of followers for a specified batch of subscriptions to a metric ## [](#tag/Pulse-Methods/Use-Postman)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: [Pulse Methods](https://www.postman.com/salesforce-developers/workspace/salesforce-developers/folder/12721794-055c50d6-043e-46e4-96ea-ad3351f70778) ## [](#tag/Pulse-Methods/operation/AlertService_ListAlerts)List site alerts List the alerts for the authorized user user on a specified site. > **Version:** Available in API 3.25 (Tableau Cloud March 2025 / Server 2025.1) and later. Not available for Tableau Server. _[Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Any users can list the alerts for sites that they administer. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insights_alerts:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
after
string

If true, only alerts that occur after the time of alert creation will be returned. If false , alerts from the previous 24 hours will be included in returns. Default is false if after is not set.

page_size
integer <int32>

Specifies the number of results in a paged response.

Example:

GET ...//alerts?pageSize=50

Combining Path Parameters:

A page_size expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

page_token
string

Specifies the page of items to be returned from a requested list. The value of page_token for the next page of returns is found in the next_page_token of the current response. If there are no further items to return, the value of next_page_token will be empty.

Example:

GET ...//alerts?pageToken={next_page_value} Combining Path Parameters:

A page_token expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/alerts https://tableau.example.com/api/-/pulse/alerts ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.alertservice.v1.ListAlertsResponse+json Copy Expand all Collapse all `{ - "alerts": [ - { - "alert_info": { - "alert_type": "ALERT_TYPE_UNSPECIFIED", - "metric_name": "string" }, - "create_time": "string", - "delivery_time": "string", - "id": "string", - "metric_id": "string" } ], - "next_page_token": "string", - "offset": 0, - "total_available": 0 }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_ListDefinitions)List metric definitions Lists the metric definitions configured for a site or, optionally, the details and definition for a specific metric. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:insight\_definitions\_metrics:read > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Temporality:** The response includes `definition.specification.temporality` for each returned definition. Definitions created before this field was introduced return `TEMPORALITY_UNSPECIFIED`, which behaves as `TEMPORALITY_OVER_TIME`. ##### query Parameters
enable_sorting
boolean

If True, the metrics will be sorted by the metric name. If false, the metrics will be returned in the order they were requested. The default is False. (Available in API 3.24 (Tableau Cloud December 2024) and later.)

exclude_metrics_without_followers
boolean

Exclude metrics that have no followers.

filter
string

Filter the results to only include metrics that match the filter. The filter is a string that is used to match the metric name. The filter is case insensitive.

metric_id
string

If a metric LUID is specified, only return the definition that is related to the metric, and the details of the metric.

number_of_metrics
integer <int64>

(Required if view is DEFINITION_VIEW_FULL) The number of metrics to return. If not specified, the default is unlimited. (Available in API 3.24 (Tableau Cloud December 2024) and later.)

order_by
string

The sort order of the results. The format is <field> <direction>. The direction can be either asc or desc. The default is asc. (Available in API 3.24 (Tableau Cloud December 2024) and later.)

page_size
integer <int32>

Specifies the number of results in a paged response.

Example:

GET ...//definitions?pageSize=50

Combining Path Parameters: A page_size expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

page_token
string

Specifies the page of items to be returned from a requested list. The value of page_token for the next page of returns is found in the next_page_token of the current response. If there are no further items to return, the value of next_page_token will be empty.

Example:

GET .../definitions?pageToken={next_page_value}

Combining Path Parameters: A page_token expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

view
string
Enum: "DEFINITION_VIEW_UNSPECIFIED" "DEFINITION_VIEW_BASIC" "DEFINITION_VIEW_FULL" "DEFINITION_VIEW_DEFAULT"

The range of metrics to return for a definition. The default is DEFINITION_VIEW_BASIC if not specified.

  • DEFINITION_VIEW_BASIC - Return only the specified metric definition.
  • DEFINITION_VIEW_FULL - Return the metric definition and the specified number of metrics.
  • DEFINITION_VIEW_DEFAULT - Return the metric definition and the default metric.
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/definitions https://tableau.example.com/api/-/pulse/definitions ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.ListDefinitionsResponse+json Copy Expand all Collapse all `{ - "definitions": [ - { - "certification": { - "is_certified": true, - "modified_at": "string", - "modified_by": "string" }, - "comparisons": { - "comparisons": [ - { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } ], - "nestedComparison": { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } }, - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metadata": { - "created_at": "string", - "definition_version": "string", - "description": "string", - "id": "string", - "last_updated_user": { - "id": "string" }, - "metric_version": "string", - "name": "string", - "nestedUser": { - "id": "string" }, - "related_links": [ - { - "link_name": "string", - "link_url": "string" } ], - "schema_version": "string" }, - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "total_metrics": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "next_page_token": "string", - "offset": 0, - "total_available": 0 }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_CreateDefinition)Create metric definition Creates a metric definition. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can create a metric definition as long as the user has **write** and **publish** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_definitions:create`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Temporality:** Use `specification.temporality` to declare whether the metric represents a cumulative aggregation over time (`TEMPORALITY_OVER_TIME`) or a latest point-in-time snapshot (`TEMPORALITY_LATEST_POINT_IN_TIME`). Omitting the field defaults to `TEMPORALITY_OVER_TIME`. Setting `temporality` to `TEMPORALITY_LATEST_POINT_IN_TIME` while `is_running_total` is `true` returns HTTP 400 with error code `metric_validation_point_in_time_running_total_conflict`. Set `is_running_total` to `false` when using point-in-time temporality. ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.metricqueryservice.v1.CreateDefinitionRequest+json
object (tableau.metricqueryservice.types.v1.Certification)
object (tableau.metricqueryservice.types.v1.Comparisons)
Array of objects (tableau.metricqueryservice.types.v1.DatasourceGoalSpecification)
description
string

The description of the metric definition.

object (tableau.metricqueryservice.types.v1.ExtensionOptions)
object (tableau.metricqueryservice.types.v1.InsightsOptions)
name
string

The name of the metric definition.

Array of objects (tableau.metricqueryservice.types.v1.Link)
object (tableau.metricqueryservice.types.v1.RepresentationOptions)
object (tableau.metricqueryservice.types.v1.DefinitionSpecification)
Array of objects (tableau.metricqueryservice.v1.DefinitionTag)

The tags to apply to the metric definition.

### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/definitions https://tableau.example.com/api/-/pulse/definitions ### Request samples - Payload Content type application/vnd.tableau.metricqueryservice.v1.CreateDefinitionRequest+json Copy Expand all Collapse all `{ - "name": "Current Inventory Count", - "specification": { - "datasource": { - "datasource_id": "abc123" }, - "temporality": "TEMPORALITY_LATEST_POINT_IN_TIME", - "is_running_total": false } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.CreateDefinitionResponse+json Copy Expand all Collapse all `{ - "definition": { - "certification": { - "is_certified": true, - "modified_at": "string", - "modified_by": "string" }, - "comparisons": { - "comparisons": [ - { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } ], - "nestedComparison": { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } }, - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metadata": { - "created_at": "string", - "definition_version": "string", - "description": "string", - "id": "string", - "last_updated_user": { - "id": "string" }, - "metric_version": "string", - "name": "string", - "nestedUser": { - "id": "string" }, - "related_links": [ - { - "link_name": "string", - "link_url": "string" } ], - "schema_version": "string" }, - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "total_metrics": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_ListDefinitionTags)Lists all definition tags for the site. Lists all definition tags for the site. Results can be filtered by tag value, definition name, or datasource ID. Each result includes the tag value and a count of how many definitions use it. > **Version:** Available in API 3.29 (Tableau Cloud August 2026) 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)_ > **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_definitions_metrics:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
page_size
integer <int32>

Specifies the number of results in a paged response.

Example:

GET ...//definitions/tags?pageSize=50

Combining Path Parameters:

A page_size expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

page_token
string

Specifies the page of items to be returned from a requested list. The value of page_token for the next page of returns is found in the next_page_token of the current response. If there are no further items to return, the value of next_page_token will be empty.

Example:

GET ...//definitions/tags?pageToken={next_page_value} Combining Path Parameters:

A page_token expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

definition_filter
string
datasource_luid
string
filter
string
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/definitions/tags https://tableau.example.com/api/-/pulse/definitions/tags ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.ListDefinitionTagsResponse+json Copy Expand all Collapse all `{ - "tags": [ - { - "tag": { - "value": "string" }, - "count": 0 } ], - "next_page_token": "string", - "total_available": 0, - "nestedTag": { - "value": "string" }, - "nestedTagResult": { - "tag": { - "value": "string" }, - "count": 0 } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_DeleteDefinition)Delete metric definition Deletes a metric definition. When a definition is deleted, all metrics related to it, and all subscriptions to those metrics are also deleted. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can delete a metric definition as long as the user has **write** and **publish** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_definitions:delete`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
definition_id
required
string

(Required) The LUID of the metric definition.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **201** Successful. delete/api/-/pulse/definitions/{definition\_id} https://tableau.example.com/api/-/pulse/definitions/{definition\_id} ## [](#tag/Pulse-Methods/operation/MetricQueryService_GetDefinition)Get metric definition Gets a metric definition and optionally metrics it contains. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_definitions_metrics:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Temporality:** The response includes `definition.specification.temporality`. Definitions created before this field was introduced return `TEMPORALITY_UNSPECIFIED`, which behaves as `TEMPORALITY_OVER_TIME`. ##### path Parameters
definition_id
required
string

(Required) The LUID of the metric definition.

##### query Parameters
number_of_metrics
integer <int64>

(Required if view is DEFINITION_VIEW_FULL) The number of metrics to return.

view
string
Enum: "DEFINITION_VIEW_UNSPECIFIED" "DEFINITION_VIEW_BASIC" "DEFINITION_VIEW_FULL" "DEFINITION_VIEW_DEFAULT"

The range of metrics to return for a definition. The default is DEFINITION_VIEW_BASIC if not specified.

  • DEFINITION_VIEW_BASIC - Return only the specified metric definition.
  • DEFINITION_VIEW_FULL - Return the metric definition and the specified number of metrics.
  • DEFINITION_VIEW_DEFAULT - Return the metric definition and the default metric."
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/definitions/{definition\_id} https://tableau.example.com/api/-/pulse/definitions/{definition\_id} ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.GetDefinitionResponse+json Copy Expand all Collapse all `{ - "candidate_definitions": [ - { - "certification": { - "is_certified": true, - "modified_at": "string", - "modified_by": "string" }, - "comparisons": { - "comparisons": [ - { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } ], - "nestedComparison": { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } }, - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metadata": { - "created_at": "string", - "definition_version": "string", - "description": "string", - "id": "string", - "last_updated_user": { - "id": "string" }, - "metric_version": "string", - "name": "string", - "nestedUser": { - "id": "string" }, - "related_links": [ - { - "link_name": "string", - "link_url": "string" } ], - "schema_version": "string" }, - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "total_metrics": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "definition": { - "certification": { - "is_certified": true, - "modified_at": "string", - "modified_by": "string" }, - "comparisons": { - "comparisons": [ - { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } ], - "nestedComparison": { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } }, - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metadata": { - "created_at": "string", - "definition_version": "string", - "description": "string", - "id": "string", - "last_updated_user": { - "id": "string" }, - "metric_version": "string", - "name": "string", - "nestedUser": { - "id": "string" }, - "related_links": [ - { - "link_name": "string", - "link_url": "string" } ], - "schema_version": "string" }, - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "total_metrics": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_UpdateDefinition)Update metric definition Updates a metric definition. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can update a metric definition as long as the user has **write** and **publish** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_definitions:update`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Temporality:** Use `specification.temporality` to declare whether the metric represents a cumulative aggregation over time (`TEMPORALITY_OVER_TIME`) or a latest point-in-time snapshot (`TEMPORALITY_LATEST_POINT_IN_TIME`). Omitting the field defaults to `TEMPORALITY_OVER_TIME`. Setting `temporality` to `TEMPORALITY_LATEST_POINT_IN_TIME` while `is_running_total` is `true` returns HTTP 400 with error code `metric_validation_point_in_time_running_total_conflict`. Set `is_running_total` to `false` when using point-in-time temporality. ##### path Parameters
definition_id
required
string

(Required) The LUID of the metric definition.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.metricqueryservice.v1.UpdateDefinitionRequest+json
object (tableau.metricqueryservice.types.v1.Certification)
object (tableau.metricqueryservice.types.v1.Comparisons)
Array of objects (tableau.metricqueryservice.types.v1.DatasourceGoalSpecification)

A list of the datasource goals.

definition_id
string

Required) The LUID of the metric definition.

description
string

The description of the definition.

object (tableau.metricqueryservice.types.v1.ExtensionOptions)
object (tableau.metricqueryservice.types.v1.InsightsOptions)
name
string

The name of the metric definition.

Array of objects (tableau.metricqueryservice.types.v1.Link)

A list of the related links.

object (tableau.metricqueryservice.types.v1.RepresentationOptions)
object (tableau.metricqueryservice.types.v1.DefinitionSpecification)
Array of objects (tableau.metricqueryservice.v1.DefinitionTag)

The tags to apply to the metric definition.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. patch/api/-/pulse/definitions/{definition\_id} https://tableau.example.com/api/-/pulse/definitions/{definition\_id} ### Request samples - Payload Content type application/vnd.tableau.metricqueryservice.v1.UpdateDefinitionRequest+json Copy Expand all Collapse all `{ - "certification": { - "is_certified": true, - "modified_at": "string", - "modified_by": "string" }, - "comparisons": { - "comparisons": [ - { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } ], - "nestedComparison": { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } }, - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "definition_id": "string", - "description": "string", - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "name": "string", - "related_links": [ - { - "link_name": "string", - "link_url": "string" } ], - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "tags": [ - { - "value": "string" } ] }` ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.UpdateDefinitionResponse+json Copy Expand all Collapse all `{ - "definition": { - "certification": { - "is_certified": true, - "modified_at": "string", - "modified_by": "string" }, - "comparisons": { - "comparisons": [ - { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } ], - "nestedComparison": { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } }, - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metadata": { - "created_at": "string", - "definition_version": "string", - "description": "string", - "id": "string", - "last_updated_user": { - "id": "string" }, - "metric_version": "string", - "name": "string", - "nestedUser": { - "id": "string" }, - "related_links": [ - { - "link_name": "string", - "link_url": "string" } ], - "schema_version": "string" }, - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "total_metrics": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_ListMetrics)List metrics in definition Lists the metrics contained in a metric definition. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_definitions_metrics:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
definition_id
required
string

(Required) The LUID of the metric definition.

##### query Parameters
enable_sorting
boolean
exclude_metrics_without_followers
boolean

If True, the metrics will be sorted by the metric name. If false, the metrics will be returned in the order they were requested.

filter
string

Filter the results to only include metrics that match the filter. The filter is a string that is used to match the metric name. The filter is case insensitive.

order_by
string
page_size
integer <int32>

Specifies the number of results in a paged response.

Example:

GET .../subscriptions?pageSize=50

Combining Path Parameters: A page_size expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

page_token
string

Specifies the page of items to be returned from a requested list. The value of page_token for the next page of returns is found in the next_page_token of the current response. If there are no further items to return, the value of next_page_token will be empty.

Example:

GET ...//definitions/{definition_id}/metrics?pageToken={next_page_value}

Combining Path Parameters:

A page_token expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/definitions/{definition\_id}/metrics https://tableau.example.com/api/-/pulse/definitions/{definition\_id}/metrics ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.ListMetricsResponse+json Copy Expand all Collapse all `{ - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "next_page_token": "string", - "offset": 0, - "total_available": 0 }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_BatchGetDefinitions)Batch list metric definitions (few) Deprecated Gets the details of a batch of metric definitions and metrics on a site, specified in a brief comma delimited list of LUIDs. - **_Note:_** In API 3.24 (Tableau Cloud December 2025) and later, this method is deprecated and may be retired in future releases. Instead use the [Batch list metric definitions (many)](#tag/Pulse-Methods/operation/MetricQueryService_BatchGetDefinitionsByPost). That method has the same behavior but supports listing larger batches of definitions. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Can be called by any user, but only returns definitions and metrics that the user has permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_definitions_metrics:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Temporality:** The response includes `definition.specification.temporality` for each returned definition. Definitions created before this field was introduced return `TEMPORALITY_UNSPECIFIED`, which behaves as `TEMPORALITY_OVER_TIME`. ##### query Parameters
definition_ids
string

(Required) The metric definitions to get, formatted as a comma separated list of LUIDs.

number_of_metrics
integer <int64>

(Required if view is DEFINITION_VIEW_FULL) The number of metrics to return.

view
string
Enum: "DEFINITION_VIEW_UNSPECIFIED" "DEFINITION_VIEW_BASIC" "DEFINITION_VIEW_FULL" "DEFINITION_VIEW_DEFAULT"

The range of metrics to return for a definition. The default is DEFINITION_VIEW_BASIC if not specified.

  • DEFINITION_VIEW_BASIC - Return only the specified metric definition.
  • DEFINITION_VIEW_FULL - Return the metric definition and the specified number of metrics.
  • DEFINITION_VIEW_DEFAULT - Return the metric definition and the default metric."
##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/definitions:batchGet https://tableau.example.com/api/-/pulse/definitions:batchGet ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.BatchGetDefinitionsResponse+json Copy Expand all Collapse all `{ - "definitions": [ - { - "certification": { - "is_certified": true, - "modified_at": "string", - "modified_by": "string" }, - "comparisons": { - "comparisons": [ - { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } ], - "nestedComparison": { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } }, - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metadata": { - "created_at": "string", - "definition_version": "string", - "description": "string", - "id": "string", - "last_updated_user": { - "id": "string" }, - "metric_version": "string", - "name": "string", - "nestedUser": { - "id": "string" }, - "related_links": [ - { - "link_name": "string", - "link_url": "string" } ], - "schema_version": "string" }, - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "total_metrics": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "errors": [ - { - "error": "string", - "id": "string" } ] }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_BatchGetDefinitionsByPost)Batch list metric definitions (many) Gets the details of a batch of definitions specified in a comma delimited list of LUIDs. This method is optimized for batches with large numbers of definitions. > **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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)_ > **Permissions:** Any user can make this request but users will see results only for metrics they have permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insights:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Temporality:** The response includes `definition.specification.temporality` for each returned definition. Definitions created before this field was introduced return `TEMPORALITY_UNSPECIFIED`, which behaves as `TEMPORALITY_OVER_TIME`. ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.metricqueryservice.v1.BatchGetDefinitionsByPostRequest+json
definition_ids
Array of strings
number_of_metrics
integer <int64>
view
string
Enum: "DEFINITION_VIEW_UNSPECIFIED" "DEFINITION_VIEW_BASIC" "DEFINITION_VIEW_FULL" "DEFINITION_VIEW_DEFAULT"
### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/definitions:batchGet https://tableau.example.com/api/-/pulse/definitions:batchGet ### Request samples - Payload Content type application/vnd.tableau.metricqueryservice.v1.BatchGetDefinitionsByPostRequest+json Copy Expand all Collapse all `{ - "definition_ids": [ - "string" ], - "number_of_metrics": 0, - "view": "DEFINITION_VIEW_UNSPECIFIED" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.BatchGetDefinitionsByPostResponse+json Copy Expand all Collapse all `{ - "definitions": [ - { - "certification": { - "is_certified": true, - "modified_at": "string", - "modified_by": "string" }, - "comparisons": { - "comparisons": [ - { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } ], - "nestedComparison": { - "compare_config": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "index": "string" } }, - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metadata": { - "created_at": "string", - "definition_version": "string", - "description": "string", - "id": "string", - "last_updated_user": { - "id": "string" }, - "metric_version": "string", - "name": "string", - "nestedUser": { - "id": "string" }, - "related_links": [ - { - "link_name": "string", - "link_url": "string" } ], - "schema_version": "string" }, - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "total_metrics": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "errors": [ - { - "error": "string", - "id": "string" } ] }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_GetEntitlements)Get site entitlements Returns entitlements available for a site. If entitlements are True, then Pulse premium features are enabled for the site. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Can be called by any user, but only details about sited the user has permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:entitlements:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. get/api/-/pulse/entitlements https://tableau.example.com/api/-/pulse/entitlements ### Response samples - 200 - 400 - 401 - 404 - 500 Content type application/vnd.tableau.metricqueryservice.v1.GetEntitlementsResponse+json Copy Expand all Collapse all `{ - "entitlements": [ - { - "enabled": true, - "entitlement_type": "ENTITLEMENT_TYPE_UNSPECIFIED" } ] }` ## [](#tag/Pulse-Methods/operation/ImageService_GenerateMetricCardImage)Generate metric card image Generates a PNG image of a Pulse metric card with full visual parity to the web UI homepage. - **Response Size:** Typically ~200KB. - **Performance:** Expected latency is 500ms to 1.5s per request. - **Stateless Design:** The endpoint is stateless and requires all data in the request payload. - **Security:** No JavaScript execution occurs in the rendering process. - **Image Format:** PNG only. **Client Requirements** To make a successful request, API clients must: - Gather insight bundle data from the springboard bundle (`viz`, `insights`). - Optionally gather alerts from the alerts service. - Optionally gather data source labels from the labels endpoint. - Provide complete metric metadata. **Notes** - Response size and latency are approximate and may vary by metric complexity, insight content volume, and rendering inputs. - Larger or more complex payloads may result in bigger images and longer processing times. > **Version:** Available in API 3.29 (Tableau Cloud June 2026) 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)_ > **Permissions:** Can be called by any user. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insights:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.imageservice.v1.GenerateMetricCardImageRequest+json
required
object (tableau.imageservice.v1.GenerateMetricCardImageRequest.Input)
object (tableau.imageservice.v1.GenerateMetricCardImageRequest.Settings)

Customization options for metric card image generation.

object (tableau.imageservice.v1.GenerateMetricCardImageRequest.Settings)

Customization options for metric card image generation.

object (tableau.imageservice.v1.GenerateMetricCardImageRequest.Input)
### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/images/metricCard https://tableau.example.com/api/-/pulse/images/metricCard ### Request samples - Payload Content type application/vnd.tableau.imageservice.v1.GenerateMetricCardImageRequest+json Copy Expand all Collapse all `{ - "input": { - "metricMetadata": { - "definitionName": "Test Metric", - "measurementPeriod": { - "granularity": "GRANULARITY_BY_MONTH", - "range": "RANGE_LAST_COMPLETE" }, - "filters": [ - { - "field": "department", - "operator": "EQUALS", - "categorical_values": [ - { - "string_value": "Sales" } ] } ] }, - "alerts": [ ], - "dataSourceLabels": [ ], - "viz": { }, - "insights": { - "popc": { - "facts": { }, - "markup": "" }, - "top": { - "facts": { }, - "markup": "" } } }, - "settings": { - "scale": "METRIC_CARD_IMAGE_SCALE_CSS", - "language": "en-US" } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.imageservice.v1.GenerateMetricCardImageResponse+json Copy `{ - "content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==" }` ## [](#tag/Pulse-Methods/operation/PulseInsightsService_GenerateInsightBundleBAN)Generate current metric value insight bundle Generates a bundle the current aggregated value for each metric. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insights:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBANRequest+json
object (tableau.pulse.insightsservice.v1.GenerateInsightBundleRequest)
### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/insights/ban https://tableau.example.com/api/-/pulse/insights/ban ### Request samples - Payload Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBANRequest+json Copy Expand all Collapse all `{ - "bundle_request": { - "input": { - "metadata": { - "definition_id": "string", - "metric_id": "string", - "name": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] }, - "metric": { - "candidates": [ - { - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - null ] } ] }, - "id": "string", - "name": "string", - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" } } ], - "definition": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "goals": { - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "metric_goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "target": { - "name": "string", - "value": 0 } }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metric_specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" } } }, - "options": { - "language": "LANGUAGE_UNSPECIFIED", - "locale": "LOCALE_UNSPECIFIED", - "now": "string", - "output_format": "OUTPUT_FORMAT_UNSPECIFIED", - "score_weights": { - "certainty_score": 0, - "impact_score": 0, - "relevance_score": 0 }, - "time_zone": "string" }, - "version": 0 } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBANResponse+json Copy Expand all Collapse all `{ - "bundle_response": { - "error": { - "code": "string", - "message": "string" }, - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "has_errors": true, - "insight_groups": [ - { - "error": { - "code": "string", - "message": "string" }, - "insights": [ - { - "error": { - "code": "string", - "message": "string" }, - "insight_type": "string", - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "content": "string", - "facts": { - "fields": { - "property1": null, - "property2": null } }, - "generation_id": "string", - "id": "string", - "insight_feedback_metadata": { - "candidate_definition_id": "string", - "dimension_hash": "string", - "score": 0, - "type": "string" }, - "markup": "string", - "question": "string", - "score": 0, - "table": { - "columns": [ - null ], - "rows": [ - null ] }, - "type": "string", - "version": 0, - "viz": { - "fields": { - "property1": null, - "property2": null } }, - "resolved_analysis_time": { - "time_period": "string", - "comparison_time_period": "string" } }, - "skip_details": { - "reason": "INSIGHT_SKIPPED_REASON_UNSPECIFIED" } } ], - "summaries": [ - { - "error": { - "code": "string", - "message": "string" }, - "result": { - "generation_id": "string", - "id": "string", - "last_attempted_timestamp": "string", - "markup": "string", - "timestamp": "string", - "viz": { - "fields": { - "property1": null, - "property2": null } } } } ], - "type": "string" } ] } } }` ## [](#tag/Pulse-Methods/operation/PulseInsightsService_GenerateInsightBundleBasic)Generate basic insight bundle Generates a basic insight bundle. > **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insights:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBasicRequest+json
object (tableau.pulse.insightsservice.v1.GenerateInsightBundleRequest)
### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/insights/basic https://tableau.example.com/api/-/pulse/insights/basic ### Request samples - Payload Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBasicRequest+json Copy Expand all Collapse all `{ - "bundle_request": { - "input": { - "metadata": { - "definition_id": "string", - "metric_id": "string", - "name": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] }, - "metric": { - "candidates": [ - { - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - null ] } ] }, - "id": "string", - "name": "string", - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" } } ], - "definition": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "goals": { - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "metric_goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "target": { - "name": "string", - "value": 0 } }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metric_specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" } } }, - "options": { - "language": "LANGUAGE_UNSPECIFIED", - "locale": "LOCALE_UNSPECIFIED", - "now": "string", - "output_format": "OUTPUT_FORMAT_UNSPECIFIED", - "score_weights": { - "certainty_score": 0, - "impact_score": 0, - "relevance_score": 0 }, - "time_zone": "string" }, - "version": 0 } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBasicResponse+json Copy Expand all Collapse all `{ - "bundle_response": { - "error": { - "code": "string", - "message": "string" }, - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "has_errors": true, - "insight_groups": [ - { - "error": { - "code": "string", - "message": "string" }, - "insights": [ - { - "error": { - "code": "string", - "message": "string" }, - "insight_type": "string", - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "content": "string", - "facts": { - "fields": { - "property1": null, - "property2": null } }, - "generation_id": "string", - "id": "string", - "insight_feedback_metadata": { - "candidate_definition_id": "string", - "dimension_hash": "string", - "score": 0, - "type": "string" }, - "markup": "string", - "question": "string", - "score": 0, - "table": { - "columns": [ - null ], - "rows": [ - null ] }, - "type": "string", - "version": 0, - "viz": { - "fields": { - "property1": null, - "property2": null } }, - "resolved_analysis_time": { - "time_period": "string", - "comparison_time_period": "string" } }, - "skip_details": { - "reason": "INSIGHT_SKIPPED_REASON_UNSPECIFIED" } } ], - "summaries": [ - { - "error": { - "code": "string", - "message": "string" }, - "result": { - "generation_id": "string", - "id": "string", - "last_attempted_timestamp": "string", - "markup": "string", - "timestamp": "string", - "viz": { - "fields": { - "property1": null, - "property2": null } } } } ], - "type": "string" } ] } } }` ## [](#tag/Pulse-Methods/operation/PulseInsightsService_GenerateInsightBundleBreakdown)Generate breakdown insight bundle Generates a breakdown insight bundle. This provides the BAN and breakdown groups of insights. > **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insights:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBreakdownRequest+json
object (tableau.pulse.insightsservice.v1.GenerateInsightBundleRequest)
### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/insights/breakdown https://tableau.example.com/api/-/pulse/insights/breakdown ### Request samples - Payload Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBreakdownRequest+json Copy Expand all Collapse all `{ - "bundle_request": { - "input": { - "metadata": { - "definition_id": "string", - "metric_id": "string", - "name": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] }, - "metric": { - "candidates": [ - { - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - null ] } ] }, - "id": "string", - "name": "string", - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" } } ], - "definition": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "goals": { - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "metric_goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "target": { - "name": "string", - "value": 0 } }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metric_specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" } } }, - "options": { - "language": "LANGUAGE_UNSPECIFIED", - "locale": "LOCALE_UNSPECIFIED", - "now": "string", - "output_format": "OUTPUT_FORMAT_UNSPECIFIED", - "score_weights": { - "certainty_score": 0, - "impact_score": 0, - "relevance_score": 0 }, - "time_zone": "string" }, - "version": 0 } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleBreakdownResponse+json Copy Expand all Collapse all `{ - "bundle_response": { - "error": { - "code": "string", - "message": "string" }, - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "has_errors": true, - "insight_groups": [ - { - "error": { - "code": "string", - "message": "string" }, - "insights": [ - { - "error": { - "code": "string", - "message": "string" }, - "insight_type": "string", - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "content": "string", - "facts": { - "fields": { - "property1": null, - "property2": null } }, - "generation_id": "string", - "id": "string", - "insight_feedback_metadata": { - "candidate_definition_id": "string", - "dimension_hash": "string", - "score": 0, - "type": "string" }, - "markup": "string", - "question": "string", - "score": 0, - "table": { - "columns": [ - null ], - "rows": [ - null ] }, - "type": "string", - "version": 0, - "viz": { - "fields": { - "property1": null, - "property2": null } }, - "resolved_analysis_time": { - "time_period": "string", - "comparison_time_period": "string" } }, - "skip_details": { - "reason": "INSIGHT_SKIPPED_REASON_UNSPECIFIED" } } ], - "summaries": [ - { - "error": { - "code": "string", - "message": "string" }, - "result": { - "generation_id": "string", - "id": "string", - "last_attempted_timestamp": "string", - "markup": "string", - "timestamp": "string", - "viz": { - "fields": { - "property1": null, - "property2": null } } } } ], - "type": "string" } ] } } }` ## [](#tag/Pulse-Methods/operation/EmbeddingsService_GenerateInsightBrief)Generate insight brief Generates an insight brief based on a user utterance by gathering insights for the specified metrics. For supplemental information, see _[Using Pulse Generate Insight Brief](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_pulse_brief.htm)_. > **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_brief:create`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.embeddingsservice.v1.GenerateInsightBriefRequest+json
language
string
Enum: "LANGUAGE_UNSPECIFIED" "LANGUAGE_DE_DE" "LANGUAGE_EN_US" "LANGUAGE_EN_GB" "LANGUAGE_ES_ES" "LANGUAGE_FR_FR" "LANGUAGE_FR_CA" "LANGUAGE_GA_IE" "LANGUAGE_IT_IT" "LANGUAGE_JA_JP" "LANGUAGE_KO_KR" "LANGUAGE_NL_NL" "LANGUAGE_PT_BR" "LANGUAGE_SV_SE" "LANGUAGE_TH_TH" "LANGUAGE_ZH_CN" "LANGUAGE_ZH_TW"

The language of the insight brief.

locale
string
Enum: "LOCALE_UNSPECIFIED" "LOCALE_AR_AE" "LOCALE_AR_BH" "LOCALE_AR_DZ" "LOCALE_AR_EG" "LOCALE_AR_IQ" "LOCALE_AR_JO" "LOCALE_AR_KW" "LOCALE_AR_LB" "LOCALE_AR_LY" "LOCALE_AR_MA" "LOCALE_AR_OM" "LOCALE_AR_QA" "LOCALE_AR_SA" "LOCALE_AR_SD" "LOCALE_AR_SY" "LOCALE_AR_TN" "LOCALE_AR_YE" "LOCALE_BE_BY" "LOCALE_BG_BG" "LOCALE_CA_ES" "LOCALE_CS_CZ" "LOCALE_DA_DK" "LOCALE_DE_AT" "LOCALE_DE_CH" "LOCALE_DE_DE" "LOCALE_DE_LU" "LOCALE_EL_CY" "LOCALE_EL_GR" "LOCALE_EN_AU" "LOCALE_EN_CA" "LOCALE_EN_GB" "LOCALE_EN_IE" "LOCALE_EN_IN" "LOCALE_EN_MT" "LOCALE_EN_NZ" "LOCALE_EN_PH" "LOCALE_EN_SG" "LOCALE_EN_US" "LOCALE_EN_ZA" "LOCALE_ES_AR" "LOCALE_ES_BO" "LOCALE_ES_CL" "LOCALE_ES_CO" "LOCALE_ES_CR" "LOCALE_ES_DO" "LOCALE_ES_EC" "LOCALE_ES_ES" "LOCALE_ES_GT" "LOCALE_ES_HN" "LOCALE_ES_MX" "LOCALE_ES_NI" "LOCALE_ES_PA" "LOCALE_ES_PE" "LOCALE_ES_PR" "LOCALE_ES_PY" "LOCALE_ES_SV" "LOCALE_ES_US" "LOCALE_ES_UY" "LOCALE_ES_VE" "LOCALE_ET_EE" "LOCALE_FI_FI" "LOCALE_FR_BE" "LOCALE_FR_CA" "LOCALE_FR_CH" "LOCALE_FR_FR" "LOCALE_FR_LU" "LOCALE_GA_IE" "LOCALE_HE_IL" "LOCALE_HI_IN" "LOCALE_HR_HR" "LOCALE_HU_HU" "LOCALE_ID_ID" "LOCALE_IN_ID" "LOCALE_IS_IS" "LOCALE_IT_CH" "LOCALE_IT_IT" "LOCALE_IW_IL" "LOCALE_JA_JP" "LOCALE_KO_KR" "LOCALE_LT_LT" "LOCALE_LV_LV" "LOCALE_MK_MK" "LOCALE_MS_MY" "LOCALE_MT_MT" "LOCALE_NL_BE" "LOCALE_NL_NL" "LOCALE_NB_NO" "LOCALE_NO_NO" "LOCALE_PL_PL" "LOCALE_PT_BR" "LOCALE_PT_PT" "LOCALE_RO_RO" "LOCALE_RU_RU" "LOCALE_SK_SK" "LOCALE_SL_SI" "LOCALE_SQ_AL" "LOCALE_SR_BA" "LOCALE_SR_ME" "LOCALE_SR_RS" "LOCALE_SV_SE" "LOCALE_TH_TH" "LOCALE_TR_TR" "LOCALE_UK_UA" "LOCALE_VI_VN" "LOCALE_ZH_CN" "LOCALE_ZH_HK" "LOCALE_ZH_SG" "LOCALE_ZH_TW"

The locale of the insight brief. Defaults to LOCALE_EN_US.

Array of objects (tableau.pulse.embeddingsservice.v1.Message)

The definition of the content of the insight brief.

now
string

If specified, the date/time to use as current for insight analysis. If empty the current date/time is used. The format should be YYYY-MM-DD HH:MM:SS or YYYY-MM-DD or empty. If no time is specified, then midnight (00:00:00) is used.

time_zone
string

The time zone to use for insight analysis. If empty, UTC is used. For more information on valid values see the List of tz database time zones

### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. **default** Successful. post/api/-/pulse/insights/brief https://tableau.example.com/api/-/pulse/insights/brief ### Request samples - Payload Content type application/vnd.tableau.pulse.embeddingsservice.v1.GenerateInsightBriefRequest+json Copy Expand all Collapse all `{ - "language": "LANGUAGE_UNSPECIFIED", - "locale": "LOCALE_UNSPECIFIED", - "messages": [ - { - "action_type": "ACTION_TYPE_UNDEFINED", - "content": "string", - "metric_group_context": [ - { - "metadata": { - "definition_id": "string", - "metric_id": "string", - "name": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] }, - "metric": { - "candidates": [ - { - "extension_options": { - "allowed_dimensions": [ - null ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - null ], - "custom_calendar": { - "day_of_year_field": null, - "month_name_field": null, - "month_of_year_field": null, - "quarter_field": null, - "reference_date_field": null, - "week_of_year_field": null, - "year_field": null }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - null ] }, - "id": "string", - "name": "string", - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": null, - "singular_noun": null }, - "nestedRowLevelEntityNames": { - "entity_name_plural": null, - "entity_name_singular": null }, - "nestedRowLevelIDField": { - "identifier_col": null, - "identifier_label": null }, - "nestedRowLevelNameField": { - "name_col": null }, - "number_units": { - "plural_noun": null, - "singular_noun": null }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": null, - "entity_name_singular": null }, - "row_level_id_field": { - "identifier_col": null, - "identifier_label": null }, - "row_level_name_field": { - "name_col": null }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": null }, - "basic_specification": { - "filters": [ ], - "measure": null, - "time_dimension": null }, - "datasource": { - "id": null, - "id_type": null, - "vizql_session_id": null }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": null }, - "temporality": "TEMPORALITY_UNSPECIFIED" } } ], - "definition": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - null ] } ] }, - "goals": { - "datasource_goals": [ - { - "basic_specification": { - "filters": [ ], - "measure": null, - "time_dimension": null }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ ], - "measure": null, - "time_dimension": null }, - "threshold_viz_state_specification": { - "viz_state_string": null }, - "viz_state_specification": { - "viz_state_string": null } } ], - "metric_goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "target": { - "name": "string", - "value": 0 } }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": null }, - "contributors_options": { - "limit": null }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metric_specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": null, - "granularity": null, - "reference_time": null } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - null ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - null ], - "condition_filter": { - "field": null, - "context": null, - "condition": null, - "calculation": null }, - "match_filter": { - "field": null, - "context": null, - "contains": null, - "starts_with": null, - "ends_with": null, - "exclude": null }, - "quantitative_date_filter": { - "min_date": null, - "max_date": null, - "field": null, - "context": null, - "quantitative_filter_type": null, - "include_nulls": null }, - "quantitative_numerical_filter": { - "min": null, - "max": null, - "field": null, - "context": null, - "quantitative_filter_type": null, - "include_nulls": null }, - "relative_date_filter": { - "field": null, - "context": null, - "period_type": null, - "date_range_type": null, - "range_n": null, - "anchor_date": null, - "include_nulls": null }, - "set_filter": { - "values": [ ], - "exclude": null, - "field": null, - "context": null }, - "top_n_filter": { - "field": null, - "context": null, - "direction": null, - "how_many": null, - "field_to_measure": null } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" } } } ], - "metric_group_context_resolved": true, - "role": "ROLE_UNDEFINED" } ], - "now": "string", - "time_zone": "string" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 - default Content type application/vnd.tableau.pulse.embeddingsservice.v1.GenerateInsightBriefResponse+json Copy Expand all Collapse all `{ - "follow_up_questions": [ - { - "content": "string", - "metric_group_context_resolved": true } ], - "generation_id": "string", - "group_context": [ - { - "metadata": { - "definition_id": "string", - "metric_id": "string", - "name": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] }, - "metric": { - "candidates": [ - { - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - null ] } ] }, - "id": "string", - "name": "string", - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" } } ], - "definition": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "goals": { - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "metric_goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "target": { - "name": "string", - "value": 0 } }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metric_specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" } } } ], - "markup": "string", - "not_enough_information": true, - "source_insights": [ - { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "content": "string", - "facts": { - "fields": { - "property1": null, - "property2": null } }, - "generation_id": "string", - "id": "string", - "insight_feedback_metadata": { - "candidate_definition_id": "string", - "dimension_hash": "string", - "score": 0, - "type": "string" }, - "markup": "string", - "question": "string", - "score": 0, - "table": { - "columns": [ - { - "label": "string" } ], - "rows": [ - { - "entries": [ - { - "error": { - "code": "string", - "message": "string" }, - "value": { - "formatted_value": "string" } } ] } ] }, - "type": "string", - "version": 0, - "viz": { - "fields": { - "property1": null, - "property2": null } }, - "resolved_analysis_time": { - "time_period": "string", - "comparison_time_period": "string" } } ] }` ## [](#tag/Pulse-Methods/operation/PulseInsightsService_GenerateInsightBundleDetail)Generate detail insight bundle Generates a detail insight bundle. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. For the [usage-based licensing model](https://help.tableau.com/current/online/en-us/license_product_keys.htm#usagebased-license-model), each call to this method counts as an analytical impression. > **Access Scope:** `tableau:insights:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleDetailRequest+json
object (tableau.pulse.insightsservice.v1.GenerateInsightBundleRequest)
### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/insights/detail https://tableau.example.com/api/-/pulse/insights/detail ### Request samples - Payload Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleDetailRequest+json Copy Expand all Collapse all `{ - "bundle_request": { - "input": { - "metadata": { - "definition_id": "string", - "metric_id": "string", - "name": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] }, - "metric": { - "candidates": [ - { - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - null ] } ] }, - "id": "string", - "name": "string", - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" } } ], - "definition": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "goals": { - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "metric_goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "target": { - "name": "string", - "value": 0 } }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metric_specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" } } }, - "options": { - "language": "LANGUAGE_UNSPECIFIED", - "locale": "LOCALE_UNSPECIFIED", - "now": "string", - "output_format": "OUTPUT_FORMAT_UNSPECIFIED", - "score_weights": { - "certainty_score": 0, - "impact_score": 0, - "relevance_score": 0 }, - "time_zone": "string" }, - "version": 0 } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleDetailResponse+json Copy Expand all Collapse all `{ - "bundle_response": { - "error": { - "code": "string", - "message": "string" }, - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "has_errors": true, - "insight_groups": [ - { - "error": { - "code": "string", - "message": "string" }, - "insights": [ - { - "error": { - "code": "string", - "message": "string" }, - "insight_type": "string", - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "content": "string", - "facts": { - "fields": { - "property1": null, - "property2": null } }, - "generation_id": "string", - "id": "string", - "insight_feedback_metadata": { - "candidate_definition_id": "string", - "dimension_hash": "string", - "score": 0, - "type": "string" }, - "markup": "string", - "question": "string", - "score": 0, - "table": { - "columns": [ - null ], - "rows": [ - null ] }, - "type": "string", - "version": 0, - "viz": { - "fields": { - "property1": null, - "property2": null } }, - "resolved_analysis_time": { - "time_period": "string", - "comparison_time_period": "string" } }, - "skip_details": { - "reason": "INSIGHT_SKIPPED_REASON_UNSPECIFIED" } } ], - "summaries": [ - { - "error": { - "code": "string", - "message": "string" }, - "result": { - "generation_id": "string", - "id": "string", - "last_attempted_timestamp": "string", - "markup": "string", - "timestamp": "string", - "viz": { - "fields": { - "property1": null, - "property2": null } } } } ], - "type": "string" } ] } } }` ## [](#tag/Pulse-Methods/operation/PulseInsightsService_GenerateInsightBundleExploration)Generate exploration insight bundle Generates an exploration insight bundle. This provides the BAN, anchor, and followup groups of insights. > **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insights:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleExplorationRequest+json
object (tableau.pulse.insightsservice.v1.GenerateInsightBundleRequest)
### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/insights/exploration https://tableau.example.com/api/-/pulse/insights/exploration ### Request samples - Payload Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleExplorationRequest+json Copy Expand all Collapse all `{ - "bundle_request": { - "input": { - "metadata": { - "definition_id": "string", - "metric_id": "string", - "name": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] }, - "metric": { - "candidates": [ - { - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - null ] } ] }, - "id": "string", - "name": "string", - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" } } ], - "definition": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "goals": { - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "metric_goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "target": { - "name": "string", - "value": 0 } }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metric_specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" } } }, - "options": { - "language": "LANGUAGE_UNSPECIFIED", - "locale": "LOCALE_UNSPECIFIED", - "now": "string", - "output_format": "OUTPUT_FORMAT_UNSPECIFIED", - "score_weights": { - "certainty_score": 0, - "impact_score": 0, - "relevance_score": 0 }, - "time_zone": "string" }, - "version": 0 } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleExplorationResponse+json Copy Expand all Collapse all `{ - "bundle_response": { - "error": { - "code": "string", - "message": "string" }, - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "has_errors": true, - "insight_groups": [ - { - "error": { - "code": "string", - "message": "string" }, - "insights": [ - { - "error": { - "code": "string", - "message": "string" }, - "insight_type": "string", - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "content": "string", - "facts": { - "fields": { - "property1": null, - "property2": null } }, - "generation_id": "string", - "id": "string", - "insight_feedback_metadata": { - "candidate_definition_id": "string", - "dimension_hash": "string", - "score": 0, - "type": "string" }, - "markup": "string", - "question": "string", - "score": 0, - "table": { - "columns": [ - null ], - "rows": [ - null ] }, - "type": "string", - "version": 0, - "viz": { - "fields": { - "property1": null, - "property2": null } }, - "resolved_analysis_time": { - "time_period": "string", - "comparison_time_period": "string" } }, - "skip_details": { - "reason": "INSIGHT_SKIPPED_REASON_UNSPECIFIED" } } ], - "summaries": [ - { - "error": { - "code": "string", - "message": "string" }, - "result": { - "generation_id": "string", - "id": "string", - "last_attempted_timestamp": "string", - "markup": "string", - "timestamp": "string", - "viz": { - "fields": { - "property1": null, - "property2": null } } } } ], - "type": "string" } ] } } }` ## [](#tag/Pulse-Methods/operation/PulseInsightsService_GenerateInsightBundleSpringboard)Generate springboard insight bundle Generates a springboard insight bundle. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insights:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleSpringboardRequest+json
object (tableau.pulse.insightsservice.v1.GenerateInsightBundleRequest)
### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/insights/springboard https://tableau.example.com/api/-/pulse/insights/springboard ### Request samples - Payload Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleSpringboardRequest+json Copy Expand all Collapse all `{ - "bundle_request": { - "input": { - "metadata": { - "definition_id": "string", - "metric_id": "string", - "name": "string", - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] }, - "metric": { - "candidates": [ - { - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - null ] } ] }, - "id": "string", - "name": "string", - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" }, - "specification": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" } } ], - "definition": { - "abstract_query_specification": { - "abstract_query_string": "string" }, - "basic_specification": { - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "datasource": { - "id": "string", - "id_type": "DATASOURCE_ID_TYPE_UNSPECIFIED", - "vizql_session_id": "string" }, - "is_running_total": true, - "viz_state_specification": { - "viz_state_string": "string" }, - "temporality": "TEMPORALITY_UNSPECIFIED" }, - "extension_options": { - "allowed_dimensions": [ - "string" ], - "allowed_granularities": [ ], - "correlation_candidate_definition_ids": [ - "string" ], - "custom_calendar": { - "day_of_year_field": "string", - "month_name_field": "string", - "month_of_year_field": "string", - "quarter_field": "string", - "reference_date_field": "string", - "week_of_year_field": "string", - "year_field": "string" }, - "items": "GRANULARITY_UNSPECIFIED", - "offset_from_today": 0, - "use_dynamic_offset": true, - "dimension_links": [ - { - "field_id": "string", - "name": "string", - "urls": [ - { - "literal_value": "string", - "field_id": "string" } ] } ] }, - "goals": { - "datasource_goals": [ - { - "basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "benchmark_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "minimum_granularity": "GRANULARITY_UNSPECIFIED", - "name": "string", - "threshold_basic_specification": { - "filters": [ - { - "categorical_values": [ ], - "field": null, - "include_null": null, - "operator": null, - "values": [ ], - "condition_filter": null, - "match_filter": null, - "quantitative_date_filter": null, - "quantitative_numerical_filter": null, - "relative_date_filter": null, - "set_filter": null, - "top_n_filter": null } ], - "measure": { - "aggregation": "AGGREGATION_UNSPECIFIED", - "field": "string" }, - "time_dimension": { - "field": "string" } }, - "threshold_viz_state_specification": { - "viz_state_string": "string" }, - "viz_state_specification": { - "viz_state_string": "string" } } ], - "metric_goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "target": { - "name": "string", - "value": 0 } }, - "insights_options": { - "nestedInsightSetting": { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" }, - "settings": [ - { - "benchmark_breakdown_options": { - "limit": 0 }, - "contributors_options": { - "limit": 0 }, - "disabled": true, - "type": "INSIGHT_TYPE_UNSPECIFIED" } ] }, - "metric_specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": null, - "integer": null, - "date": null, - "boolean": null, - "string": null, - "null": null } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": null }, - "measure_filter_field": { - "field_caption": null, - "function": null }, - "calculated_filter_field": { - "calculation": null } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "representation_options": { - "currency_code": "CURRENCY_CODE_UNSPECIFIED", - "decimal_places": 0, - "nestedNumberUnits": { - "plural_noun": "string", - "singular_noun": "string" }, - "nestedRowLevelEntityNames": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "nestedRowLevelIDField": { - "identifier_col": "string", - "identifier_label": "string" }, - "nestedRowLevelNameField": { - "name_col": "string" }, - "number_units": { - "plural_noun": "string", - "singular_noun": "string" }, - "positive_only": true, - "row_level_entity_names": { - "entity_name_plural": "string", - "entity_name_singular": "string" }, - "row_level_id_field": { - "identifier_col": "string", - "identifier_label": "string" }, - "row_level_name_field": { - "name_col": "string" }, - "sentiment_type": "SENTIMENT_TYPE_UNSPECIFIED", - "type": "NUMBER_FORMAT_TYPE_UNSPECIFIED" } } }, - "options": { - "language": "LANGUAGE_UNSPECIFIED", - "locale": "LOCALE_UNSPECIFIED", - "now": "string", - "output_format": "OUTPUT_FORMAT_UNSPECIFIED", - "score_weights": { - "certainty_score": 0, - "impact_score": 0, - "relevance_score": 0 }, - "time_zone": "string" }, - "version": 0 } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.insightsservice.v1.GenerateInsightBundleSpringboardResponse+json Copy Expand all Collapse all `{ - "bundle_response": { - "error": { - "code": "string", - "message": "string" }, - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "has_errors": true, - "insight_groups": [ - { - "error": { - "code": "string", - "message": "string" }, - "insights": [ - { - "error": { - "code": "string", - "message": "string" }, - "insight_type": "string", - "result": { - "characterization": "CHARACTERIZATION_UNSPECIFIED", - "content": "string", - "facts": { - "fields": { - "property1": null, - "property2": null } }, - "generation_id": "string", - "id": "string", - "insight_feedback_metadata": { - "candidate_definition_id": "string", - "dimension_hash": "string", - "score": 0, - "type": "string" }, - "markup": "string", - "question": "string", - "score": 0, - "table": { - "columns": [ - null ], - "rows": [ - null ] }, - "type": "string", - "version": 0, - "viz": { - "fields": { - "property1": null, - "property2": null } }, - "resolved_analysis_time": { - "time_period": "string", - "comparison_time_period": "string" } }, - "skip_details": { - "reason": "INSIGHT_SKIPPED_REASON_UNSPECIFIED" } } ], - "summaries": [ - { - "error": { - "code": "string", - "message": "string" }, - "result": { - "generation_id": "string", - "id": "string", - "last_attempted_timestamp": "string", - "markup": "string", - "timestamp": "string", - "viz": { - "fields": { - "property1": null, - "property2": null } } } } ], - "type": "string" } ] } } }` ## [](#tag/Pulse-Methods/operation/PulseInsightsService_GetMeasurementPeriods)List metric definition measurement periods Gets the measurement periods for the specified metric definition. > **Version:** Available in API 3.25 (Tableau Cloud March 2025 / Server 2025.1) and later. Not available for Tableau Server. _[Versioning Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ > **Permissions:** Can only be called by users with site or server administrator permissions._[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:content:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ Note that examples of request bodies using both `basic_specification.time_measure` and `viz_state_string` are provided in the right panel. Required fields include: - `definition.datasource.id` (string): The ID of the datasource to use for the metric definition. - Either: - `definition.basic_specification.time_measure` (object): The time measure to use for the metric definition. OR - A valid `viz_state_string` (string): The viz state string to use for the metric definition. Optional fields include: - `extension_options.allowed_granularities` (array): The allowed granularities for the metric definition. - `extension_options.custom_calendar` (object): The custom calendar defined in your data source to use for the metric definition. - `options.offset_from_today` (integer): The offset from today for the metric definition. - `options.now` (string): The current date and time in ISO 8601 format. - `options.time_zone` (string): The time zone to use for the metric definition. - `options.language` (string): The language to use for the metric definition. - `options.locale` (string): The locale to use for the metric definition. > NOTE: Time measure settings can interact with each other, for instance, configuring a custom calendar will override settings that use fiscal time measures. Make sure to carefully check that the results of your configurations are what you expect. ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.insightsservice.v1.GetMeasurementPeriodsRequest+json
object (tableau.pulse.insightsservice.v1.GetMeasurementPeriodsRequest.MeasurementPeriodsInput)
object (tableau.pulse.insightsservice.v1.GetMeasurementPeriodsRequest.MeasurementPeriodsInput)
object (tableau.pulse.insightsservice.v1.GetMeasurementPeriodsRequest.MeasurementPeriodsOptions)
object (tableau.pulse.insightsservice.v1.GetMeasurementPeriodsRequest.MeasurementPeriodsOptions)
### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/measurementPeriods https://tableau.example.com/api/-/pulse/measurementPeriods ### Request samples - Payload Content type application/vnd.tableau.pulse.insightsservice.v1.GetMeasurementPeriodsRequest+json Example Using basic specification time dimensionUsing vizstate specificationUsing basic specification time dimension Copy Expand all Collapse all `{ - "definition": { - "datasource": { - "id": "43c9facf-dd5c-4d14-a64b-dc0d8b1f096c" }, - "basic_specification": { - "time_dimension": { - "field": "Time Dimension" } } }, - "extension_options": { - "allowed_granularities": [ - "GRANULARITY_BY_DAY", - "GRANULARITY_BY_WEEK", - "GRANULARITY_BY_MONTH", - "GRANULARITY_BY_QUARTER", - "GRANULARITY_BY_YEAR" ], - "offset_from_today": 0, - "custom_calendar": { - "day_of_year_field": "Day of Year", - "month_of_year_field": "Month of Year", - "quarter_field": "Quarter", - "week_of_year_field": "Week of Year", - "year_field": "Year", - "reference_date_field": "Reference Date", - "month_name_field": "Month Name" } }, - "now": "2025-02-09", - "time_zone": "UTC", - "language": "LANGUAGE_DE_DE", - "locale": "LOCALE_DE_DE" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.insightsservice.v1.GetMeasurementPeriodsResponse+json Copy Expand all Collapse all `{ - "measurement_periods": [ - { - "error": { - "code": "string", - "message": "string" }, - "info": { - "range": "string" }, - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } } ], - "nestedMeasurementPeriodInfo": { - "range": "string" }, - "nestedMeasurementPeriodResult": { - "error": { - "code": "string", - "message": "string" }, - "info": { - "range": "string" }, - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_CreateMetric)Create metric Creates a metric. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:create`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.metricqueryservice.v1.CreateMetricRequest+json
definition_id
string

(Required) The LUID of the definition.

object (tableau.metricqueryservice.types.v1.MetricSpecification)
### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/metrics https://tableau.example.com/api/-/pulse/metrics ### Request samples - Payload Content type application/vnd.tableau.metricqueryservice.v1.CreateMetricRequest+json Copy Expand all Collapse all `{ - "definition_id": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.CreateMetricResponse+json Copy Expand all Collapse all `{ - "metric": { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_DeleteMetric)Delete metric Deletes a metric. Note: When a definition is created, a default metric is created for it. A default metric can't be deleted, unless its definition is deleted, and trying will result in a '400' error. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can delete a metric from a definition as long as the user has **write** and **publish** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:delete`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
metric_id
required
string

(Required) The LUID of the metric to be deleted.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **201** Successful! **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/pulse/metrics/{metric\_id} https://tableau.example.com/api/-/pulse/metrics/{metric\_id} ### Response samples - 400 - 401 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_GetMetric)Get metric Gets the details of the specified metric. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can update a metric if they have both **write** and **publish** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ As of August 2023 in API 3.23: If a user has both **read** and **connect** permissions, but don't have **write** and **publish** permissions, then they can update the 'goals' field of a metric, but not other fields. > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
metric_id
required
string

(Required) The LUID of the metric to get.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/metrics/{metric\_id} https://tableau.example.com/api/-/pulse/metrics/{metric\_id} ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.GetMetricResponse+json Copy Expand all Collapse all `{ - "metric": { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_UpdateMetric)Update metric Updates the specification of a metric. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **write** and **publish** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:update`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
metric_id
required
string

(Required) The LUID of the metric to be updated.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.metricqueryservice.v1.UpdateMetricRequest+json
object (tableau.metricqueryservice.types.v1.MetricGoals)
metric_id
string
object (tableau.metricqueryservice.types.v1.MetricSpecification)
### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. patch/api/-/pulse/metrics/{metric\_id} https://tableau.example.com/api/-/pulse/metrics/{metric\_id} ### Request samples - Payload Content type application/vnd.tableau.metricqueryservice.v1.UpdateMetricRequest+json Copy Expand all Collapse all `{ - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "metric_id": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } } }` ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.UpdateMetricResponse+json Copy Expand all Collapse all `{ - "metric": { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_CreateTag)Create metric tag for user Creates a tag for the specified metric, for the signed in user. Tags configured for a metric by a user are returned and/or have an impact on Pulse views only for that user. > **Version:** Available in API 3.25 (Tableau Cloud March 2025) 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)_ > **Permissions:** Anyone can make this request but users will see results only for metrics they have permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
metric_id
required
string

The LUID of the metric the tag is is being created for.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.metricqueryservice.v1.CreateTagRequest+json
category
string
Enum: "CATEGORY_UNSPECIFIED" "CATEGORY_USER_DEFINED" "CATEGORY_SYSTEM_DEFINED"
metric_id
string
referrer
string
value
string
### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/metrics/{metric\_id}/tag https://tableau.example.com/api/-/pulse/metrics/{metric\_id}/tag ### Request samples - Payload Content type application/vnd.tableau.metricqueryservice.v1.CreateTagRequest+json Copy `{ - "category": "CATEGORY_UNSPECIFIED", - "metric_id": "string", - "referrer": "string", - "value": "string" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.CreateTagResponse+json Copy Expand all Collapse all `{ - "tag": { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_DeleteTag)Delete metric tag Deletes the specified metric tag. > **Version:** Available in API 3.25 (Tableau Cloud March 2025) 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)_ > **Permissions:** Anyone can make this request but users will see results only for metrics they have permissions to view. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
metric_id
required
string

The LUID of the metric the tag is being deleted from.

tag_id
required
string

The LUID of the tag being deleted from a metric.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/pulse/metrics/{metric\_id}/tag/{tag\_id} https://tableau.example.com/api/-/pulse/metrics/{metric\_id}/tag/{tag\_id} ### Response samples - 400 - 401 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_BatchGetMetrics)Batch list metrics (few) Deprecated Gets a batch of metrics from a definition, specified in a comma delimited list. - **_Note:_** In API 3.26 (Tableau Cloud September 2025) and later, this method is deprecated and may be retired in future releases. Instead use the [Batch list metrics (many)](#tag/Pulse-Methods/operation/MetricQueryService_BatchGetMetricsByPost). That method has the same behavior but supports listing larger batches of metrics. > **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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)_ > **Permissions:** Any user can get a batch of metrics as long as the user has **read** or **connect** access to the data source used in the definition that contains them. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:read` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
enable_sorting
boolean

(Required) If true, the metrics will be sorted by the metric name. If false, the metrics will be returned in the order they were requested.

metric_ids
string

(Required) The metrics to get, formatted as a comma separated list of LUIDs.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/metrics:batchGet https://tableau.example.com/api/-/pulse/metrics:batchGet ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.BatchGetMetricsResponse+json Copy Expand all Collapse all `{ - "errors": [ - { - "error": "string", - "id": "string" } ], - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ] }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_BatchGetMetricsByPost)Batch list metrics (many) Gets batches of metrics available on a server. Only metrics a user has privileges to view will be visible. This endpoint uses POST as an alternative to GET, where long lists of URL parameters could be problematic. > **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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)_ > **Permissions:** Any user can get a batch of metrics as long as the user has **read** or **connect** access to the data source used in the definition that contains them. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:read` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.metricqueryservice.v1.BatchGetMetricsByPostRequest+json
enable_sorting
boolean
metric_ids
Array of strings
### Responses **201** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. **default** Successful. post/api/-/pulse/metrics:batchGet https://tableau.example.com/api/-/pulse/metrics:batchGet ### Request samples - Payload Content type application/vnd.tableau.metricqueryservice.v1.BatchGetMetricsByPostRequest+json Copy Expand all Collapse all `{ - "enable_sorting": true, - "metric_ids": [ - "string" ] }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 - default Content type application/vnd.tableau.metricqueryservice.v1.BatchGetMetricsByPostResponse+json Copy Expand all Collapse all `{ - "errors": [ - { - "error": "string", - "id": "string" } ], - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ] }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_ListFollowedMetricsGroups)List followed metrics groups Gets the user's followed metrics. Optionally metrics can be grouped by characteristics like datasource, and sorted. If no grouping and sorting is specified then returns are grouped and sorted by existing user preferences. If no user preferences exist or are specified, then metrics are grouped by most recently followed, in descending order. If metrics are grouped by most recently followed then they are returned in a single group, that is sorted by the specified, existing, or default order. > **Version:** Available in API 3.23 (Tableau Cloud December 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. \*[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)\*\\n > **License:** No additional license required. > **Access Scope:** `tableau:insights:read` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
group_by
string
Enum: "GROUP_BY_UNSPECIFIED" "GROUP_BY_RECENTLY_FOLLOWED" "GROUP_BY_DEFINITION_NAME" "GROUP_BY_DATASOURCE_LABEL" "GROUP_BY_TIME_RANGE"
sort_order
string
Enum: "SORT_ORDER_UNSPECIFIED" "SORT_ORDER_ASCENDING" "SORT_ORDER_DESCENDING"

The order to use in sorting returns.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/metrics:followedMetricsGroups https://tableau.example.com/api/-/pulse/metrics:followedMetricsGroups ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.ListFollowedMetricsGroupsResponse+json Copy Expand all Collapse all `{ - "errors": [ - { - "error": "string", - "id": "string" } ], - "group_by": "GROUP_BY_UNSPECIFIED", - "metric_groups": [ - { - "group_metadata": { - "group_label": "string", - "group_tags": [ - "string" ] }, - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "nestedGroupMetadata": { - "group_label": "string", - "group_tags": [ - "string" ] } } ], - "sort_order": "SORT_ORDER_UNSPECIFIED" }` ## [](#tag/Pulse-Methods/operation/MetricQueryService_GetOrCreateMetric)Get or create metric Returns the details of a metric in a definition if it exists, or creates a new metric if it does not. Also returns 'true' if a new metric was created, or 'false' if it already existed. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user can create a metric in a definition as long as the user has **read** or **connect** access to the data source used in the definition. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:create` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.metricqueryservice.v1.GetOrCreateMetricRequest+json
definition_id
string

(Required) The LUID of the definition for the metric.

object (tableau.metricqueryservice.types.v1.MetricSpecification)
### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/metrics:getOrCreate https://tableau.example.com/api/-/pulse/metrics:getOrCreate ### Request samples - Payload Content type application/vnd.tableau.metricqueryservice.v1.GetOrCreateMetricRequest+json Copy Expand all Collapse all `{ - "definition_id": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } } }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.metricqueryservice.v1.GetOrCreateMetricResponse+json Copy Expand all Collapse all `{ - "is_metric_created": true, - "metric": { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": "string" }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": "string" } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": true, - "null_value": "NULL_VALUE", - "string_value": "string" } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "condition": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED", - "comparison": "string", - "value": { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - { - "real": 0, - "integer": 0, - "date": "string", - "boolean": true, - "string": "string", - "null": "NULL_VALUE" } ], - "exclude": true, - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": { - "field_caption": "string" }, - "measure_filter_field": { - "field_caption": "string", - "function": "FUNCTION_UNSPECIFIED" }, - "calculated_filter_field": { - "calculation": "string" } } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_GetRecommendedMetrics)Gets recommended metrics Gets personalized groups of metrics to recommend to a user. Only metric that the user has privileges to view will be returned. > **Version:** Available in API 3.26 (Tableau Cloud September 2025) 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)_ > **Permissions:** Any user can get a batch of metrics as long as the user has **read** or **connect** access to the data source used in the definition that contains them. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:insight_metrics:read` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/metrics:recommended https://tableau.example.com/api/-/pulse/metrics:recommended ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.GetRecommendedMetricsResponse+json Copy Expand all Collapse all `{ - "recommended_metrics": [ - { - "metrics": [ - { - "datasource_luid": "string", - "definition_id": "string", - "goals": { - "target": { - "name": "string", - "value": 0 }, - "threshold": { - "name": "string", - "threshold_sentiment_type": "BENCHMARK_SENTIMENT_TYPE_UNSPECIFIED", - "value": 0 } }, - "id": "string", - "is_default": true, - "is_followed": true, - "metric_version": "string", - "schema_version": "string", - "specification": { - "comparison": { - "comparison": "TIME_COMPARISON_UNSPECIFIED", - "comparison_period_override": [ - { - "comparison_time": { - "field": null }, - "granularity": "GRANULARITY_UNSPECIFIED", - "reference_time": { - "field": null } } ], - "specific_comparison": { - "date": "string", - "end_date": "string" } }, - "filters": [ - { - "categorical_values": [ - { - "bool_value": null, - "null_value": null, - "string_value": null } ], - "field": "string", - "include_null": true, - "operator": "OPERATOR_UNSPECIFIED", - "values": [ - "string" ], - "condition_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "condition": { - "field_caption": null, - "function": null, - "comparison": null, - "value": null }, - "calculation": "string" }, - "match_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "contains": "string", - "starts_with": "string", - "ends_with": "string", - "exclude": true }, - "quantitative_date_filter": { - "min_date": "string", - "max_date": "string", - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "quantitative_numerical_filter": { - "min": 0, - "max": 0, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "quantitative_filter_type": "QUANTITATIVE_FILTER_TYPE_ENUM_UNSPECIFIED", - "include_nulls": true }, - "relative_date_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "period_type": "PERIOD_TYPE_UNSPECIFIED", - "date_range_type": "DATE_RANGE_TYPE_ENUM_UNSPECIFIED", - "range_n": 0, - "anchor_date": "string", - "include_nulls": true }, - "set_filter": { - "values": [ - null ], - "exclude": true, - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true }, - "top_n_filter": { - "field": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null }, - "context": true, - "direction": "DIRECTION_ENUM_UNSPECIFIED", - "how_many": 0, - "field_to_measure": { - "dimension_filter_field": null, - "measure_filter_field": null, - "calculated_filter_field": null } } } ], - "measurement_period": { - "granularity": "GRANULARITY_UNSPECIFIED", - "last_x_period": { - "include_current_period": true, - "period": 0, - "period_type": "GRANULARITY_UNSPECIFIED" }, - "range": "RANGE_UNSPECIFIED", - "specific_period": { - "date": "string", - "end_date": "string" } } }, - "tags": [ - { - "category": "CATEGORY_UNSPECIFIED", - "created_at": "string", - "created_by": "string", - "id": "string", - "value": "string" } ] } ], - "recommendation_type": "RECOMMENDATION_TYPE_UNSPECIFIED" } ] }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_ListSubscriptions)List subscriptions Lists the subscriptions to a specified metric and/or for a specified user. If only `metric-id` is specified, all subscriptions for that metric are returned. If only `user-id` is specified, al subscriptions for that user are returned. If both `metric_id` or `user_id` and specified, then the user's subscription for the specified metric is returned. If no `metric_id` or `user_id` is specified, all subscriptions on the site will be returned. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can list subscriptions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** tableau:metric\_subscriptions:read > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
metric_id
string

The LUID of a metric whose subscriptions will be returned.

order_by
string

The sort order of the results. The format is <field> <direction>. The direction can be either asc or desc.

page_size
integer <int32>

Specifies the page of items to be returned from a requested list. The value of page_token for the next page of returns is found in the next_page_token of the current response. If there are no further items to return, the value of next_page_token will be empty.

Example:

GET .../subscriptions?pageSize=50

Combining Path Parameters: A page_size expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

page_token
string

Specifies the page of items to be returned from a requested list. The value of page_token for the next page of returns is found in the next_page_token of the current response. If there are no further items to return, the value of next_page_token will be empty.

Example:

GET ...//subscriptions?pageToken={next_page_value} Combining Path Parameters:

A page_token expression can be combined with other path parameters using an ampersand (&) as a separator, and is typically used along with a page number expression.

Learn more about paginating the response.

user_id
string

The LUID of a user whose subscriptions will be returned.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/subscriptions https://tableau.example.com/api/-/pulse/subscriptions ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.ListSubscriptionsResponse+json Copy Expand all Collapse all `{ - "next_page_token": "string", - "subscriptions": [ - { - "create_time": "string", - "follower": { - "group_id": "string", - "user_id": "string" }, - "id": "string", - "metric_id": "string", - "update_time": "string" } ] }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_CreateSubscription)Create subscription Creates a subscription to a specified metric for a specified user or group. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can create subscriptions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:metric_subscriptions:create` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.subscriptionservice.v1.CreateSubscriptionRequest+json
object (tableau.pulse.subscriptionservice.types.v1.Follower)
metric_id
string

(Required) The LUID of the metric a subscription is being created to.

### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/subscriptions https://tableau.example.com/api/-/pulse/subscriptions ### Request samples - Payload Content type application/vnd.tableau.pulse.subscriptionservice.v1.CreateSubscriptionRequest+json Copy Expand all Collapse all `{ - "follower": { - "group_id": "string", - "user_id": "string" }, - "metric_id": "string" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.CreateSubscriptionResponse+json Copy Expand all Collapse all `{ - "subscription": { - "create_time": "string", - "follower": { - "group_id": "string", - "user_id": "string" }, - "id": "string", - "metric_id": "string", - "update_time": "string" } }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_DeleteSubscription)Delete Pulse subscription Deletes a specified subscription to a metric. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can delete subscriptions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:metric_subscriptions:delete`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
id
required
string

The LUID of the subscription being deleted.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **204** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. delete/api/-/pulse/subscriptions/{id} https://tableau.example.com/api/-/pulse/subscriptions/{id} ### Response samples - 400 - 401 - 404 - 500 - 503 Content type application/json Copy `{ - "httpErrorCode": "string", - "message": "string" }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_GetSubscription)Get Pulse subscription Gets a specified subscription to a metric. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can get the details of a subscription. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:metric_subscriptions:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### path Parameters
id
required
string

(Required) The LUID of the subscription being requested.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/subscriptions/{id} https://tableau.example.com/api/-/pulse/subscriptions/{id} ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.GetSubscriptionResponse+json Copy Expand all Collapse all `{ - "subscription": { - "create_time": "string", - "follower": { - "group_id": "string", - "user_id": "string" }, - "id": "string", - "metric_id": "string", - "update_time": "string" } }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_BatchCreateSubscriptions)Batch create Pulse subscriptions Creates multiple subscriptions to a metric for specified users and/or groups. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can create subscriptions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:metric_subscriptions:create` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.subscriptionservice.v1.BatchCreateSubscriptionsRequest+json
Array of objects (tableau.pulse.subscriptionservice.types.v1.Follower)

(Required) Users and/or groups being subscribed to the metric.

metric_id
string

(Required) The LUID of the metric that a batch of users and or groups are being subscribed to.

### Responses **201** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. post/api/-/pulse/subscriptions:batchCreate https://tableau.example.com/api/-/pulse/subscriptions:batchCreate ### Request samples - Payload Content type application/vnd.tableau.pulse.subscriptionservice.v1.BatchCreateSubscriptionsRequest+json Copy Expand all Collapse all `{ - "followers": [ - { - "group_id": "string", - "user_id": "string" } ], - "metric_id": "string" }` ### Response samples - 201 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.BatchCreateSubscriptionsResponse+json Copy Expand all Collapse all `{ - "subscriptions": [ - { - "create_time": "string", - "follower": { - "group_id": "string", - "user_id": "string" }, - "id": "string", - "metric_id": "string", - "update_time": "string" } ] }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_BatchGetSubscriptions)Batch get Pulse subscriptions Gets a batch of subscriptions, specified in a comma delimited list of subscriptions LUIDs. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can get the details of subscriptions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:metric_subscriptions:read` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/subscriptions:batchGet https://tableau.example.com/api/-/pulse/subscriptions:batchGet ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.BatchGetSubscriptionsResponse+json Copy Expand all Collapse all `{ - "subscriptions": [ - { - "create_time": "string", - "follower": { - "group_id": "string", - "user_id": "string" }, - "id": "string", - "metric_id": "string", - "update_time": "string" } ] }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_BatchGetMetricFollowerCounts)Batch get Pulse subscriber counts Gets the number of unique users subscribed to a set of metrics specified in a comma separated list of metric LUIDs. For metrics with group followers, the count will be the union of all the members of the subscribed groups plus all the individual followers. Users are counted only once per metric. > **Version:** Available in API 3.21 (Tableau Cloud December 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can create subscriptions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:metric_subscriptions:read` > _Access Scopes Overview: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
metric_ids
string

(Required) The metrics to get follower counts for, formatted as a comma separated list of LUIDs. If no LUIDs are specified, the follower count for all metrics in a definition will be returned.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/subscriptions:batchGetMetricFollowerCounts https://tableau.example.com/api/-/pulse/subscriptions:batchGetMetricFollowerCounts ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.BatchGetMetricFollowerCountsResponse+json Copy Expand all Collapse all `{ - "follower_counts": [ - { - "follower_count": 0, - "metric_id": "string" } ] }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_GetUserPreferences)List Pulse user preferences Gets the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI. > **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can get the details of subscriptions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:user_preferences:read`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
user_id
string

(Optional) The user ID to get preferences for. If not specified, the preferences for the signed in user will be returned.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

### Responses **200** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. get/api/-/pulse/user/preferences https://tableau.example.com/api/-/pulse/user/preferences ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.GetUserPreferencesResponse+json Copy Expand all Collapse all `{ - "user_preferences_response": { - "cadence": "CADENCE_UNSPECIFIED", - "channel_preferences": [ - { - "availability": "CHANNEL_AVAILABILITY_UNSPECIFIED", - "channel": "DELIVERY_CHANNEL_UNSPECIFIED", - "status": "CHANNEL_STATUS_UNSPECIFIED" } ], - "digest_metric_filter": "DIGEST_METRIC_FILTER_UNSPECIFIED", - "metric_grouping_preferences": { - "group_by": "GROUP_BY_UNSPECIFIED", - "sort_order": "SORT_ORDER_UNSPECIFIED" }, - "user_id": "string" } }` ## [](#tag/Pulse-Methods/operation/PulseSubscriptionService_UpdateUserPreferences)Update Pulse user preferences Updates the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI. > **Version:** Available in API 3.24 (Tableau Cloud December 2024) 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)_ > **Permissions:** Any user that has **read** or **connect** permission to the data source used in the definition can get the details of subscriptions. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** No additional license required. > **Access Scope:** `tableau:user_preferences:update`. _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ ##### query Parameters
user_id
string

(Optional) The user ID to update preferences for. If not specified, the preferences for the signed in user will be updated.

##### header Parameters
X-Tableau-Auth
string

The Tableau authentication header. The value is a credentials token from a Tableau server's response to an authentication request. The Content-Type and Accept headers should be the mediatype of the request and response except in cases where you want to explicitly allow other versions of the resource.

##### Request Body schema: application/vnd.tableau.pulse.subscriptionservice.v1.UpdateUserPreferencesRequest+json
cadence
string
Enum: "CADENCE_UNSPECIFIED" "CADENCE_DAILY" "CADENCE_WEEKLY" "CADENCE_MONTHLY"
Array of objects (tableau.pulse.subscriptionservice.types.v1.ChannelPreferencesRequest)
digest_metric_filter
string
Enum: "DIGEST_METRIC_FILTER_UNSPECIFIED" "DIGEST_METRIC_FILTER_ALL_FOLLOWED" "DIGEST_METRIC_FILTER_FAVORITES"
object (tableau.pulse.subscriptionservice.types.v1.MetricGroupingPreferences)
user_id
string

The LUID of the user.

### Responses **200** Successful. **400** Invalid Request. The requested was incorrect. **401** Unable to authenticate user. Credentials are missing or invalid. **404** Bad Request. The requested resource could not be found. **500** Unknown error. There was an internal server error. **503** Service unavailable. patch/api/-/pulse/user/preferences https://tableau.example.com/api/-/pulse/user/preferences ### Request samples - Payload Content type application/vnd.tableau.pulse.subscriptionservice.v1.UpdateUserPreferencesRequest+json Copy Expand all Collapse all `{ - "cadence": "CADENCE_UNSPECIFIED", - "channel_preferences_request": [ - { - "channel": "DELIVERY_CHANNEL_UNSPECIFIED", - "status": "CHANNEL_STATUS_UNSPECIFIED" } ], - "digest_metric_filter": "DIGEST_METRIC_FILTER_UNSPECIFIED", - "metric_grouping_preferences": { - "group_by": "GROUP_BY_UNSPECIFIED", - "sort_order": "SORT_ORDER_UNSPECIFIED" }, - "user_id": "string" }` ### Response samples - 200 - 400 - 401 - 404 - 500 - 503 Content type application/vnd.tableau.pulse.subscriptionservice.v1.UpdateUserPreferencesResponse+json Copy Expand all Collapse all `{ - "user_preferences_response": { - "cadence": "CADENCE_UNSPECIFIED", - "channel_preferences": [ - { - "availability": "CHANNEL_AVAILABILITY_UNSPECIFIED", - "channel": "DELIVERY_CHANNEL_UNSPECIFIED", - "status": "CHANNEL_STATUS_UNSPECIFIED" } ], - "digest_metric_filter": "DIGEST_METRIC_FILTER_UNSPECIFIED", - "metric_grouping_preferences": { - "group_by": "GROUP_BY_UNSPECIFIED", - "sort_order": "SORT_ORDER_UNSPECIFIED" }, - "user_id": "string" } }` ## [](#tag/Tableau-Knowledge-Graph-Methods)Tableau Knowledge Graph Methods Read and write the per-site Tableau Knowledge Graph. Graph node visibility depends on content permissions. Users can see nodes that they have read access to, and can change nodes that they have write access to. **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/list_graphs)List knowledge graphs List the knowledge graphs on the caller's Tableau site, each with its ID, name, description, status, and `is_primary` flag. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Use this to discover graph IDs before calling a graph-scoped operation: pass an `id` from the response as the `graph_id` query parameter, or find the primary graph (`is_primary` is true) that graph-scoped operations use when `graph_id` is omitted. This endpoint selects no graph itself, so it never returns `graph_not_found` or `no_active_graph`; a site with no graphs returns an empty list. ### Responses **200** The site's graphs (possibly empty). **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. get/api/v1/knowledge/graphs https://tableau.example.com/api/v1/knowledge/graphs ### Response samples - 200 - 401 - 403 - 503 Content type application/json Copy Expand all Collapse all `{ - "graphs": [ - { - "id": "string", - "name": "string", - "description": "string", - "status": "active", - "is_primary": true, - "created_at": "2019-08-24T14:15:22Z", - "updated_at": "2019-08-24T14:15:22Z" } ] }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/search_nodes)Search graph nodes Search graph nodes using natural-language semantic search. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Use `query` to describe what you're looking for in plain language. Results are ranked by similarity, not exact text match, so a query like "revenue" can match a field named "Net Sales". Narrow results with an optional `node_type`, `scope_id`, `limit`, or `threshold`. ##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

##### Request Body schema: application/json required
query
required
string

Natural-language search text. Embedded and ranked by vector similarity, so it matches on meaning rather than exact name (for example, "revenue" can match a field named "Net Sales").

node_type
string or null

Restrict results to a single node type (for example, FIELD, PDS). Conceptually a NodeType value, but typed as a plain string rather than the enum, since the server doesn't strictly enforce it. Case-insensitive (the server converts to uppercase before matching). Omit to search across all node types.

scope_id
string or null

Limit the search to one data source's subtree: the given container/PDS node plus every table and field it owns. Omit to search the whole graph.

limit
integer or null
Default: 10

Maximum number of ranked matches. Defaults to 10 when omitted; values outside 1-100 are silently adjusted to the nearest bound rather than rejected. Bounds the ranked page before threshold trims it.

threshold
number or null [ 0 .. 1 ]

Drop matches whose score is below this. Must be between 0 and 1.

### Responses **200** Ranked matches (possibly empty). **400** Unknown node\_type. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** The `graph_id` query parameter specified a graph that either doesn't exist or doesn't belong to the caller's Tableau site. The `code` field is `graph_not_found`. **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **422** Request validation error. **503** No embedder configured (semantic search unavailable). post/api/v1/knowledge/nodes/search https://tableau.example.com/api/v1/knowledge/nodes/search ### Request samples - Payload Content type application/json Copy `{ - "query": "string", - "node_type": "string", - "scope_id": "string", - "limit": 10, - "threshold": 1 }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 409 - 422 - 503 Content type application/json Copy Expand all Collapse all `{ - "matches": [ - { - "id": "string", - "type": "CONNECTION", - "name": "string", - "properties": { }, - "score": 0.1, - "certified": null, - "semantic_statements": [ - { - "id": "string", - "statement": "string", - "score": 0.1 } ] } ] }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/get_node)Get a node by ID Get a single node by its ID, including its semantic statements and directly connected nodes. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Unlike search, this is an exact-ID lookup; an unknown `node_id` returns `404`, not an empty result. Use `include_children` to control whether `connected_nodes` is populated in the response. ##### path Parameters
node_id
required
string

Graph node id.

##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

include_children
boolean
Default: true

Whether to populate connected_nodes with the node's outgoing children. Defaults to true; set to false to return an empty array instead.

### Responses **200** The node with its semantic statements and connected nodes. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** Node not found (`code` `not_found`), or the `graph_id` query parameter named a graph not on the caller's site (`code` `graph_not_found`). **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. get/api/v1/knowledge/nodes/{node\_id} https://tableau.example.com/api/v1/knowledge/nodes/{node\_id} ### Response samples - 200 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `{ - "id": "string", - "type": "CONNECTION", - "name": "string", - "properties": { }, - "semantic_statements": [ - { - "id": "string", - "statement": "string" } ], - "connected_nodes": [ - { - "id": "string", - "name": "string", - "type": "CONNECTION", - "edge_type": "CONTAINS" } ] }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/search_sources)List knowledge sources List the data sources and workbooks connected to the graph. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Optionally filter by `node_type` (typically `PDS` or `WORKBOOK`). An unrecognized type returns an empty list rather than an error. ##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

##### Request Body schema: application/json required
node_type
string or null

Restrict the source list to one node type (typically PDS or WORKBOOK). Conceptually a NodeType value, but typed as a plain string rather than the enum, since the server doesn't strictly enforce it. An unrecognized value yields an empty array (not a 400). Omit to return all source nodes.

### Responses **200** Matching source nodes. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** The `graph_id` query parameter specified a graph that either doesn't exist or doesn't belong to the caller's Tableau site. The `code` field is `graph_not_found`. **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. post/api/v1/knowledge/sources/search https://tableau.example.com/api/v1/knowledge/sources/search ### Request samples - Payload Content type application/json Copy `{ - "node_type": "string" }` ### Response samples - 200 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `[ - { - "id": "string", - "type": "CONNECTION", - "name": "string", - "properties": { }, - "last_synced_at": "2019-08-24T14:15:22Z" } ]` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/search_edges)List edges around a node List the edges connected to a node. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Identify the anchor node by `node_id`, or by a natural-language `query` if you don't know its ID. Each edge in the response includes its `direction` relative to the anchor and the connected node on the other end. Optionally filter by `edge_type` or `direction`. ##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

##### Request Body schema: application/json required
node_id
string or null

Anchor node id to list edges around. Takes precedence over query when both are given. Provide this or query.

query
string or null

Natural-language text used to resolve the anchor node by semantic search when node_id is not supplied. Provide this or node_id.

edge_type
string or null

Restrict results to a single edge type (for example, LINEAGE, DEPENDS_ON). Conceptually an EdgeType value, but typed as a plain string rather than the enum, since the server doesn't strictly enforce it. Case-insensitive (the server converts to uppercase before matching). Omit for all edge types.

direction
string or null
Enum: "outgoing" "incoming"

Restrict results to edges pointing away from (outgoing) or toward (incoming) the anchor. Omit to return edges in both directions.

### Responses **200** Edges around the resolved anchor. **400** Unknown edge\_type, invalid direction, or unresolved anchor. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** The `graph_id` query parameter specified a graph that either doesn't exist or doesn't belong to the caller's Tableau site. The `code` field is `graph_not_found`. **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** No embedder configured. post/api/v1/knowledge/edges/search https://tableau.example.com/api/v1/knowledge/edges/search ### Request samples - Payload Content type application/json Copy `{ - "node_id": "string", - "query": "string", - "edge_type": "string", - "direction": "outgoing" }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `{ - "node_id": "string", - "name": "string", - "edges": [ - { - "id": "string", - "type": "CONTAINS", - "source_id": "string", - "target_id": "string", - "properties": { }, - "direction": "outgoing", - "connected_node": { - "id": "string", - "name": "string", - "type": "CONNECTION" } } ] }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/get_lineage)Get the lineage of a node Get the lineage neighborhood of a node. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Traces lineage and dependency relationships up to 10 steps in both directions from the node. If the node doesn't exist, the response is an empty graph rather than an error. ##### path Parameters
node_id
required
string

Graph node id.

##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

### Responses **200** Lineage subgraph (empty if node unknown). **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** The `graph_id` query parameter specified a graph that either doesn't exist or doesn't belong to the caller's Tableau site. The `code` field is `graph_not_found`. **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. get/api/v1/knowledge/nodes/{node\_id}/lineage https://tableau.example.com/api/v1/knowledge/nodes/{node\_id}/lineage ### Response samples - 200 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `{ - "nodes": [ - { - "id": "string", - "type": "CONNECTION", - "name": "string", - "properties": { }, - "last_synced_at": "2019-08-24T14:15:22Z" } ], - "edges": [ - { - "id": "string", - "type": "CONTAINS", - "source_id": "string", - "target_id": "string", - "properties": { } } ] }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/get_node_impact)Get the downstream impact of a node Get the assets that depend on a node, to see the impact if it changes. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Returns the transitive set of downstream dependents, up to 10 steps deep. The node itself isn't included in the results. ##### path Parameters
node_id
required
string

Graph node id.

##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

### Responses **200** Impacted downstream assets. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** Node not found (`code` `not_found`), or the `graph_id` query parameter named a graph not on the caller's site (`code` `graph_not_found`). **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. get/api/v1/knowledge/nodes/{node\_id}/impact https://tableau.example.com/api/v1/knowledge/nodes/{node\_id}/impact ### Response samples - 200 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `{ - "node_id": "string", - "affected_assets": [ - { - "id": "string", - "type": "CONNECTION", - "name": "string", - "properties": { }, - "last_synced_at": "2019-08-24T14:15:22Z" } ] }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/create_semantic_context)Create a semantic context Create a semantic context node carrying one or more statements. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:write` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Set exactly one of `is_global` (attaches to the whole graph) or `target_node_id` (attaches to one node); neither or both is rejected. ##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

##### Request Body schema: application/json required
required
Array of objects (tableau.knowledgeservice.StatementInput)

The statements to store on the new context node. Must be non-empty; enforced at runtime as a 400 (not a schema-level 422), so no minItems here, which keeps generated models aligned with the server's.

target_node_id
string or null

Id of the single node this context describes (a DESCRIBES edge is created). Either this must be set, or is_global must be set to true, but not both. Must resolve to an enrichable node type (not CONNECTION, SITE, SCHEMA, SEMANTIC_CONTEXT, or SEMANTIC_CONTEXT_EXTERNAL).

is_global
boolean
Default: false

When true, the context applies to the whole graph instead of one node. Either this must be set to true, or target_node_id must be set, but not both.

name
string or null

Optional display name for the context node. A name is derived automatically when omitted.

### Responses **201** Created semantic-context node. **400** Either `is_global` and `target_node_id` were both set or both omitted, a statement failed validation (empty batch, or a statement whose length isn't between 5 and 1000 characters), or `target_node_id` resolved to a non-enrichable node type (CONNECTION, SITE, SCHEMA, SEMANTIC\_CONTEXT, or SEMANTIC\_CONTEXT\_EXTERNAL). **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** target\_node\_id not found, or the `graph_id` query parameter named a graph not on the caller's site (`code` `graph_not_found`). **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. post/api/v1/knowledge/semantic-contexts https://tableau.example.com/api/v1/knowledge/semantic-contexts ### Request samples - Payload Content type application/json Copy Expand all Collapse all `{ - "statements": [ - { - "statement": "string", - "id": "string" } ], - "target_node_id": "string", - "is_global": false, - "name": "string" }` ### Response samples - 201 - 400 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `{ - "id": "string", - "type": "SEMANTIC_CONTEXT", - "name": "string", - "properties": { - "statements": [ - { - "id": "string", - "statement": "string" } ], - "is_global": true, - "kind": "string", - "source": "string", - "updated_by": "string", - "updated_at": "2019-08-24T14:15:22Z", - "filename": "string" }, - "last_synced_at": "2019-08-24T14:15:22Z", - "target_node_id": "string" }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/search_semantic_contexts)Search semantic contexts Search semantic contexts across the graph. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Returns both user-managed and Tableau-managed contexts. Filter by `is_global` to return only globally attached or only node-attached contexts; omit it to get both. `query`, `kind`, and `limit` are accepted but not yet applied. ##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

##### Request Body schema: application/json required
is_global
boolean or null

Filter by scope: true = global contexts only, false = attached contexts only. Omit to return both.

query
string or null

Accepted for forward compatibility; currently ignored.

kind
string or null

Accepted for forward compatibility; currently ignored.

limit
integer or null

Accepted for forward compatibility; currently ignored.

### Responses **200** Matching semantic contexts. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** The `graph_id` query parameter specified a graph that either doesn't exist or doesn't belong to the caller's Tableau site. The `code` field is `graph_not_found`. **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. post/api/v1/knowledge/semantic-contexts/search https://tableau.example.com/api/v1/knowledge/semantic-contexts/search ### Request samples - Payload Content type application/json Copy `{ - "is_global": true, - "query": "string", - "kind": "string", - "limit": 0 }` ### Response samples - 200 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `[ - { - "id": "string", - "type": "SEMANTIC_CONTEXT", - "name": "string", - "properties": { - "statements": [ - { - "id": "string", - "statement": "string" } ], - "is_global": true, - "kind": "string", - "source": "string", - "updated_by": "string", - "updated_at": "2019-08-24T14:15:22Z", - "filename": "string" }, - "last_synced_at": "2019-08-24T14:15:22Z", - "target_node_id": "string" } ]` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/search_node_semantic_contexts)Search semantic contexts attached to a node Search the semantic contexts attached to a specific node. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Returns both user-managed and Tableau-managed contexts attached to `node_id`. An unknown `node_id` returns an empty list rather than `404`. Request-body filters aren't yet applied; only the node scoping does. ##### path Parameters
node_id
required
string

Graph node id.

##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

##### Request Body schema: application/json required
is_global
boolean or null

Filter by scope: true = global contexts only, false = attached contexts only. Omit to return both.

query
string or null

Accepted for forward compatibility; currently ignored.

kind
string or null

Accepted for forward compatibility; currently ignored.

limit
integer or null

Accepted for forward compatibility; currently ignored.

### Responses **200** Semantic contexts attached to the node. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** The `graph_id` query parameter specified a graph that either doesn't exist or doesn't belong to the caller's Tableau site. The `code` field is `graph_not_found`. **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. post/api/v1/knowledge/nodes/{node\_id}/semantic-contexts/search https://tableau.example.com/api/v1/knowledge/nodes/{node\_id}/semantic-contexts/search ### Request samples - Payload Content type application/json Copy `{ - "is_global": true, - "query": "string", - "kind": "string", - "limit": 0 }` ### Response samples - 200 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `[ - { - "id": "string", - "type": "SEMANTIC_CONTEXT", - "name": "string", - "properties": { - "statements": [ - { - "id": "string", - "statement": "string" } ], - "is_global": true, - "kind": "string", - "source": "string", - "updated_by": "string", - "updated_at": "2019-08-24T14:15:22Z", - "filename": "string" }, - "last_synced_at": "2019-08-24T14:15:22Z", - "target_node_id": "string" } ]` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/update_semantic_context)Update a semantic context Partially update a semantic context. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:write` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Only fields present in the request body are changed. Include `statements` to replace the stored set. Omit `target_node_id` to keep the current attachment, or set it explicitly to `null` to detach. The result must still be either global or attached to exactly one node, same as on creation. ##### path Parameters
ctx_id
required
string

Semantic-context node id (for example, "semctx:").

##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

##### Request Body schema: application/json required
Array of objects or null (tableau.knowledgeservice.StatementInput)

When present, replaces the stored statement set (an explicit empty array is rejected because at least one is required). Omit to leave the existing statements unchanged.

target_node_id
string or null

Presence-sensitive: omit to keep the current attachment, pass an id to re-attach, or pass null to detach (make global). After the update, the context must still be either global or attached to exactly one node, never both, never neither. Must resolve to an enrichable node type (not CONNECTION, SITE, SCHEMA, SEMANTIC_CONTEXT, or SEMANTIC_CONTEXT_EXTERNAL).

is_global
boolean or null

Set true/false to change global scope; omit to leave it unchanged. After the update, the context must still be either global or attached to exactly one node, never both, never neither.

name
string or null

New display name for the context node; omit to leave unchanged.

### Responses **200** Updated semantic-context node. **400** Either `is_global` and `target_node_id` were both set or both omitted, a statement failed validation (an explicit empty `statements` array is rejected because at least one is required, or a statement whose length isn't between 5 and 1000 characters), or `target_node_id` resolved to a non-enrichable node type (CONNECTION, SITE, SCHEMA, SEMANTIC\_CONTEXT, or SEMANTIC\_CONTEXT\_EXTERNAL). **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** ctx\_id not found or identifies a non-semantic-context node (excluding SEMANTIC\_CONTEXT\_EXTERNAL, which returns 409), or the `graph_id` query parameter named a graph not on the caller's site (`code` `graph_not_found`). **409** The graph cannot be selected (`code` `no_active_graph`), or ctx\_id identifies a Tableau-managed SEMANTIC\_CONTEXT\_EXTERNAL node, which cannot be updated through this API (`code` `conflict`). **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. patch/api/v1/knowledge/semantic-contexts/{ctx\_id} https://tableau.example.com/api/v1/knowledge/semantic-contexts/{ctx\_id} ### Request samples - Payload Content type application/json Copy Expand all Collapse all `{ - "statements": [ - { - "statement": "string", - "id": "string" } ], - "target_node_id": "string", - "is_global": true, - "name": "string" }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `{ - "id": "string", - "type": "SEMANTIC_CONTEXT", - "name": "string", - "properties": { - "statements": [ - { - "id": "string", - "statement": "string" } ], - "is_global": true, - "kind": "string", - "source": "string", - "updated_by": "string", - "updated_at": "2019-08-24T14:15:22Z", - "filename": "string" }, - "last_synced_at": "2019-08-24T14:15:22Z", - "target_node_id": "string" }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/delete_semantic_context)Delete a semantic context Delete a semantic context created and managed in Tableau Knowledge, along with its statements. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Creator role. The user can read/write nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:write` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Deletion is idempotent. An absent, hidden, or non-semantic `ctx_id` all return `204` without deleting anything. ##### path Parameters
ctx_id
required
string

Semantic-context node id.

##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

### Responses **204** Deleted, already absent, hidden, or non-semantic. Hidden and non-semantic nodes are not deleted. No response body. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** The `graph_id` query parameter named a graph not on the caller's site (`code` `graph_not_found`). ctx\_id existence, visibility, and type do not produce 404; those cases return 204, except a visible SEMANTIC\_CONTEXT\_EXTERNAL node returns 409. **409** The graph cannot be selected (`code` `no_active_graph`), or ctx\_id identifies a visible Tableau-managed SEMANTIC\_CONTEXT\_EXTERNAL node, which cannot be deleted through this API (`code` `conflict`). **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. delete/api/v1/knowledge/semantic-contexts/{ctx\_id} https://tableau.example.com/api/v1/knowledge/semantic-contexts/{ctx\_id} ### Response samples - 401 - 403 - 404 - 409 - 503 Content type application/json Copy `{ - "code": "auth_failed", - "message": "Authentication failed.", - "trace_id": "" }` ## [](#tag/Tableau-Knowledge-Graph-Methods/operation/search_suggestions)Get graph-health suggestions Get a report on the health of the graph, including a score and suggested improvements. > **Version:** Available in Tableau Cloud September 2026 and later. Not available for Tableau Server. > **Permissions:** Any authenticated user. The user can read nodes allowed by content permissions. > _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ > **License:** Tableau Cloud+ > **Access Scope:** `tableau:knowledge:read` > _Access Scopes Overview: [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) and [Access scopes for connected apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_ **Note:** Knowledge Graph API operations use a `v1` path segment (`/api/v1/knowledge`) in the URI, independent of other Tableau REST API versioning schemes. Always use `v1`. Optionally scope the report to one data source with `pds_id`, or filter suggestions by `severity` or `type`. Filters apply only to the suggestion list; the score and coverage metrics always reflect the full graph (or the scoped subtree). ##### query Parameters
graph_id
string^[A-Za-z0-9._-]{1,128}$

The id of a graph belonging to the caller's Tableau site. Omit to operate on the site's active (primary) graph.

##### Request Body schema: application/json required
pds_id
string or null

Scope the report to a single PDS subtree. Omit to report on the whole graph.

severity
string or null
Enum: "high" "medium" "low"

Filter the suggestion lists to one severity (high, medium, or low). The metrics, summary, stats, and health_score fields always reflect the full (or PDS-scoped) graph, regardless of this filter. Omit for all severities.

type
string or null

Filter the suggestion lists to one suggestion type. Omit for all types.

limit
integer or null

Truncate the top suggestions to at most this many.

### Responses **200** Graph-health report. **400** Unknown pds\_id or severity. **401** Authentication failed. The credential is absent, invalid, or lacks the required access scope (`tableau:knowledge:read` or `tableau:knowledge:write`). The `code` field is always `auth_failed`. **403** The request is authenticated with a valid access scope, but the caller isn't permitted to access this resource. Check the `code` field to determine why: `site_not_entitled` means the caller's Tableau site doesn't have the Knowledge service (a tenant-level condition a TCM admin resolves), and `tableau_forbidden` means the caller lacks the required Tableau role or capability for this resource (a per-user permission condition). **404** The `graph_id` query parameter specified a graph that either doesn't exist or doesn't belong to the caller's Tableau site. The `code` field is `graph_not_found`. **409** The `graph_id` query parameter was omitted and the caller's Tableau site has no active (primary) graph to fall back to. The `code` field is `no_active_graph`. Resolve this by creating a graph first. **503** The Tableau service that resolves authentication and site status is temporarily unavailable; retry the request. The `code` field is `tableau_unavailable` for this case. This is different from the 503 returned on semantic-search routes when no embedder is configured, which uses `code` `internal`. post/api/v1/knowledge/suggestions/search https://tableau.example.com/api/v1/knowledge/suggestions/search ### Request samples - Payload Content type application/json Copy `{ - "pds_id": "string", - "severity": "high", - "type": "string", - "limit": 0 }` ### Response samples - 200 - 400 - 401 - 403 - 404 - 409 - 503 Content type application/json Copy Expand all Collapse all `{ - "health_score": 0, - "stats": { - "total_nodes": 0, - "total_relationships": 0, - "connected_sources": 0, - "workbooks": 0, - "context_coverage": 0.1 }, - "metrics": [ - { - "category": "string", - "label": "string", - "total": 0, - "passing": 0, - "coverage": 0.1 } ], - "suggestions": [ - { - "id": "string", - "type": "string", - "category": "string", - "topic": "string", - "title": "string", - "detail": "string", - "recommended_action": "string", - "severity": "high", - "target_ids": [ - "string" ], - "metadata": { } } ], - "categories": [ - { - "category": "string", - "count": 0, - "severity": "high", - "suggestions": [ - { - "id": "string", - "type": "string", - "category": "string", - "topic": "string", - "title": "string", - "detail": "string", - "recommended_action": "string", - "severity": "high", - "target_ids": [ - "string" ], - "metadata": { } } ] } ], - "topics": [ - { - "topic": "string", - "count": 0, - "severity": "high", - "categories": [ - { - "category": "string", - "count": 0, - "severity": "high", - "suggestions": [ - { - "id": "string", - "type": "string", - "category": "string", - "topic": "string", - "title": "string", - "detail": "string", - "recommended_action": "string", - "severity": "high", - "target_ids": [ - "string" ], - "metadata": { } } ] } ] } ], - "summary": { - "total": 0, - "by_severity": { - "property1": 0, - "property2": 0 }, - "by_type": { - "property1": 0, - "property2": 0 }, - "by_category": { - "property1": 0, - "property2": 0 }, - "by_topic": { - "property1": 0, - "property2": 0 }, - "errors": 0 }, - "errors": [ - { - "type": "string", - "message": "string" } ] }` [Skip to main content](#main-content) # REST API With the Tableau Server REST API you can manage and change Tableau Server, Tableau Cloud site, and Prep Conductor resources programmatically, using HTTP. The API gives you simple access to the functionality behind Tableau data sources, projects, workbooks, site users, sites, flows, and more. You can use this access to create your own custom applications or to script interactions with Tableau resources.
Getting Started icon
LEARN
Get Started Tutorial
make REST requests to your Server or Online site using Postman or cURL
Findd icon
FIND
All Methods List
ctrl-f search for methods and parameters by name
Integrate icon
INTEGRATE
Tableau Server Client (Python) - call Server and Online site APIs from your existing processes
Join icon
JOIN
Tableau Developer Program - forums, events, and a free Tableau Cloud sandbox for learning and prototyping
## Method Categories Analytics Extensions Settings Methods
Add analytics extension connection to siteAdds a new analytics extension connection for an external service to a site.
Delete analytics extension connection from siteDeletes a specific analytics extension connection for an external service from a site.
Enable or disable analytics extensions on server
- Not available for Tableau Cloud
Enables or disables analytics extensions on a server.
Get analytics extension detailsGet the details of a specified analytics extension connection to an external service.
Get current analytics extension for workbookGets basic details, including connection type and name, of the analytics extension connection to an external service that the specified workbook is currently using.
Get enabled state of analytics extensions on server
- Not available for Tableau Cloud
Gets the enabled/disabled state of analytics extensions on a server.
Get enabled state of analytics extensions on siteGets the enabled/disabled state of analytics extensions on a site.
List analytics extension connections of workbookLists basic details of each analytics extension connection available for a specified workbook, including connection type and name.
List analytics extension connections on siteLists a site's analytics extension connections for external services.
Remove current analytics extension connection for workbookRemove the currently used analytics extension connection to an external service from the specified workbook. The connection remains configured, and is available for further usage by the workbook.
Update analytics extension connection of siteUpdates the details of specified analytics extension connection for an external service to a site.
Update analytics extension for workbookUpdates the analytics extension connection to external service currently used by a workbook.
Update enabled state of analytics extensions on siteEnables or disables analytics extensions on a site.
Ask Data Lens Methods - Retired
Create ask data lens - Retired in API 3.22Create an ask data lens.
Delete ask data lens - Retired in API 3.22Delete an ask data lens.
Get ask data lens - Retired in API 3.22Get the details of the specified ask data lens.
Import ask data lens - Retired in API 3.22Import an existing ask data lens on a server to a site, and optionally transform the metadata of the lens in the process.
List ask data lenses in site - Retired in API 3.22Returns a list of ask data lenses in a site.
Authentication Methods
List Personal Access Tokens
- Not available for Tableau Server.
List all personal access tokens (PATs). If you're a site admin, list PATs of a user when you are the site admin on all sites that the PAT owner is a member of.
Revoke Administrator Personal Access Tokens
- Not available for Tableau Cloud.
Revokes all personal access tokens (PATs) created by server administrators. This method is not available for Tableau Cloud.
Revoke Personal Access Token
- Not available for Tableau Server.
Revoke a personal access token (PAT). If you're a site admin, you can revoke a users PAT owhen you are the site admin on all sites that the PAT owner is a member of.
Sign InSigns you in as a user on the specified site on Tableau Server or Tableau Cloud.
Sign OutSigns you out of the current session. This call invalidates the authentication token that is created by a call to Sign In.
Switch Site
- Not available for Tableau Cloud.
Switches you onto another site without having to provide a user name and password again.
Bridge Methods
Add Domain to Pool
- Not available for Tableau Server.
Associates a domain with a specific Bridge pool, allowing Bridge clients from that domain to use the pool.
Add Projects to Routing Rule
- Not available for Tableau Server.
Adds one or more project filtering conditions to an existing allow rule, narrowing the rule so it applies only to the listed projects.
Block Domain
- Not available for Tableau Server.
Blocks a domain from being used with any Bridge pool, preventing Bridge clients from that domain from connecting.
Create Bridge Pool
- Not available for Tableau Server.
Creates a new Bridge pool with the specified name.
Create Routing Rule
- Not available for Tableau Server.
Creates a Bridge routing rule for a site.
Delete Bridge Client
- Not available for Tableau Server.
Permanently removes a Bridge client from the site.
Delete Bridge Pool
- Not available for Tableau Server.
Permanently deletes a Bridge pool and all its associated domain mappings.
Delete Domain
- Not available for Tableau Server.
Removes a domain mapping from the system.
Delete Routing Rule
- Not available for Tableau Server.
Permanently deletes a Bridge routing rule identified by its ID.
Get Bridge Client
- Not available for Tableau Server.
Retrieves detailed information about a single Bridge client.
Get Domain Mapping
- Not available for Tableau Server.
Retrieves information about all domain mappings for the site, including pool assignment and status (ALLOWED or BLOCKED).
Get Routing Rule
- Not available for Tableau Server.
Returns a single Bridge routing rule identified by its ID.
Get Routing Rules
- Not available for Tableau Server.
Returns all Bridge routing rules for the site.
List Bridge Clients
- Not available for Tableau Server.
Retrieves a list of all Bridge clients for a specific site, with optional filtering by pool.
List Bridge Pools
- Not available for Tableau Server.
Retrieves a list of all Bridge pools for the specified site, including pool details and associated domain mappings.
Move Bridge Client
- Not available for Tableau Server.
Moves a Bridge client between pools or to unassigned status.
Remove Projects from Routing Rule
- Not available for Tableau Server.
Removes one or more project filtering conditions from an existing allow rule, broadening the rule so it no longer applies only to those projects.
Update Bridge Pool
- Not available for Tableau Server.
Updates the display name of an existing Bridge pool.
Update Domain Among Pools
- Not available for Tableau Server.
Moves a domain from its current pool to a different pool.
Update Domain Name
- Not available for Tableau Server.
Updates an existing domain mapping by renaming the domain.
Update Routing Rule
- Not available for Tableau Server.
Partially updates an existing Bridge routing rule.
Collections Methods
Add Collection PermissionsAdds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call.
Add items to a collectionAdds items to a collection.
Batch update collectionsBatch updates collections.
Create a collectionCreates a new collection.
Delete Collection PermissionRemoves the specified collection permission for the specified group or user.
Delete collectionsDeletes collections.
Delete collectionsDeletes collections.
Get details of a collectionGets the details of a collection.
List Collection PermissionsReturns a list of permissions for a specific collection.
List collectionsLists collections.
List items in a collectionLists items in a collection.
Remove items from a collectionRemoves items from a collection.
Reorder items in a collectionReorders items in a collection.
Connected App Methods
Create Connected AppCreate a connected app.
Create Connected App SecretGenerate a secret for a connected app.
Delete Connected AppPermanently remove a connected app.
Delete Connected App SecretPermanently remove a secret associated with a connected app.
Delete EASDelete a registered external authorization server (EAS).
Get Connected AppQuery a connected app by its ID.
Get Connected App SecretQuery a connected app secret and the token value using the connected app's ID.
List All Registered EASGet all external authorization servers (EASs) registered to a site.
List Connected AppsQuery all connected apps configured on a site.
List Registered EASGet an external authorization server (EAS) registered to a site.
Register EASCreate a connected app with OAuth 2.0 trust by registering an external authorization server (EAS) to a site.
Update Connected AppUpdate a connected app.
Update EAS
- Not available for Tableau Server.
Update a connected app with OAuth 2.0 trust.
Content Exploration Methods
Get batch content usage statistics
- Not available for Tableau Server
Gets usage statistics for multiple content items. The batch of can include multiple content types.
Get content search resultsSearches across all supported content types for objects relevant to the search expression specified in the querystring of the request URI.
Get Content SuggestionsReturns a specified number of suggestions for auto-completion of user input as they type. You can specify content types of suggestions and prioritize recently viewed content.
Get usage statistics for content item
- Not available for Tableau Server
Gets the usage statistics for a Tableau content item, specified by LUID and content type, such as workbook, datasource, or flow.
Custom Domain Methods
Create custom domain settings
- Not available for Tableau Server
Starts the process of custom domain setup for a Tableau site.
Delete custom domain settings
- Not available for Tableau Server
Deletes the custom domain setup for a Tableau site.
Get Custom Domain Name
- Not available for Tableau Server
Gets the custom domain for a Tableau site, if one is provisioned. For more information about how, see.
Get custom domain settings
- Not available for Tableau Server
Gets the custom domain settings for a Tableau site.
Update custom domain settings
- Not available for Tableau Server
Updates the custom domain setup for a Tableau site.
Dashboard Extensions Settings Methods - Retired
Allow dashboard extension on site - Retired in API 3.21Adds a dashboard extension to the safe list of the site you are signed into.
Block dashboard extension on server - Retired in API 3.21
- Not available for Tableau Cloud
Adds a dashboard extension to the block list of a server.
Disallow dashboard extension on site - Retired in API 3.21Deletes a specific dashboard extension from the safe list of the site you are signed into.
Get allowed dashboard extension on site - Retired in API 3.21Gets the details of a specific dashboard extension on the safe list of the site you are signed into.
Get blocked dashboard extension on server - Retired in API 3.21
- Not available for Tableau Cloud
Gets the details of a specific dashboard extension on the blocked list of a server.
List allowed dashboard extensions on site - Retired in API 3.21Lists the dashboard extensions on the safe list of the site you are signed into.
List blocked dashboard extensions on server - Retired in API 3.21
- Not available for Tableau Cloud
Lists the dashboard extensions on the blocked list of a server.
List dashboard extension settings of site - Retired in API 3.21Lists the dashboard extension settings of the site you are signed into.
List settings for dashboard extensions on server - Retired in API 3.21
- Not available for Tableau Cloud
Lists the dashboard extension settings of a server.
Unblock dashboard extension on server - Retired in API 3.21
- Not available for Tableau Cloud
Deletes a specific extension from the block list of a server.
Update dashboard extension settings of site - Retired in API 3.21Updates the settings for dashboard extensions for the site you are signed into.
Update dashboard extensions settings of server - Retired in API 3.21
- Not available for Tableau Cloud
Updates the settings for dashboard extensions of a server.
Update settings for allowed dashboard extension on site - Retired in API 3.21Updates the settings of a specific dashboard extension in the safe list of the site you are signed into.
Data Sources Methods
Add Tags to Data SourceAdds one or more tags to the specified data source.
Add Work Copy ElementsAdds field descriptions or table descriptions to a work copy. Returns HTTP 201 when every element is added. The success body omits the elements that succeeded.
Create Work CopyCreates a work copy of a published data source and returns the work copy LUID. Composable data sources and Semantic Data Model (SDM) data sources are not supported. The call is rejected when the caller already has the maximum number of open work copies.
Delete Data SourceDeletes the specified data source from a site. When a data source is deleted, its associated data connection is also deleted. Workbooks that use the data source are not deleted, but they will no longer work properly.
Delete Tag from Data SourceDeletes a tag from the specified data source.
Delete Work Copy ElementsDeletes elements from a work copy. Send elementType and name for each element. Other content is ignored. Returns HTTP 200 when every element is deleted. The success body omits the elements that succeeded.
Download Data SourceDownloads a data source in .tdsx format.
Download Data Source Encrypted KeychainGets an encrypted version of the embedded credentials from the data source. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server.
Download Data Source RevisionDownloads a specific version of a data source prior to the current one in .tdsx format. To down load the current version of a data source use the Download Data Source method.
Get Data Source RevisionsReturns a list of revision information (history) for the specified data source.
Publish Data SourcePublishes a data source on the specified site, or appends data to an existing data source.
Publish Work CopyPublishes a work copy as a data source. Send the published data source name and an optional description. The response returns the new data source LUID. A blank name is rejected.
Query Data SourceReturns information about the specified data source.
Query Data Source ConnectionsReturns a list of data connections for the specified data source.
Query Data SourcesReturns a list of published data sources on the specified site, with optional parameters for specifying the paging of large results. To get a list of data sources embedded in a workbook, use the Query Workbook Connections method.
Read Data Source ElementsReads columns, field descriptions, or table descriptions from a published data source. Set elementType to the kind of element, and optionally set name to read one element.
Read Work Copy ElementsReads columns, field descriptions, or table descriptions from a work copy. Set elementType to the kind of element, and optionally set name to read one element.
Remove Data Source RevisionRemoves a specific version of a data source from the specified site.
Update Data in Hyper ConnectionIncrementally updates data (insert, update, upsert, replace and delete) in a published data source from a live-to-Hyper connection, where the data source has multiple connections.
Update Data in Hyper Data SourceIncrementally updates data (insert, update, upsert, replace and delete) in a published data source from a live-to-Hyper connection, where the data source has a single connection.
Update Data SourceUpdates the owner, project or certification status of the specified data source.
Update Data Source ConnectionUpdates the server address, port, authentication type, username, or password for the specified data source connection.
Update Data Source ConnectionsUpdates the server address, port, authentication type, username, or password for one or more connections in a data source. To update all connections in a given data source with the same connection information, see Update Data Source Connection.
Update Data Source NowRuns an extract refresh on the specified data source.
Update Work Copy ElementsUpdates columns, field descriptions, or table descriptions on a work copy. Returns HTTP 200 when every element is updated. The success body omits the elements that succeeded.
Upload Data Source Encrypted KeychainUploads the encrypted version of the embedded credentials. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site.
Extract and Encryption Methods
Create an Extract for a Data SourceCreate an extract for a data source in a site. Optionally, encrypt the extract if the site and workbooks using it are configured to allow it.
Create Cloud Extract Refresh Task
- Not available for Tableau Server.
Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection.
For Tableau Server, see Add data source to server schedule, Add workbook to server schedule, and Add virtual connection to server schedule.
Create Extracts for Embedded Data Sources in a WorkbookCreate extracts for all embedded data sources of a workbook. Optionally, encrypt the extracts if the site and workbook using them are configured to allow it.
Decrypt Extracts in a SiteExtract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see Extract Encryption at Rest.
Delete Extract from Data SourceDelete the extract from a data source.
Delete Extract Refresh TaskDeletes the specified extract refresh task on Tableau Server or Tableau Cloud.
Delete Extracts from Virtual Connection
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Deletes the extracts from a virtual connection, which changes it from extract to live mode.
Delete Extracts of Embedded Data Sources from a WorkbookDelete all extracts of embedded data sources in a workbook.
Encrypt Extracts in a SiteExtract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see Extract Encryption at Rest.
Get Extract Refresh TaskReturns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection.
List Extract Refresh Tasks in Server Schedule
- Not available for Tableau Cloud.
Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server.
List Extract Refresh Tasks in SiteReturns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections.
Reencrypt Extracts in a SiteExtract encryption at rest is a data security feature that allows you to encrypt .hyper extracts while they are stored on Tableau Server. For more information, see Extract Encryption at Rest.
Run Extract Refresh TaskRuns the specified extract refresh task.
Update Cloud Extract Refresh Task
- Not available for Tableau Server.
Updates an extract refresh task on Tableau Cloud.
Favorites Methods
Add Data Source to FavoritesAdds the specified data source to the user's favorites.
Add Flow to FavoritesAdds the specified flow to the user's favorites.
Add Metric to Favorites - Retired in API 3.22Adds the specified metric to the user's favorites.
Add Project to FavoritesAdds the specified project to a user's favorites.
Add View to FavoritesAdds the specified view to a user's favorites.
Add Workbook to FavoritesAdds the specified workbook to a user's favorites.
Delete Data Source from FavoritesDeletes the specified data source from the user's favorites. If the specified data source is not a favorite, the operation has no effect.
Delete Flow from FavoritesDeletes the specified flow from the user's favorites. If the specified flow is not a favorite, the operation has no effect.
Delete Project from FavoritesDeletes the specified project from the user's favorites. If the specified project is not a favorite, the operation has no effect.
Delete View from FavoritesDeletes the specified view from user's favorites. If the specified view is not a favorite, the operation has no effect.
Delete Workbook from FavoritesDeletes a workbook from a user's favorites. If the specified workbook is not a favorite of the specified user, this call has no effect.
Get Favorites for UserReturns a list of favorite projects, data sources, views, workbooks, and flows for a user.
Organize FavoritesMove an item to organize a user's favorites.
Flow Methods
Add Flow PermissionsAdds permissions to the specified flow for a Tableau Server user or group. You can specify multiple sets of permissions using one call.
Add Flow Task to Server ScheduleThe Add Flow Task to Schedule method is renamed and retired for Tableau Cloud in API 3.22 (Tableau Cloud March 2024). It will remain available for Tableau Server only. For Tableau Cloud in March 2024, this method will be replaced with Create Cloud Flow Task method.
Cancel Flow RunCancels a flow run that is in progress.
Create Cloud Flow Task
- Not available for Tableau Server. Available only with a Data Management license.
Creates a flow task on Tableau Cloud, and set its schedule.
Delete FlowDeletes a flow. When a flow is deleted, its associated connections, the output and input steps, any associated scheduled tasks, and run history are also deleted.
Delete Flow PermissionDeletes the specified permission from the specified flow for a group or user.
Download FlowDownloads a flow in .tfl or .tflx format.
Download Flow Encrypted KeychainGets an encrypted version of the embedded credentials in a flow. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server.
Get Flow RunGets a flow run.
Get Flow Run TaskReturns information about the specified flow run task. This method shows you information about the scheduled task for the flow.
Get Flow Run TasksReturns a list of scheduled flow tasks for the site.
Get Flow RunsGet flow runs.
Get Linked Task
- Available only with a Data Management license.
Returns information about a specific linked task. This method shows you information about the scheduled linked task.
Get Linked Tasks
- Available only with a Data Management license.
Returns a list of scheduled linked tasks for a site.
List Flow PermissionsReturns a list of permissions for the specific flow.
Publish FlowPublishes a flow on the specified site.
Query FlowReturns information about the specified flow, including information about the project, owner, and output steps.
Query Flow ConnectionsReturns a list of data connections for the specific flow.
Query Flows for a SiteReturns the flows on a site. If the user is not an administrator, the method returns just the flows that the user has permissions to view.
Query Flows for UserReturns the flows that the specified user owns in addition to those that the user has Read (view) permissions for.
Run Flow Now
- Available only with a Data Management license.
Runs the specified flow.
Run Flow TaskRuns the specified flow run task.
Run Linked Task Now
- Available only with a Data Management license.
Runs the specified linked task.
Update FlowUpdates the project and/or owner of the specified flow.
Update Flow ConnectionUpdates the server address, port, username, or password for the specified flow connection. The connection can be an input or an output connection.
Update Flow ConnectionsUpdates the server address, port, username, or password for one or more flow connections. The connection can be an input or an output connection.
Update Flow OwnerUpdates a flow's owner.
Upload Flow Encrypted KeychainUploads the encrypted version of the embedded credentials of a flow. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site.
Identity Pools Methods
Add User to Identity Pool
- Not available for Tableau Cloud.
Add a user to a specified identity pool.
Configure Identity Store
- Not available for Tableau Cloud
Configure a new local identity store to provision users.
Create Authentication Configuration
- Not available for Tableau Cloud
Create an instance of OpenID Connect (OIDC) authentication.
Create Identity Pool
- Not available for Tableau Cloud
Create an identity pool.
Delete Authentication Configuration
- Not available for Tableau Cloud
Delete an authentication instance.
Delete Identity Pool
- Not available for Tableau Cloud
Delete an identity pool.
Delete Identity Store
- Not available for Tableau Cloud
Delete an identity store.
Get Identity Pool
- Not available for Tableau Cloud
Get information about an identity pool.
List Authentication Configurations on Server
- Not available for Tableau Cloud
List information about all authentication instances associated with identity pools.
List Identity Pools
- Not available for Tableau Cloud
List all identity pools.
List Identity Stores
- Not available for Tableau Cloud
List information about all identity store instances used to provision users.
Remove User from Identity Pool
- Not available for Tableau Cloud.
Remove a user from a specified identity pool.
Update Authentication Configuration
- Not available for Tableau Cloud
Update an authentication instance.
Update Identity Pool
- Not available for Tableau Cloud
Update information about an identity pool.
Jobs, Tasks, and Schedules Methods
Add Data Source to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh a data source to an existing server schedule on Tableau Server.
For Tableau Cloud, see Create Cloud Extract Refresh Task.
Add Virtual Connection to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server.
For Tableau Cloud, see Create Cloud Extract Refresh Task.
Add Workbook to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server.
Batch Update Schedule State
- Not available for Tableau Cloud
Updates the state of one or more schedules.
Cancel JobCancels a job specified by job ID. To get a list of job IDs for jobs that are currently queued or in-progress, use the Query Jobs method.
Create Cloud Extract Refresh Task
- Not available for Tableau Server.
Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection.
For Tableau Server, see Add data source to server schedule, Add workbook to server schedule, and Add virtual connection to server schedule.
Create Server Schedule
- Not available for Tableau Cloud.
Creates a new server schedule on Tableau Server.
For Tableau Cloud, see Create Cloud Extract Refresh Task and Create subscription.
Delete Data Acceleration TaskDeletes a data acceleration task.
Delete Server Schedule
- Not available for Tableau Cloud.
Deletes the specified schedule on Tableau Server.
For Tableau Cloud, see Delete Extract Refresh Task and Delete Subscription.
Get Data Acceleration Tasks in a SiteReturns a list of data acceleration tasks for the site.
Get Extract Refresh TaskReturns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection.
Get Server Schedule
- Not available for Tableau Cloud.
Returns detailed information about the specified server schedule on Tableau Server.
List Extract Refresh Tasks in Server Schedule
- Not available for Tableau Cloud.
Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server.
List Extract Refresh Tasks in SiteReturns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections.
List Server Schedules
- Not available for Tableau Cloud.
Returns a list of flows, extract and subscription server schedules on Tableau Server. For each schedule, the API returns the name, frequency, priority, and other information.
Query JobReturns status information about an asynchronous process that is tracked using a job. This method can be used to query jobs that are used to do the following:.
Query JobsReturns a list of active jobs on the specified site. To get details on a specific job, pass a job ID returned by this method to the Query Job method. To cancel an active job, pass a job ID returned by this method to the Cancel Job method.
Run Extract Refresh TaskRuns the specified extract refresh task.
Update Server Schedule
- Not available for Tableau Cloud.
Modifies settings for the specified server schedule, including the name, priority, and frequency details on Tableau Server.
For Tableau Cloud, see Update cloud extract refresh task and Update subscription .
Update Virtual Connection Now
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Runs an extract refresh on the specified virtual connection.
Metadata Methods
Add Data Quality Warning
- Available only with a Data Management license.
Add a data quality warning to a database, table, column, published data source, flow, virtual connection, or virtual connection table.
Add Database Permissions
- Available only with a Data Management license.
Add permissions to a database asset.
Add Default Database Permissions
- Available only with a Data Management license.
Adds default permission capabilities to a user or group for table resources in that database.
Add or Update Monitoring Quality Warning on Content
- Available only with a Data Management license.
Create or update one or more monitoring quality warnings.
Add Table Permissions
- Available only with a Data Management license.
Add permissions to a table asset.
Add Tags to ColumnAdd one or more tags to a column.
Add Tags to DatabaseAdd one or more tags to a database.
Add Tags to TableAdd one or more tags to a table.
Add Tags to Virtual Connection
- Available only with a Data Management license.
Adds tags to a virtual connection.
Batch Add or Update Data Quality Certifications
- Available only with a Data Management license.
Create or update one or more data quality certifications for different content and asset items.
Batch Add or Update Data Quality Warnings
- Available only with a Data Management license.
Add or update multiple data quality warnings on assets.
Batch Add Tags
- Available only with a Data Management license.
Add multiple tags to items that are different content and asset types.
Batch Delete Data Quality Warnings
- Available only with a Data Management license.
Delete multiple data quality warnings from assets.
Batch Delete Tags
- Available only with a Data Management license.
Delete multiple tags from items that are different content and asset types.
Create Label Category
- Available only with a Data Management license.
Creates a data label category.
Create or Update labelValue
- Available only with a Data Management license.
Creates a label value with the specified name if it doesn't exist, or updates the existing label value if the label value name already exists.
Delete Data Quality Certification by ID
- Available only with a Data Management license.
Delete a data quality certification from an asset using the data quality certification ID.
Delete Data Quality Certifications by Content
- Available only with a Data Management license.
Delete multiple data quality certifications from assets.
Delete Data Quality Warning by Content
- Available only with a Data Management license.
Delete the data quality warnings from an asset.
Delete Data Quality Warning by ID
- Available only with a Data Management license.
Delete a data quality warning from an asset using the data quality warning ID.
Delete Database Permissions
- Available only with a Data Management license.
Permanently remove the permissions applied to a database asset.
Delete Default Database Permissions
- Available only with a Data Management license.
Permanently remove the default permissions on a database asset.
Delete Label
- Available only with a Data Management license.
Deletes a data label by its LUID.
Delete Label Category
- Available only with a Data Management license.
Deletes a label category.
Delete Labels
- Available only with a Data Management license.
Deletes the data labels on one or more assets.
Delete labelValue
- Available only with a Data Management license.
Deletes a label value.
Delete Quality Warning Trigger by ID
- Available only with a Data Management license.
Permanently remove a quality warning trigger using the quality warning trigger ID.
Delete Quality Warning Triggers by Content
- Available only with a Data Management license.
Permanently remove all quality warning triggers for one or more data sources or flows, or both.
Delete Table Permissions
- Available only with a Data Management license.
Permanently remove the permissions applied to a table asset.
Delete Tag from ColumnDelete a tag from a column.
Delete Tag from DatabaseDelete a tag from a database.
Delete Tag from TableDelete a tag from a table.
Delete Tag from Virtual Connection
- Available only with a Data Management license.
Deletes a tag from a virtual connection.
Get Databases and Tables from ConnectionQuery databases and tables from the connection information in the data source (.tds or .tdsx) or workbook (.tws or .twbx) file's XML.
Get Label
- Available only with a Data Management license.
Gets a data label by its LUID.
Get Labels
- Available only with a Data Management license.
Displays information about the data labels on one or more assets.
Get labelValue
- Available only with a Data Management license.
Displays label value properties for a single label value.
Get Metadata Suggestion
- Available only with Tableau+
Gets a suggestion from generative AI about asset metadata.
List Database PermissionsGet information about the permissions on a database asset.
List Default Database PermissionsGet the default permissions applied to the database asset and its children tables.
List Label Categories on Site
- Available only with a Data Management license.
Lists all data label categories on the site.
List labelValues on Site
- Available only with a Data Management license.
Lists all label values on the site.
List Table PermissionsGet information about the permissions on a table asset.
Move Database
- Available only with a Data Management license.
Move one or more databases to a project.
Move Table
- Available only with a Data Management license.
Moves one or more tables to a project.
Query All Quality Warning Triggers by ContentGet information about all quality warning triggers for a content item.
Query Column in a TableGet information about a column in a table asset.
Query Columns in a TableGet information about the columns in a table asset.
Query Data Quality Certification by IDGet information about a data quality certification.
Query Data Quality Certifications by ContentGet all data quality certifications for content or asset items.
Query Data Quality Warning by Content
- Available only with a Data Management license.
Get information about the data quality warning for the database, table, column, published data source, flow, virtual connection, or virtual connection table.
Query Data Quality Warning by IDGet information about a specific data quality warning.
Query DatabaseGet information about a database asset.
Query DatabasesGet information about all database assets for a site.
Query Quality Warning TriggerGet information about a quality warning trigger.
Query TableGet information about a table asset.
Query TablesGet information about all table assets for a site.
Remove Column
- Available only with a Data Management license.
Permanently remove the column from a table asset.
Remove Database
- Available only with a Data Management license.
Permanently remove the database asset.
Remove Table
- Available only with a Data Management license.
Permanently remove the table asset.
Update Column
- Available only with a Data Management license.
Update the description of the column.
Update Data Quality Warning
- Available only with a Data Management license.
Update the warning type, status, and message of a data quality warning.
Update Database
- Available only with a Data Management license.
Update the database description, certify a database, set database permissions, or assign a Tableau Cloud or Server user as the database contact.
Update Label
- Available only with a Data Management license.
Updates a label by its LUID.
Update Label Category
- Available only with a Data Management license.
Updates a data label category.
Update Labels
- Available only with a Data Management license.
Creates or updates labels on one or more assets.
Update labelValue
- Available only with a Data Management license.
Updates a label value.
Update Monitoring Quality Warning
- Available only with a Data Management license.
Update a monitoring quality warning.
Update Table
- Available only with a Data Management license.
Update the table description, certify a table, or a assign a user contact to the table asset.
Metrics Methods - Retired
Delete Metric - Retired in API 3.22Deletes a specified metric from a site.
Get Metric - Retired in API 3.22Returns the details of the specified metric.
Get Metric Data - Retired in API 3.22Returns the data for the specified metric as comma separated (CSV) format. The maximum number of rows returned is 10,000.
List Metrics for Site - Retired in API 3.22Returns the metrics configured for a site.
Update Metric - Retired in API 3.22Updates the owner, project, suspended status, or name of the specified metric.
Mobile Settings Methods
Get Mobile Security Settings for ServerGets the mobile security settings for the server.
Get Mobile Security Settings for SiteGets the mobile security settings for the specified site.
Update Mobile Security Settings for SiteUpdates the mobile security sections for a specified site.
Notifications Methods
Add User to Data-Driven AlertAdds a specified user to the recipients list for a data-driven alert.
Create a WebhookCreates a new webhook for a site.
Create Data Driven Alert
- Not available for Tableau Server.
Create a data driven alert (DDA) for a view with a single data axis.
Delete a WebhookDeletes the specified webhook.
Delete Data-Driven AlertDeletes the specified data-driven alert from the specified site.
Delete User from Data-Driven AlertRemoves a specified user from the recipients list for a data-driven alert.
Get a WebhookReturns information about the specified webhook.
Get Data-Driven AlertReturns details on a specified data-driven alert, including the recipients of the alert.
Get User Notification PreferencesReturns 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.
List Data-Driven Alerts on SiteReturns a list of data-driven alerts in use on the specified site.
List WebhooksReturns a list of all the webhooks on the specified site.
Test a WebhookTests 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.
Update a WebhookModify the properties of an existing webhook.
Update Data-Driven AlertUpdate one or more settings for the specified data-driven alert; including the alert subject, frequency, and owner.
Update User Notification PreferencesUpdates user notifications preferences to enabled or disabled on the specified site. For more information about notifications, see Manage Your Account Settings.
OpenID Connect Methods
Create OpenID Connect Configuration
- Not available for Tableau Server.
Create the Tableau Cloud site's OpenID Connect (OIDC) configuration.
Get OpenID Connect Configuration
- Not available for Tableau Server.
Get details about the Tableau Cloud site's OpenID Connect (OIDC) configuration.
Remove OpenID Connect Configuration
- Not available for Tableau Server.
Disable and clear the Tableau Cloud site's OpenID Connect (OIDC) configuration.
Update OpenID Connect Configuration
- Not available for Tableau Server.
Update the Tableau Cloud site's OpenID Connect (OIDC) configuration.
Permissions Methods
Add Ask Data Lens Permissions - Retired in API 3.22Adds permissions to the specified ask data lens for a user or group. You can specify multiple sets of permissions using one request.
Add Collection PermissionsAdds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call.
Add Data Source PermissionsAdds permissions to the specified data source for a user or group. You can specify multiple sets of permissions using one call.
Add Default PermissionsAdds default permission rules for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, also adds default permission rules for database or table resources in a project for a user or group. After adding default permission rules, new resources of the type you specify that are added to the project will have those permission rules. If permissions are locked to the project, then the same is true for all existing child content of the project. For more information, see Permissions.
Add Project PermissionsAdds permissions to the specified project for a user or group. You can specify multiple sets of permissions using one call.
Add View PermissionsAdds permissions to the specified view (also known as a sheet) for a user or group. You can specify multiple sets of permissions using one call.
Add Virtual Connection Permissions
- Available only with a Data Management license.
Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call.
Add Workbook PermissionsAdds permissions to the specified workbook for a user or group. You can specify multiple sets of permissions using one call.
Add Workbook to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server.
Delete Ask Data Lens Permission - Retired in API 3.22Deletes the specified permissions to the specified ask data lens for a user or group.
Delete Collection PermissionRemoves the specified collection permission for the specified group or user.
Delete Data Source PermissionRemoves the specified data source permission for the specified group or user.
Delete Default PermissionRemoves default permission rules for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, also removes default permission rules for database or table resources in a project for a user or group. After removing default permission rules, new resources of the type you specify that are added to the project will no longer have those permission rules. If permissions are locked to the project, then the same is true for all existing child content of the project.
Delete Project PermissionRemoves the specified project permission for the specified group or user.
Delete View PermissionDeletes permission to the specified view (also known as a sheet) for a Tableau Server user or group.
Delete Virtual Connection Permission
- Available only with a Data Management license.
Removes the specified virtual connection permission for the specified group or user.
Delete Workbook PermissionDeletes the specified permission from the specified workbook for a group or user.
List Ask Data Lens PermissionsList all permissions configured for the specified ask data lens that the user has read capability for.
List Collection PermissionsReturns a list of permissions for a specific collection.
List Data Source PermissionsReturns a list of permissions for a specific data source.
List Default PermissionsReturns details of default permission rules granted to users and groups for workbook, data source, data role, lens, flow, metric, or virtual connection resources in a project for a user or group. If Tableau Catalog is enabled, this method can also return details of default permission rules granted to users and groups for database or table resources in a project.
List Project PermissionsReturns information about the set of permissions allowed or denied for groups and users in a project.
List View PermissionsReturns a list of permissions for the specific view.
List Virtual Connection Permissions
- Available only with a Data Management license.
Returns a list of permissions for a specific virtual connection.
List Workbook PermissionsReturns a list of permissions for the specific workbook.
Replace Content PermissionsReplaces existing permissions in the specified content. You can specify multiple sets of permissions using one call.
Replace Project's Default PermissionsReplaces default permissions in the specified content. If Tableau Catalog is enabled, it also adds default permission rules for database or table resources in a project. After adding default permission rules, new resources of the type you specify that are added to the project will have those permission rules. If permissions are locked to the project, then the same is true for all existing child content of the project. For more information, see Permissions.
Projects Methods
Create ProjectCreates a project on the specified site. You can also create project hierarchies by creating a project under the specified parent project on the site. To make changes to an existing project, call Update Project.
Delete ProjectDeletes the specified project on a specific site. When a project is deleted, all Tableau assets inside of it are also deleted, including assets like associated workbooks, data sources, project view options, and rights.
Query ProjectsReturns a list of projects on the specified site, with optional parameters for specifying the paging of large results.
Update ProjectUpdates the name, description, or project hierarchy of the specified project. You can create or update project hierarchies by specifying a parent project for the project that you are updating using this method.
Publishing Methods
Append to File UploadUploads a block of data and appends it to the data that is already uploaded.
Initiate File UploadInitiates the upload process for a file. After the upload has been initiated, you call Append to File Upload to send individual blocks of the file to the server. When the complete file has been sent to the server, you call Publish Data Source, Publish Flow, or Publish Workbook to commit the upload.
Publish Data SourcePublishes a data source on the specified site, or appends data to an existing data source.
Publish FlowPublishes a flow on the specified site.
Publish Virtual Connection
- Available only with a Data Management license.
Publishes a virtual connection on the specified site, either from a packaged virtual connection file (.tvcx) or from a downloaded JSON representation.
Publish WorkbookPublishes a workbook on the specified site.
Pulse Methods
Batch create Pulse subscriptions
- Not available for Tableau Server
Creates multiple subscriptions to a metric for specified users and/or groups.
Batch get Pulse subscriber counts
- Not available for Tableau Server
Gets the number of unique users subscribed to a set of metrics specified in a comma separated list of metric LUIDs.
Batch get Pulse subscriptions
- Not available for Tableau Server
Gets a batch of subscriptions, specified in a comma delimited list of subscriptions LUIDs.
Batch list metric definitions (few)
- Not available for Tableau Server
Gets the details of a batch of metric definitions and metrics on a site, specified in a brief comma delimited list of LUIDs.
Batch list metric definitions (many)
- Not available for Tableau Server
Gets the details of a batch of definitions specified in a comma delimited list of LUIDs. This method is optimized for batches with large numbers of definitions.
Batch list metrics (few)
- Not available for Tableau Server
Gets a batch of metrics from a definition, specified in a comma delimited list.
Batch list metrics (many)
- Not available for Tableau Server
Gets batches of metrics available on a server. Only metrics a user has privileges to view will be visible. This endpoint uses POST as an alternative to GET, where long lists of URL parameters could be problematic.
Create metric
- Not available for Tableau Server
Creates a metric.
Create metric definition
- Not available for Tableau Server
Creates a metric definition.
Create metric tag for user
- Not available for Tableau Server
Creates a tag for the specified metric, for the signed in user.
Create subscription
- Not available for Tableau Server
Creates a subscription to a specified metric for a specified user or group.
Delete metric
- Not available for Tableau Server
Deletes a metric.
Delete metric definition
- Not available for Tableau Server
Deletes a metric definition.
Delete metric tag
- Not available for Tableau Server
Deletes the specified metric tag.
Delete Pulse subscription
- Not available for Tableau Server
Deletes a specified subscription to a metric.
Generate basic insight bundle
- Not available for Tableau Server
Generates a basic insight bundle.
Generate breakdown insight bundle
- Not available for Tableau Server
Generates a breakdown insight bundle. This provides the BAN and breakdown groups of insights.
Generate current metric value insight bundle
- Not available for Tableau Server
Generates a bundle the current aggregated value for each metric.
Generate detail insight bundle
- Not available for Tableau Server
Generates a detail insight bundle.
Generate exploration insight bundle
- Not available for Tableau Server
Generates an exploration insight bundle. This provides the BAN, anchor, and followup groups of insights.
Generate insight brief
- Not available for Tableau Server
Generates an insight brief based on a user utterance by gathering insights for the specified metrics. For supplemental information, see.
Generate metric card image
- Not available for Tableau Server
Generates a PNG image of a Pulse metric card with full visual parity to the web UI homepage.
Generate springboard insight bundle
- Not available for Tableau Server
Generates a springboard insight bundle.
Get metric
- Not available for Tableau Server
Gets the details of the specified metric.
Get metric definition
- Not available for Tableau Server
Gets a metric definition and optionally metrics it contains.
Get or create metric
- Not available for Tableau Server
Returns the details of a metric in a definition if it exists, or creates a new metric if it does not. Also returns 'true' if a new metric was created, or 'false' if it already existed.
Get Pulse subscription
- Not available for Tableau Server
Gets a specified subscription to a metric.
Get site entitlements
- Not available for Tableau Server
Returns entitlements available for a site. If entitlements are True, then Pulse premium features are enabled for the site.
Gets recommended metrics
- Not available for Tableau Server
Gets personalized groups of metrics to recommend to a user. Only metric that the user has privileges to view will be returned.
List followed metrics groups
- Not available for Tableau Server
Gets the user's followed metrics. Optionally metrics can be grouped by characteristics like datasource, and sorted.
List metric definition measurement periods
- Not available for Tableau Server
Gets the measurement periods for the specified metric definition.
List metric definitions
- Not available for Tableau Server
Lists the metric definitions configured for a site or, optionally, the details and definition for a specific metric.
List metrics in definition
- Not available for Tableau Server
Lists the metrics contained in a metric definition.
List Pulse user preferences
- Not available for Tableau Server
Gets the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI.
List site alerts
- Not available for Tableau Server
List the alerts for the authorized user user on a specified site.
List subscriptions
- Not available for Tableau Server
Lists the subscriptions to a specified metric and/or for a specified user.
Lists all definition tags for the site.
- Not available for Tableau Server
Lists all definition tags for the site. Results can be filtered by tag value, definition name, or datasource ID. Each result includes the tag value and a count of how many definitions use it.
Update metric
- Not available for Tableau Server
Updates the specification of a metric.
Update metric definition
- Not available for Tableau Server
Updates a metric definition.
Update Pulse user preferences
- Not available for Tableau Server
Updates the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI.
Recycle Bin Methods
Delete All Recycle Bin ContentsPermanently deletes all content in a site's Recycle Bin.
Delete Recycle Bin Content ItemPermanently deletes the specified Recycle Bin content item.
Get Recycle Bin Content ItemReturns information about the specified Recycle Bin content item.
List Recycle Bin Content by TypeGets a list of Recycle Bin content of the specified type.
Restore Recycle Bin Content ItemRestores the specified content item from the Recycle Bin to a project.
Revisions Methods
Download Data Source RevisionDownloads a specific version of a data source prior to the current one in .tdsx format. To down load the current version of a data source use the Download Data Source method.
Download Workbook Revision
- Available only if version history is enabled for the specified site.
Downloads a specific version of a workbook in .twb or .twbx format.
Get Data Source RevisionsReturns a list of revision information (history) for the specified data source.
Get Workbook RevisionsReturns a list of revision information (history) for the specified workbook.
Remove Data Source RevisionRemoves a specific version of a data source from the specified site.
Remove Workbook RevisionRemoves a specific version of a workbook from the specified site.
Server Methods
Delete Server SessionDeletes a specified session. This method is not available for Tableau Cloud and is typically used in programmatic management of the life cycles of embedded Tableau sessions.
Get Current Server SessionReturns details of the current session of Tableau Server.
List Server Active Directory Domains
- Not available for Tableau Cloud.
Returns the details of the Active Directory domains that are in use on the server, including their full domain names, nicknames and IDs. If the server is configured to use local authentication, the command returns only the domain name local.
Server InfoReturns the version of Tableau Server and the supported version of the REST API.
Update Server Active Directory Domain
- Not available for Tableau Cloud.
Changes the nickname or full domain name of an Active Directory domain on the server. This method is not available on Tableau Cloud.
Site Methods
Create Site
- Not available for Tableau Cloud.
Creates a site on Tableau Server. To make changes to an existing site, call Update Site. This method isn’t available for Tableau Cloud.
Delete Site
- Not available for Tableau Cloud.
Deletes the specified site.
Get Data Acceleration Report for a SiteReturns a report about data acceleration for the site. It lets you compare page load times for before and after data acceleration is enabled.
Get Embedding Settings for a SiteReturns the current embedding settings for a specific site.
Get Recently Viewed for SiteGets the details of the views and workbooks on a site that have been most recently created, updated, or accessed by the signed in user. The 24 most recently viewed items are returned, though it may take some minutes after being viewed for an item to appear in the results.
Get User Personal SpaceGets the details of the Personal Space for the currently authenticated user.
List Authentication Configurations for Site
- Not available for Tableau Server.
List all authentications configurations on the site.
Query SiteReturns information about the specified site, with the option to return information about the storage space and user count for the site.
Query Sites
- Not available for Tableau Cloud.
Returns a list of the sites on the server that the caller of this method has access to. This method is not available for Tableau Cloud.
Query Views for SiteReturns all the views for the specified site, optionally including usage statistics.
Update Embedding Settings for SiteUpdates the embedding settings for a site. Embedding settings can be used to restrict embedding Tableau views to only certain domains.
Update Site
- Not available for Tableau Cloud.
Modifies settings for the specified site, including the content URL, administration mode, user quota, state (active or suspended), storage quota, whether flows are enabled, whether subscriptions are enabled, and whether revisions are enabled.
Subscriptions Methods
Create SubscriptionCreates a new subscription to a view or workbook for a specific user on Tableau Server and Tableau Cloud. When a user is subscribed to the content, Tableau sends the content to the user in email on the schedule that you define.
Delete SubscriptionDeletes the specified subscription on Tableau Server or Tableau Cloud.
Get SubscriptionReturns information about the specified subscription.
List SubscriptionsReturns a list of all the subscriptions on the specified site.
Update SubscriptionModifies an existing subscription on Tableau Server. You can change the subject, server schedule, and suspension state for the subscription.
Tableau Extensions Settings Methods
List Tableau extensions server settings
- Not available for Tableau Cloud.
Lists the settings for extensions of a server.
List Tableau extensions site settingsLists the settings for extensions of a site.
Update Tableau extensions server settings
- Not available for Tableau Cloud.
Updates the settings for extensions of a server.
Update Tableau extensions site settingsUpdates the settings for extensions of a site.
Tableau Knowledge Graph Methods
Create a semantic context
- Not available for Tableau Server
Create a semantic context node carrying one or more statements.
Delete a semantic context
- Not available for Tableau Server
Delete a semantic context created and managed in Tableau Knowledge, along with its statements.
Get a node by ID
- Not available for Tableau Server
Get a single node by its ID, including its semantic statements and directly connected nodes.
Get graph-health suggestions
- Not available for Tableau Server
Get a report on the health of the graph, including a score and suggested improvements.
Get the downstream impact of a node
- Not available for Tableau Server
Get the assets that depend on a node, to see the impact if it changes.
Get the lineage of a node
- Not available for Tableau Server
Get the lineage neighborhood of a node.
List edges around a node
- Not available for Tableau Server
List the edges connected to a node.
List knowledge graphs
- Not available for Tableau Server
List the knowledge graphs on the caller's Tableau site, each with its ID, name, description, status, and.
List knowledge sources
- Not available for Tableau Server
List the data sources and workbooks connected to the graph.
Search graph nodes
- Not available for Tableau Server
Search graph nodes using natural-language semantic search.
Search semantic contexts
- Not available for Tableau Server
Search semantic contexts across the graph.
Search semantic contexts attached to a node
- Not available for Tableau Server
Search the semantic contexts attached to a specific node.
Update a semantic context
- Not available for Tableau Server
Partially update a semantic context.
Tableau MCP Methods
Create Tableau MCP Settings for SiteReplaces the current list of Tableau MCP settings for a given site.
Get Tableau MCP Settings for SiteGets the list of Tableau MCP settings for a specified site.
Update Tableau MCP Settings for SiteUpdates the current list of Tableau MCP settings for a specified site.
Users and Groups Methods
Add Group to Group SetAdds group to a group set.
Add User to GroupAdds a user to the specified group.
Add User to SiteAdds a user to Tableau Server or Tableau and assigns the user to the specified site.
Create GroupCreates a group on a Tableau Cloud site or Tableau Server.
Create Group SetCreates a group set with a specified name.
Create SCIM Configuration
- Not available for Tableau Server.
Creates the System for Cross-domain Identity Management Configuration (SCIM) configuration on the Tableau Cloud site.
Create SCIM TokenGenerates the System for Cross-domain Identity Management (SCIM) token and secret.
Delete GroupDeletes the group on a specific site. Deleting a group does not delete the users in group, but users are no longer members of the group. Any permissions that were previously assigned to the group no longer apply.
Delete Group SetDeletes the group set on a specific site. Deleting a group set doesn’t delete the users in the group set, but users are no longer members of the group set. Any permissions that were previously assigned to the group set no longer apply.
Delete SCIM Configuration
- Not available for Tableau Server.
Permanently removes the System for Cross-domain Identity Management (SCIM) configuration from the Tableau Cloud site.
Delete SCIM Token
- Not available for Tableau Server.
Permanently removes the System for Cross-domain Identity Management (SCIM) token.
Delete Users from Site with CSVCreates a job to remove a list of users, specified in a .csv file, from a site.
Download User CredentialsGets credentials for a user who is being migrated to another Tableau Cloud or Tableau Server site.
Get Group SetReturns information about the specified group set including ID, name, and member groups.
Get Groups for a UserGets a list of groups of which the specified user is a member.
Get SCIM Configuration
- Not available for Tableau Server.
Gets the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site.
Get Users in GroupGets a list of users in the specified group.
Get Users on SiteReturns the users associated with the specified site.
Import Users to Site from CSVCreates a job to import the users listed in a specified .csv file to a site, and assign their roles and authorization settings.
List Group SetsLists all group sets matching optional filter and ordered by optional sort expression.
List SCIM Configurations
- Not available for Tableau Server.
Returns the System for Cross-domain Identity Management Configuration (SCIM) configurations on the Tableau Cloud site.
Query GroupsReturns a list of groups on the specified site, with optional parameters for specifying the paging of large results.
Query User On SiteReturns information about the specified user.
Remove Group from Group SetRemoves a group from the specified group set.
Remove User from GroupRemoves a user from the specified group.
Remove User from SiteRemoves a user from the specified site. The user will be deleted if they do not own any other assets other than subscriptions. If a user still owns content (assets) on Tableau Server, the user cannot be deleted unless the ownership is reassigned first.
Update GroupUpdates a group on a Tableau Cloud site or Tableau Server.
Update Group SetUpdates a group set name on a Tableau Server or Tableau Cloud site.
Update SCIM Configuration
- Not available for Tableau Server.
Updates the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site.
Update UserModifies information about the specified user.
Upload User CredentialsUploads user credentials to a site on a destination Tableau Cloud or Tableau Server.
Virtual Connections Methods
Add Tags to Virtual Connection
- Available only with a Data Management license.
Adds tags to a virtual connection.
Add Virtual Connection Permissions
- Available only with a Data Management license.
Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call.
Add Virtual Connection to Server Schedule
- Not available for Tableau Cloud.
Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server.
For Tableau Cloud, see Create Cloud Extract Refresh Task.
Create Cloud Extract Refresh Task
- Not available for Tableau Server.
Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection.
For Tableau Server, see Add data source to server schedule, Add workbook to server schedule, and Add virtual connection to server schedule.
Delete Extracts from Virtual Connection
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Deletes the extracts from a virtual connection, which changes it from extract to live mode.
Delete Tag from Virtual Connection
- Available only with a Data Management license.
Deletes a tag from a virtual connection.
Delete Virtual Connection
- Available only with a Data Management license.
Deletes a virtual connection.
Delete Virtual Connection Permission
- Available only with a Data Management license.
Removes the specified virtual connection permission for the specified group or user.
Download Virtual Connection
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Downloads a virtual connection in .tvcx format.
To download a JSON representation of a virtual connection instead, see Download Virtual Connection as JSON.
Download Virtual Connection as JSON
- Available only with a Data Management license.
Downloads a JSON-representation of a virtual connection.
To download a virtual connection as a .tvcx file, see Download Virtual Connection.
Download Virtual Connection Revision as JSON
- Available only with a Data Management license.
Downloads a JSON-representation of an earlier revision of a virtual connection.
List Virtual Connection Database Connections
- Available only with a Data Management license.
Returns information about database connections in the specified virtual connection.
List Virtual Connection Permissions
- Available only with a Data Management license.
Returns a list of permissions for a specific virtual connection.
List Virtual Connection Revisions
- Available only with a Data Management license.
Lists revisions for a virtual connection.
List Virtual Connections
- Available only with a Data Management license.
Returns a list of available virtual connection names and IDs.
Publish Virtual Connection
- Available only with a Data Management license.
Publishes a virtual connection on the specified site, either from a packaged virtual connection file (.tvcx) or from a downloaded JSON representation.
Update Virtual Connection
- Available only with a Data Management license.
Updates a virtual connection's name, owner, project, or certification status.
Update Virtual Connection Database Connections
- Available only with a Data Management license.
Updates the server address, port, username, or password for the specified database connection in a virtual connection.
Update Virtual Connection Now
- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.
Runs an extract refresh on the specified virtual connection.
Workbooks and Views Methods
Add Tags to ViewAdds one or more tags to the specified view.
Add Tags to WorkbookAdds one or more tags to the specified workbook.
Delete Custom ViewDeletes the specified custom view.
Delete Tag from ViewDeletes a tag from the specified view.
Delete Tag from WorkbookDeletes a tag from the specified workbook.
Delete ViewDeletes a view from a workbook.
Delete WorkbookDeletes a workbook. When a workbook is deleted, all of its assets are also deleted, including associated views, data connections, and so on.
Download View Crosstab ExcelDownloads an Excel (.xlsx) file containing crosstab data from a view that the user has permission to access in a workbook. If a crosstab is exported from a dashboard, data from only the first view in the dashboard will appear in the .xlsx file. Downloads of data from story dashboards are not supported at this time.
Download WorkbookDownloads a workbook in .twb or .twbx format.
Download Workbook Encrypted KeychainGets an encrypted version of the embedded credentials from the workbook. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server.
Download Workbook PDFDownloads a .pdf containing images of the sheets that the user has permission to view in a workbook.
Download Workbook PowerPointDownloads a PowerPoint (.pptx) file containing slides with images of the sheets that the user has permission to view in a workbook. Download Images/PDF permissions must be enabled for the workbook (true by default). If Show sheets in tabs is not selected for the workbook, only the default tab will appear in the .pptx file.
Download Workbook Revision
- Available only if version history is enabled for the specified site.
Downloads a specific version of a workbook in .twb or .twbx format.
Get Custom ViewGets the details of a specified custom view.
Get Custom View DataReturns a specified custom view rendered as data in comma separated value (CSV) format.
Get Custom View ImageDownloads an image file of the specified custom view.
Get Custom View PDFReturns a specified custom view rendered as a .pdf file.
Get Recommendations for Views - Deprecated in API 3.19Gets a list of views that are recommended for a user.
Get ViewGets the details of a specific view.
Get View by PathGets the details of all views in a site with a specified name.
Get WorkbookReturns information about the specified workbook, including information about views and tags.
Get Workbook Downgrade InfoReturns a list of the features that would be impacted, and the severity of the impact, when a workbook is exported as a downgraded version (for instance, exporting a v2019.3 workbook to a v10.5 version).
Get Workbook RevisionsReturns a list of revision information (history) for the specified workbook.
Hide a Recommendation for a View - Deprecated in API 3.19Hides a view from being recommended by the server by adding it to a list of views that are dismissed for a user.
List Custom ViewsGets a list of custom views on a site. The list includes details of each custom view.
List Users with Custom View as DefaultGets the list of users whose default view is the specified custom view.
Publish WorkbookPublishes a workbook on the specified site.
Query View DataReturns a specified view rendered as data in comma separated value (CSV) format.
Query View ImageDownloads an image file of the specified view.
Query View PDFReturns a specified view rendered as a .pdf file.
Query View Preview ImageReturns the thumbnail image for the specified view.
Query Views for SiteReturns all the views for the specified site, optionally including usage statistics.
Query Views for WorkbookReturns all the views for the specified workbook, optionally including usage statistics.
Query Workbook ConnectionsReturns a list of data connections for the specific workbook.
Query Workbook Preview ImageReturns the thumbnail image as a PNG file for the specified workbook. Usually the image that is returned is for the first sheet in the workbook.
Query Workbooks for SiteReturns the workbooks on a site.
Query Workbooks for UserReturns the workbooks that the specified user owns in addition to those that the user has Read (view) permissions for.
Set Custom View as Default for UsersSets the specified custom for as the default view for up to 100 specified users. Success or failure for each user is reported in the response body.
Unhide a Recommendation for a View - Deprecated in API 3.19Unhides a view from being recommended by the server by removing it from the list of views that are dimissed for a user.
Update Custom ViewChanges the owner or name of an existing custom view.
Update WorkbookModifies an existing workbook, allowing you to change the owner or project that the workbook belongs to and whether the workbook shows views in tabs. Updated workbooks can optionally be marked to appear in the recently viewed list.
Update Workbook ConnectionUpdates the server address, port, authentication type, username, or password for the specified workbook connection.
Update Workbook ConnectionsUpdates the server address, port, authentication type, username, or password for one or more connections in a data source. To update all connections in a given data source with the same connection information, see Update Workbook Connection.
Update Workbook NowRefreshes the specified workbook.
Update Workbook Thumbnail ImagesUpdates a workbook's thumbnail images.
Upload Workbook Encrypted KeychainUploads the encrypted version of the embedded credentials. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site.
Validate Uploaded WorkbookValidates a Tableau workbook (TWB) file that already exists in temporary storage on Tableau Cloud or Tableau Server. The TWB is validated against the TWB XSD schema and verifies that it can be loaded in Tableau.
Validate WorkbookValidates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau.
Validate Workbook and UploadValidates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau. If validation succeeds, this method stores the TWB in a temporary location on Tableau Cloud or Tableau Server for further use.
[Skip to main content](#main-content) # Testing and Troubleshooting REST API Calls Usually, you make REST API calls to Tableau Server by writing a program in Python, Ruby, Java, C#, or other programming language that supports HTTP requests. However, if you just want to experiment with API calls, you can quickly make REST calls using various tools that let you set the HTTP header and body values, issue a request, and then see the results. ## Using command-line utilities to test Another option for testing REST API calls is to make requests using a tool like [cURL](http://curl.haxx.se/docs/manpage.html) or [Wget](http://www.gnu.org/software/wget/). The following example shows a cURL command that signs in to the server. The command requires you to pass XML information in the body of the request. An easy way to pass XML is to create it in a text file and then reference the text file in the cURL command by using the \-d option. You can specify the HTTP verb (GET, POST, PUT, DELETE, etc.) by using the \-X option. `curl https://MY-SERVER/api/3.29/auth/signin -X POST -d @signin.xml` The following is the content of the sigin.xml file that's referenced by the \-d option: ``` ``` The return values for requests that you issue at the command line are displayed on the command line. If you want to capture the output, you can typically redirect the command to a file, as in the following example: `curl https://MY-SERVER/api/3.29/auth/signin -X POST -d @signin.xml > restapi-output.txt` Most Tableau Server REST API requests require a header named X-Tableau-Auth that includes the authentication token that’s returned by a call to the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) method. Command-line utilities typically let you set header values for the request. The following example shows a cURL command that gets a list of users from a site. The command includes a value for the X-Tableau-Auth header, which you pass using the \-H option. `curl http://MY-SERVER/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d/users/ -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Using browser-based options to test You can also test REST calls by using add-ins or extensions in your browser. Some popular apps for testing REST APIs in Google Chrome are [Postman](https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm), [Advanced REST client](https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo), and [Rest Web Service Client](https://chrome.google.com/webstore/detail/rest-web-service-client/ecjfcmddigpdlehfhdnnnhfgihkmejin). For Mozilla Firefox there are [REST Client](http://restclient.net/) and [REST Easy](https://addons.mozilla.org/en-US/firefox/addon/rest-easy/). (Check the app store for your browser to find testing tools.) **Important**: Some websites, such as hackst.com and apigee.com, allow you to issue REST API requests for testing. These will work for your Tableau Server testing only if your server is accessible publicly. If you do use a website to test REST APIs, be aware that you are posting potentially sensitive information to a public site. Browser-based REST clients typically let you use a form to enter a URI, XML for the body, and header values. When you send the request, the results are displayed in a pane in the browser. The following illustration shows a session of a browser-based REST tool where a user has made a request using the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#sign_in) method and has gotten a response from the server. ![](/tableau/next/en-us/api/rest_api/en-us/Img/rest-api-concepts-test-browser.png) ## Using desktop options to test You can also test REST API methods using desktop applications. One choice is [RESTClient](https://github.com/wiztools/rest-client), which is written in Java and works on multiple platforms. ## Troubleshooting If REST API calls are not working the way you expect, you can troubleshoot them several ways. ### Examine error codes If an error occurs during a request, the response includes both an HTTP status code (like 400, 403, or 404) and an `` element in the response body. The `` tag includes an error code that provides detailed information about the error. For information about errors, see [Handling Errors in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm) . The documentation for individual methods in the API lists the error codes that a method might return. ### Examine requests and responses It can be particularly helpful for troubleshooting to examine the raw requests that go between your client and the server. By examining the contents of each request (the HTTP verb and URI, the headers, and the request and response bodies) and comparing those to the documentation, you can often determine why a REST method is not working as it should. For Windows, you can use [Fiddler](http://www.telerik.com/fiddler), which is a web proxy tool that lets you examine and edit web requests. A similar tool is [Charles HTTP proxy](http://www.charlesproxy.com/), which works on Windows, OS X, and Linux. Other tools include: - [mitmproxy](http://mitmproxy.org/), a tool for OS X, Linux, and OpenBSD. - The browser extensions mentioned under [Using browser-based options to test](#testing_using_browser-options) earlier in the topic. You can use extensions in Chrome and Firefox to examine requests that you make using tools like Postman and Advanced REST client. - [Wireshark](https://www.wireshark.org/), a protocol analyzer that provides very detailed information about network traffic, including HTTP. ### Examine log files Requests that you make to Tableau Server using the REST API result in log file entries on the server. You can examine the following log files to help troubleshoot REST API issues: - log-file-location\\httpd\\access.date-time-stamp.log (for example, `access.2015_05_11_00_00_00.log`). - log-file-location\\logs\\vizportal\\vizportal-process-number.log (for example `vizportal-0.log`) For information about how to generate a snapshot of log files, see [Archive Log Files](https://help.tableau.com/current/server/en-us/help.htm#logs_create.htm). To learn more about log file locations, see [Server Log File Locations](https://help.tableau.com/current/server/en-us/logs_loc.htm). [Skip to main content](#main-content) # Understand Workbook Impact on Your Database Using Query Tagging ## Query Tagging Overview Query tagging enables Tableau Server administrators to trace the specific Tableau activity that sends queries to their databases. Query tagging is enabled by default for Hyper, Snowflake, and Teradata data connections, and can be enabled for other activities that generate queries. A common use case for query tagging begins when a database administrator notices long-running or failed database queries. On Tableau servers with multiple sites, workbooks, and data sources, databases queries can be sourced from many different assets. Without query tagging, it's hard to understand which Tableau asset is responsible for which query. With query tagging enabled, events in the source database's logs are tagged with the following attributes: - Workbook, worksheet, or dashboard LUID _(Some queries are not associated with an identifiable workbook, worksheet, or dashboard and may not be tagged with these attributes. For instance, queries generated by activities of Ask Data, Accelerated workbooks, and Tableau Prep features are not currently supported.)_ - Currently authenticated user name _(This tag is emitted only for Tableau Server sites, and is not supported for Tableau Cloud. Also note, some queries will not have an associated user and will not be tagged with a user name. These include queries generated from backgrounder jobs.)_ - Currently authenticated user LUID _(As with user name, some queries do not have an associated user and will not be tagged with a user LUID.)_ - Site LUID ### Query tagging in Tableau Cloud - Query tagging is enabled by default and fully supported for Hyper, Snowflake, and Teradata data connections. - Query tagging for other data connection types isn't currently supported, but is planned for a future release. ### Query tagging in Tableau Server 2023.3 and later (API version 3.21 and later) - Query tagging is enabled by default and fully supported for Hyper, Snowflake, and Teradata data connections. - You can disable query tagging for Snowflake by using TSM to set the value of [`native_api.ResourceLuidsInSnowflakeSessionQueryTagsEnabled`](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#ResourceLuidsInSnowflakeSessionQueryTagsEnabled) to `false`. Set it to `true` to enable it again. - You can disable query tagging for Teradata by using TSM to set the value of [`native_api.ResourceLuidsInTeradataSessionQueryBandsEnabled`](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#ResourceLuidsInTeradataSessionQueryBandsEnabled) to `false`. Set it to `true` to enable it again. - Enable query tagging globally (for all data connections) using the `tsm configuration set` command with the [`native_api.UserInfoInGeneratedSQLEnabled`](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#UserInfoInGeneratedSQLEnabled)) key. Note: Although query tagging can be enabled globally for all data connections, it's only fully supported on Hyper, Snowflake, and Teradata data connections. Some types of data connections do not allow query tagging, even when it's globally enabled, and others may not work as expected. When you enable query tagging globally, test the results when you're using data connections that aren't fully supported. - Metadata and command queries are tagged. ### Query tagging in Tableau Server 2021.2 - 2023.1 (API version 3.12 - 3.19) - Query tagging is enabled by default and fully supported for Hyper, Snowflake, and Teradata data connections. - You can disable query tagging for Snowflake by using TSM to set the value of [`native_api.ResourceLuidsInSnowflakeSessionQueryTagsEnabled`](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#ResourceLuidsInSnowflakeSessionQueryTagsEnabled) to `false`. Set it to `true` to enable it again. - You can disable query tagging for Teradata by using TSM to set the value of [`native_api.ResourceLuidsInTeradataSessionQueryBandsEnabled`](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#ResourceLuidsInTeradataSessionQueryBandsEnabled) to `false`. Set it to `true` to enable it again. - For other connections, enable query tagging on a connection-by-connection basis using REST API version 3.12-3.22 and the [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) or [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection) methods with the `queryTaggingEnabled` attribute. Note: The `queryTaggingEnabled` attribute of the [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) and [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection) methods is deprecated starting in Tableau Server 2024.2 (API 3.23). - The [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) and [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection) methods do not support modifying connections to data sources that require OAuth or multi-factor authentication (for example, BigQuery), so it is not possible to enable query tagging for these connections using the REST API. Use the `tsm set native_api.UserInfoInGeneratedSQLEnabled` command in Tableau Server 2023.3 or later to enable query tagging for all data connections instead. ## Find the Tableau Origin of Queries to Your Database Once an issue with SQL queries to your database is identified, enable query tagging to capture metadata for troubleshooting. At a high level the process for investigating an issue might look like: 1. **IDENTIFY THE ISSUE IN YOUR DATABASE:** Your database administrator notices a recurring query event that regularly shows an unexpectedly long run time. They call you, as Tableau administrator, to understand where the query originates and discuss how to make things more efficient. 2. **ENABLE QUERY TAGGING FOR YOUR SERVER:** (This step is not required for data connections using Hyper, Snowflake, or Teradata, because query tagging is enabled by default for those data connections.) To understand how the problem query event is tied to your workbook(s), you first need to understand what connections are making queries to the database. **In Tableau Server 2023.3 (API version 3.21 and later):** Use TSM to enable query tagging for all content on a server by setting [`native_api.UserInfoInGeneratedSQLEnabled`](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#UserInfoInGeneratedSQLEnabled) to true. **In Tableau Server 2021.2 - 2023.1 (API version 3.12 - 3.19):** Use the Tableau REST API [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) and [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection) methods to enable query tagging for connections. The Python Script Example section below shows one possible way to do this. 3. **LOOK FOR THE TABLEAU QUERY ORIGINATOR IN YOUR DATABASE MONITORING:** Find an instance of the problematic query in your database log, history, or analytics. You will see that the related query has a comment string appended beginning with `/* "tableau-query-origins": "..." */`. That string includes the Tableau asset LUID and other attributes listed above from the originating workbook, dashboard, or view. Note, for Snowflake and Teradata the query originator data is not in the SQL text. For Snowflake connections, the query origins information is in the [Session Query Tag](https://docs.snowflake.com/en/sql-reference/parameters.html#query-tag). For Teradata connections, the query origins information is in the [Session Query Band](https://docs.teradata.com/r/Enterprise_IntelliFlex_VMware/SQL-Data-Definition-Language-Detailed-Topics/END-LOGGING-SET-TIME-ZONE/SET-QUERY_BAND). 4. **EXAMINE THE ORIGINATING TABLEAU RESOURCE:** Use the Tableau asset LUID to locate and troubleshoot the source of the problematic queries. ## Python Script Example (for API 3.12 through 3.21) Note: The `queryTaggingEnabled` attribute of the [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) and [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection) methods is deprecated after Tableau Server 2023.3 (API 3.21). Starting in Tableau Server 2023.3 (API version 3.21 and later), enable query tagging globally instead, using the `tsm configuration set` command with the [`native_api.UserInfoInGeneratedSQLEnabled`](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#UserInfoInGeneratedSQLEnabled) key. The Python script in this section illustrates how to use the REST API to find and enable query tagging for the connections that use your database’s server address. To find each of these connections, using your Tableau server address, auth token, and site LUID, the script: - Iterates through each data source in the site using [query data sources](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_data_sources). You could also choose to iterate through each workbook using [query workbooks](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbooks), instead. Where workbooks on a site share data sources, choose using data source connections to find which resource originates a query. To include embedded data sources, use workbook connections. - For each data source, iterates through each of its connections using [query data source connections](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_source_connections). If you queried workbooks, then use [query workbook connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbook_connections). - For each connection that uses your database as its serverAddress, enable query tagging for those connections by setting `queryTaggingEnabled=true` in a request to [update data source connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) or [update workbook connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection). ``` import requests # Contains methods used to make HTTP requests import xml.etree.ElementTree as ET # Contains methods used to build and parse XML import sys import math import getpass VERSION = 3.9 # up to 3.22 xmlns = {'t': 'http://tableau.com/api'} class ApiCallError(Exception): pass class UserDefinedFieldError(Exception): pass def _encode_for_display(text): """ Returns an ASCII-encoded version of the text. """ return text.encode('ascii', errors="backslashreplace").decode('utf-8') def _check_status(server_response, success_code): if server_response.status_code != success_code: parsed_response = ET.fromstring(server_response.text) error_element = parsed_response.find('t:error', namespaces=xmlns) summary_element = parsed_response.find('.//t:summary', namespaces=xmlns) detail_element = parsed_response.find('.//t:detail', namespaces=xmlns) code = error_element.get('code', 'unknown') if error_element is not None else 'unknown code' summary = summary_element.text if summary_element is not None else 'unknown summary' detail = detail_element.text if detail_element is not None else 'unknown detail' error_message = '{0}: {1} - {2}'.format(code, summary, detail) raise ApiCallError(error_message) return def get_datasource_connections(server, auth_token, site_id, datasource_id): url = server + "/api/{0}/sites/{1}/datasources/{2}/connections?fields=id,serverAddress".format(VERSION, site_id, datasource_id) server_response = requests.get(url, headers={'x-tableau-auth': auth_token}) _check_status(server_response, 200) xml_response = ET.fromstring(_encode_for_display(server_response.text)) return xml_response.findall('.//t:connection', namespaces=xmlns) def get_datasource_and_connection_ids(server, auth_token, site_id): connected_server_address = "your_database_.test.tsi.lan" print("get ids") url = server + "/api/{0}/sites/{1}/datasources?fields=id".format(VERSION, site_id) server_response = requests.get(url, headers={'x-tableau-auth': auth_token}) _check_status(server_response, 200) xml_response = ET.fromstring(_encode_for_display(server_response.text)) id_pairs = [] datasources = xml_response.findall('.//t:datasource', namespaces=xmlns) for datasource in datasources: connections = get_datasource_connections(server, auth_token, site_id, datasource.get('id')) for connection in connections: if connection.get('serverAddress') == connected_server_address: id_pair = ( datasource.get('id'), connection.get('id') ) id_pairs.append(id_pair) print(id_pair) return id_pairs def update_datasource_connection(server, auth_token, site_id, datasource_id, connection_id): xml_request = ET.Element('tsRequest') connection_element = ET.SubElement(xml_request, 'connection', queryTaggingEnabled=true) xml_request = ET.tostring(xml_request) url = server + "/api/{0}/sites/{1}/datasources/{2}/connections/{3}".format(VERSION, site_id, datasource_id, connection_id) server_response = requests.put(url, data=xml_request, headers={ 'x-tableau-auth': auth_token }) _check_status(server_response, 200) def main(): server = "http://your_tableau_server" auth_token = "54RO8RefTAuU5LlfJ0dhyQ|siwMGk8Ad5woJK7Jsor2Z8Mj7CYmGTFO" site_id = "b27009a5-7b4f-44d1-ba9e-4ad9ae22b97d" datasource_and_connection_ids = get_datasource_and_connection_ids(server, auth_token, site_id) for datasource_and_connection_id in datasource_and_connection_ids: update_datasource_connection(datasource_and_connection_id[0], datasource_and_connection_id[1]) ``` [Skip to main content](#main-content) # Update Data in Published Live-to-Hyper Data Sources You can modify (insert, update, upsert, replace, and delete) data in a published data source that has a live-to-Hyper connection. The origin of data for a live-to-Hyper connection is a Hyper or Parquet file/database. Incremental update is not currently supported for other forms of extracts. To update a published data source, use the [Update Data in Hyper Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_in_hyper_data_source) method, or for data sources with multiple connections, or the [Update Data in Hyper Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_in_hyper_connection) method. **Working with Parquet files** \- When publishing a Parquet file to a data source through a live-to-Hyper connection, the files are converted to Hyper files. You may want to publish a copy of your original Parquet file to retain that data in its native format. \- A data source with a live-to-Hyper connection to data in a Hyper file converted from Parquet can only have a single connection. \- When incrementally updating that data from that connection, using the Update Hyper in Data Source method, the Parquet file is not converted to Hyper. In brief, to make an incremental update to your published live-to-Hyper data, you upload current data from a specified source (payload), and then describe the actions you want to perform to update your published hyper data source based on that payload. Actions can impact fields, rows, columns, and tables based on conditions you describe, such as date range, field value, and row, column, or table name. Being able to do incremental updates can help you manage data published to Tableau Server or Tableau Cloud more efficiently. They can be particularly helpful in scenarios where data changes frequently. Incremental update can enable you to: - Bring in bigger data over time - Achieve analytics on fresher data due to more frequent updates - Reduce the time spent on backgrounder jobs - Connect to new data sources that require update efficiency, for example, streaming systems, time-series databases, and change-data-capture databases - Use rolling windows by deleting the data that falls outside of the window - Efficiently update data and permissions efficiently and separately to support row-level security scenarios. ## Upload Fresh Data to a Hyper Payload File The payload file is a Hyper file containing data freshly uploaded data from your source database. Upload the payload files first using the file upload API. We recommend using the [Hyper API](https://help.tableau.com/current/api/hyper_api/en-us/index.html) to create the payload file. For ad-hoc experiments, you might also use files created through other means, such as Tableau Prep. To upload the payload to your server: - Create an "upload session" by using the [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload) endpoint. - Make repeated calls to [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload) until the complete file is uploaded. - The returned upload-id will be used next with the Update Data Source endpoint which will consume the file. Each uploaded payload can be consumed by a single Update Data request. Trying to reuse the same upload-id with multiple Update Data jobs will result in an error. **Note:** While Hyper Update REST API methods make incremental changes much more efficient, multiple simultaneous update requests and large changes in large datasets can overwhelm Tableau server background processes. To mitigate this issue, Hyper Update requests are limited by the server configuration setting `api.server.update_uploaded_file.max_size_in_mb`. Starting in Tableau Server 2022.1 the default for this setting is 100MB. In previous versions, the Tableau Server default limit was 10MB. In Tableau Cloud March 2022 and later, the default limit is fixed at 100MB. Where heavy incremental update traffic is expected, we recommend you use a chunking strategy to limit the size of each update, and fine tune `max_size_in_mb` value to optimize performance for your exact conditions. ## Update the Data from Your Payload to Your Published Hyper File There are two endpoints to choose from, depending on how your data source connections are structured. All other aspects of the endpoints are the same, including request and response bodies, and permissions. ### URI For a data source with a single connection, use the PATCH method of the [Update Data in Hyper Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_in_hyper_data_source) endpoint. PATCH /api/api-version/sites/site-id/datasources/datasource-id/data?uploadSessionId=upload-session-id A data source can contain multiple connections and federate them. So, in cases where there is more than one connection, the PATCH method of the [Update Data in Hyper Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_in_hyper_connection) endpoint adds an additional `connection-id` path parameter, used to specify which Hyper file to modify: PATCH /api/api-version/sites/site-id/datasources/datasource-id/connections/connection-id/data?uploadSessionId=upload-session-id You also can use [Update Data in Hyper Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_in_hyper_connection) for single connection data sources where the connection-id is already known to you. ### Request Header For this PATCH request, the following fields must be specified in the request header: - `x-tableau-auth`: An authorization token, as described in [Signing In and Signing Out (Authentication)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm). - `content-type`: This must be `application/json`, because the REST API endpoint only accepts JSON. - `RequestID`: A user-generated identifier that uniquely identifies a request. If the server receives more than one request with the same ID within 24 hours, all subsequent requests will be treated as duplicates and ignored by the server. This can be used to guarantee idempotency of requests. In other words, it prevents the same job from being run more than once in case of events like network anomalies or client crashes. ### Request body The request body contains an `action` batch description of the operations to be performed on the target data. See the following sections for details and examples. ### Response body The response body returns a `job-id` for the async job that will carry out the data operations described in the action batch. Use the `job-id` to [query the status of a job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) for a data update, or to [cancel the scheduled job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#cancel_job) for an update. The changes are executed asynchronously by an update job on a backgrounder. ## Action batch descriptions Action batch descriptions are the portion of a request body that are a JSON-encoded description of the operations to be performed on the Hyper file currently published on the server. Those actions cover INSERTs, UPDATEs and DELETEs, but not READ/SELECT. The action batch can reference the uploaded Hyper file as a source for the actions. The actions inside an action batch are executed sequentially from first to last. Each action batch is executed atomically. This means that if any of the operations inside an action batch fails, all of the actions from the update batch will be discarded. The top-level structure of this JSON request is illustrated by this example: ``` { "actions": [ , , ... ] } ``` At the top-level, there is only one parameter. - `actions`: (array, required): a non-empty list of actions to be performed. The format of the individual actions is described below. At the next level, there are several parameters. - `action` (string; required): The type of action: insert, update, delete, replace, or upsert. - `target-table` (string; required): The table name inside the target database in which we will modify data. - `target-schema` (string; required): The name of a schema inside the target Hyper file published on the server. Where there is a single schema, no value is needed and the request will default to the name of that single schema. Where the target Hyper has multiple schemas, the name of the schema you want to use is **required**. - `source-tabl`e (string; required): The table name inside the source database in which the data will be modified. - `source-schema` (string; required): The name of a schema inside the freshly uploaded source Hyper payload. Where there is a single schema, no value is needed, and the request will default to the name of that single schema. Where the target Hyper has multiple schemas, the name of the schema you want to use is **required**. - `condition` (condition-specification; required): specifies the condition used to select the columns to be modified. This is only used with the update, delete, and upsert actions. By default, Hyper files created by Tableau use "Extract" for both schema and table name. For simplicity, the samples in this document do not have schemas. The source and target columns will be mapped to each other based on their names. Column names need to match exactly, including whitespace and case sensitivity. ### Insert action The "insert" action appends one or more rows from a table inside the uploaded Hyper file into the updated Hyper file on the server. For example: ``` {"action": "insert", "source-table": "added_users", "target-table": "current_users" } ``` ### Update action The "update" action updates existing tuples inside the target table. It uses a condition to decide which rows to update. For example: ``` {"action": "update", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "eq", "target-col": "row_id", "source-col": "update_row_id"} } ``` ### Delete action The "delete" action deletes tuples from the target table. It uses its condition to determine which rows to delete. It is an error if the source table contains any additional columns not referenced by the condition. Example 1 ``` {"action": "delete", "target-table": "my_extract_table", "condition": { "op": "lt", "target-col": "col1", "const": {"type": "datetime", "v": "2020-06-00T00:00:00.00Z"}} } ``` Example 2 ``` {"action": "delete", "target-table": "my_extract_table", "source-table": "deleted_row_id_table", "condition": {"op": "gt", "target-col": "id", "source-col": "deleted_id"} } ``` ### Replace action The "replace" action is syntactic sugar for a delete action removing all tuples from an existing table followed by an insert which copies all data from an uploaded table into an existing table. The schema of the existing and the replacement table must match exactly. Columns are matched by name, column order is irrelevant. All matched column names and their types (ignoring NOT NULL modifiers) must be identical. ### Upsert action The "upsert" action updates a tuple inside the target table, if such a tuple exists. If no such tuple exists, a new tuple will be inserted. It uses a condition to decide which tuples to update. For example: ``` {"action": "upsert", "target-table": "my_data", "source-table": "uploaded_table", "condition": {"op": "gt", "target-col": "row_id", "source-col": "update_row_id"} } ``` ### Conditions Some actions, such as update, delete, and upsert require you to specify a condition based on which the affected rows will be selected. A condition can be: - a top-level constant `true` - a `condition` consists of one or multiple "predicate" statements combined with the logical operators `OR` and `AND`. `OR` and `AND` can be nested. - a "predicate statement using one of the following operators that is a comparison of one column from the source table against one column from the target table or a comparison of a column from the source or target table against a constant. The comparison operators are: - `eq`: equal to - `neq`: not equal to - `gt`: greater than - `lt`: less than - `gte`: greater than or equal to - `lte`: less than or equal to - `is`: a comparison for NULL handling - `has`: a comparison operator that checks whether a specified string is contained in a column - for example, the following action would delete all rows from a table in Hyper where the name field contains the string “ad”: ``` { "action": "delete", "target-table": "users", "condition": {"op": "has", "source-col": "name", "const": {"type": "string", "v": "ad"}} } ``` #### Constants Conditions either apply to two columns or a single column and a constant. A constant is a combination of two fields: `type` and `v`. The following types are supported: `boolean`, `integer`, `double`, `string`, and `datetime`. Boolean specifies either “true” or “false”. It is not case sensitive. Datetime. A date-time with a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30Z (for UTC time) or 2007-12-03T10:15:30+0100 (for a timezone UTC+1:00). #### Conditions Examples: ``` # Conditions for: target_table.date1 is less than 2018-12-06T19:21:12.12Z (the datetime is in ISO 8601 format) {"op": "lt", "target-col": "date1", "const": {"type": "datetime", "v": "2018-12-06T19:21:12.12Z"}} # Conditions for: source_table.id = target_table.id {"op": "eq", "source-col": "id", "target-col": "id"} # Conditions for: source_table.key_part1 = target_table.key_part1 and # source_table.key_part2 = target_table.key_part2 {"op": "and", "args": [{"op": "eq", "source-col": "key_part_1", "target-col": "key_part_1"}, {"op": "eq", "source-col": "key_part_2", "target-col": "key_part_2"}] } # Conditions for: target_table.my_column IS NOT DISTINCT FROM NULL # (where 'null' is a string value). type can be any type {"op": "is", "target-col": "my_column", "const": {"type": "string", "v": null}} ``` ## Action Examples ### Single-table append A single-table append can be expressed as: ``` [ {"action": "insert", "source-schema": "extract", "source-table": "new_data", "target-schema": "Extract", "target-table": "Extract"} ] ``` The user supplies a Hyper file containing a table named "new\_data", which has a compatible schema for insertion into the "Extract" table inside the existing "Extract". ### Multi-table append A multi-table append can be expressed as: ``` [ {"action": "insert", "source-schema": "extract", "source-table": "new_customers", "target-schema": "extract", "target-table": "customers"} {"action": "insert", "source-schema": "extract", "source-table": "new_items", "target-schema": "extract", "target-table": "items"} ] ``` The user supplies a Hyper file containing two tables, the "new\_customers" and the "new\_items" table, both having schemas compatible with the "customers" and "items" tables inside the existing data source. ### Incremental refresh on star-schema databases In a star-schema, there is usually one large fact table and multiple smaller dimension tables. The fact tables are related to the dimension table based on a key-foreign key table. One common example is, for example, a schema with an "ad\_views" table (fact table), a "marketing\_campaigns" table (dimension table), and an "ad\_customer" table. In such cases, the fact table usually has an incremental key available. This key is usually a date, for example, the "ad\_view\_date", the "creation\_date" or an incremental id. This allows newly added rows to be fetched for the fact table. The dimension tables, however, usually don’t provide such an incremental key, and hence it is not possible to determine which rows were added since the last refresh. As such, dimension tables usually require a full refresh. You can express this scenario using ``` [ {"action": "replace", "source-table": "campaigns", "target-table": "marketing_campaigns"}, {"action": "replace", "source-table": "ad_customers", "target-table": "ad_customers"}, {"action": "insert", "source-table": "new_ad_views", "target-table": "ad_views"}, ] ``` and providing a Hyper file inside which - the "campaigns" table in the uploaded Hyper file contains a complete copy of the new list of campaigns. This list will completely replace the list inside the existing Hyper file. - same for the "ad\_customer" table - the "new\_ad\_views" table contains only the new ad\_views since the last refresh. Those ad views will be appended to the existing entries inside the existing Hyper file. ### Incremental refresh on snowflake-schemas and multi-fact table schemas In Snowflake schemas and multi-fact table schemas, there are usually multiple tables with incremental keys, which can be used to determine the set of new rows created since the last extract refresh. For example, assume that the "ad\_customer" table also contains a "creation\_date" column. In this case, your client-side logic can create incremental change sets not only for one, but for multiple tables. In such cases, you can use the following to add tuples to both the "ad\_customers" and the "ad\_views" table, while still doing a full refresh for the "marketing\_campaigns" table. ``` [ {"action": "replace", "source-table": "campaigns", "target-table": "marketing_campaigns"}, {"action": "insert", "source-table": "new_ad_customers", "target-table": "ad_customers"}, {"action": "insert", "source-table": "new_ad_views", "target-table": "ad_views"}, ] ``` ### Windowed extracts Windowed extracts and rolling-window extracts usually contain records for recent events, but exclude historical data beyond a certain cutoff. For example, "extract all sales data for the last 3 months". A single-table windowed extract can be expressed as follows where you chose the deletion condition in accordance with the cutoff-criterium (in this example: remove all rows where the column "creation\_date" contains a date before June 2020.) ``` [ {"action": "delete", "target-table": "extract", "condition": { "op": "lt", "target-col": "creation_date", "const": {"type": "datetime", "v": "2018-12-06T19:21:12.12Z"}}}, {"action": "insert", "source-table": "extract_increment", "target-table": "extract"} ] ``` You upload a file which contains all newly added rows as a payload Hyper file. While the example above only shows how to achieve a rolling-window extract on a single file, this mechanism can be extended to star-schema, snowflake-schema, and multi-fact table Hyper files by specifying additional actions updating additional tables contained within the Hyper file. ### Applying a change-data-capture retrieved from another database system Change-Data-Capture (CDC) solutions provide technology to track changes to data contained in common database systems. CDC solutions usually capture their data in form of 3 types of tuples: 1. one set of newly created tuples. 2. one set of updated tuples, identified by some tuple key, together with the set of changed attributes and the new attribute values. 3. one set of deleted tuples, identified by the tuple key This functionality can be achieved with the following actions. ``` [ {"action": "insert", "source-table": "new_tuples", "target-table": "extract"}, {"action": "update", "source-table": "modified_tuples", "target-table": "extract", "condition": {"op": "eq", "target-col": "user_id", "source-col": "user_id"}}, {"action": "delete", "source-table": "deleted_tuples", "target-table": "extract", "condition": {"op": "eq", "target-col": "user_id", "source-col": "user_id"}} ] ``` In this case, the client - specifies the necessary condition to associate existing tuples with the corresponding tuples within the existing Hyper file as part of the "action description". In this case, "user\_id" is the primary key and hence tuples are identified based on the equality of the "user\_id" column. - uploads a Hyper file containing these tables: - a table "new\_tuples" which contains all newly created tuples. Those will just be appended to the tuples already contained in the existing extract. - a table "updated\_tuples". This table should contain the tuple key (in this example: "user\_id") to determine the modified row, and should contain the new values for the columns of each modified tuple. - a table "deleted\_tuples": This table contains the "user\_id" of all deleted tuples. The example above assumes that the key consists of a single column "user\_id". In some cases, keys consist of multiple columns. To cover this use case, conditions consisting of multiple ANDed predicates are supported. While the example above only covers a single-table scenario, the same mechanism can be used to also update tuples in multiple tables. [Skip to main content](#main-content) # Updated Site Roles in REST API 3.0 and Later Starting with the 2018.1 release of Tableau Server and Tableau Cloud, available site roles have changed significantly to support the user-based Creator, Explorer and Viewer licenses. These changes affect the values sent to or returned from the following methods in REST API 3.0 and later: - [Add User to Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_user_to_group) - [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_user_to_site) - [Create Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_group) - [Get Users in Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_in_group) - [Get Users on Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_on_site) - [Update Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_group) - [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_user) ## Changes for the userQuota licensing attribute In REST API versions 2.8 and earlier, the _userQuota_ attribute was used with the following methods to get the number of licensed users: - [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site) - [Query Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_site) - [Query Sites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_sites) - [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_site) In REST API 3.0 and later, userQuota is the sum of licensed site users with Creator, Explorer, or Viewer roles. An administrator can get the userQuota value using the Update Site, Query Site, and Query Sites methods. Administrators of on premise servers can also set the userQuota value using the Create Site or Update Site methods. - _tierCreatorCapacity_: Used to get or set the number of users with a Creator license. - _tierExplorerCapacity_: Used to get or set the number of users with an Explorer license. - _tierViewerCapacity_: Used to get or set the number of users with a Viewer license. For REST API versions 3.7 and higher, specific quotas can be set for each role instead of setting a userQuota value. As with previous REST API versions, online admins can get the values of userQuota or tiered capacities, and on premise server admins can set the values. To set specific quotas for each role on an on premise server, a Create Site or Update Site request should omit userQuota (set it to null), and provide a numerical value for for each of the tiered capacity attributes: - _tierCreatorCapacity_: Used to get or set the number of users with a Creator license. - _tierExplorerCapacity_: Used to get or set the number of users with an Explorer license. - _tierViewerCapacity_: Used to get or set the number of users with a Viewer license. ## Changes to legacy site roles As part of the introduction of new user-based license types, several legacy site roles have been renamed, as follows:
Legacy Site role name (v10.5)REST API site role string (v10.5)Site role nameREST API site role string
InteractorInteractorExplorerExplorer
PublisherPublisherExplorer (Can Publish)ExplorerCanPublish
Site AdministratorSiteAdministratorSite Administrator ExplorerSiteAdministratorExplorer
The following site roles were introduced in version 2018.1:
Site role nameREST API site role string
ViewerViewer
CreatorCreator
Site Administrator CreatorSiteAdministratorCreator
The following site legacy site role names are unchanged:
Site role nameREST API site role string
Server AdministratorServerAdministrator
UnlicensedUnlicensed
To learn more about licensing, see [Licensing Overview](https://help.tableau.com/current/server/en-us/license_server_overview.htm). To learn more about site roles, see [Set Users' Site Roles](https://help.tableau.com/current/server/en-us/users_site_roles.htm). [Skip to main content](#main-content) # Users and Groups Methods Using the groups and users methods of the Tableau REST API you can do the operations listed in the following categories: **Groups** (groups of users) - Create a local group of users for a site or import users to a new local group from Active Directory - Get a filtered, sorted list of groups of a site - Update a local group name or refresh the users from Active Directory - List, add, or delete users of a group - Bulk add or remove users - Set minimum site role and enable on-demand access (Tableau Cloud only) - Create, update, delete a SCIM configuration that enables the automatic provisioning of groups of users (Tableau Cloud only) **Group Sets** (sets of groups) - Create a group set - Get a filtered, sorted list of group sets - Update a group set - List, add, or delete groups of a group set - Delete a group set **Site Users** (users of a site) - Get a filtered, sorted list of users of a site - Get or update the details of a user of a site - Add or delete a user of a site - Import users and set their user properties from a .csv file - Delete a group, or a list of users in a .csv file, from a site - Download user credentials for migrating users to another site - Upload user credentials users migrated to another site - Create, update, delete a SCIM configuration that enables the automatic provisioning of users (Tableau Cloud only) This functionality relates to the UI elements and concepts described at: [Manage Users and Groups](https://help.tableau.com/current/server/en-us/users.htm). ## 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: Users and Groups](https://www.postman.com/salesforce-developers/salesforce-developers/folder/waribaq/users-and-groups) ## Add Group to Group Set Adds group to a group set. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI PUT api/api-version/sites/site-id/groupsets/group-set-id/groups/group-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
group-set-idThe unique ID of the group set you want to add the group to.
group-idThe unique ID of the group you want to add to the group set.
#### Request Body None #### Response Code 200 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403004Unauthorized operationInsufficient permissions to perform the operation.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012Group not foundThe group ID in the request body doesn't correspond to an existing group.
409409120Group set not foundThe group set ID in the request body doesn't correspond to an existing group.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add User to Group Adds a user to the specified group. Beginning in API 3.21, you can bulk add users to a group by specifying multiple user IDs. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/sites/site-id/groups/group-id/users #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-idThe ID of the group to add the user to.
#### Request Body **Add a single user to a group** ``` ``` **Bulk add users to a group** (beginning in API 3.21) ``` ``` #### Attribute Values
user-id

The ID (not name) of the user to add. You can get the user ID by calling Get Users on Site.

Beginning in API 3.21, you can bulk add users to a group by specifying multiple user IDs.

#### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 **Add a single user to a group** ``` ``` **Bulk add users to group** (beginning in API 3.21) ``` ``` The siteRole value is returned as one of the following values: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, ReadOnly, or Viewer. #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012Group not foundThe group name in the request body doesn't correspond to an existing group.
405405000Invalid request methodRequest type was not POST.
409409011User conflictThe specified user is already a member of the group.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ##### Add a single user to a group `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-user-to-group.xml` **Content of add-user-to-group.xml:** ``` ``` **Example response:** ``` ``` ##### Bulk add users to a group (beginning in API 3.21) `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @bulk-add-user-to-group.xml` **Content of bulk-add-user-to-group.xml:** ``` ``` **Example response:** ``` ``` ## Add User to Site Adds a user to Tableau Server or Tableau and assigns the user to the specified site. **Tableau Server** If Tableau Server is configured to use local authentication, the information you specify is used to create a new user in Tableau Server. **Note**: After creating the user, you **must** set a full name, password, and email address for the user with the call to [Update User](#update_user). If you are using SAML with local authentication, the user information that you add is not synchronized with the SAML IdP, as it would be if you were using Active Directory. Even if it is not used by SAML, the user information must be present. If Tableau Server is configured to use Active Directory for authentication, the user you specify is imported from Active Directory into Tableau Server. **Tableau Cloud** When you add a user to Tableau Cloud, the name of the user must be the email address that is used to sign in to Tableau Cloud. After you add a user, Tableau Cloud sends the user an email invitation. The user can click the link in the invitation to sign in and update their full name and password. If you try to add a user using a specific site role but you have already reached the limit on the number of licenses for your users, the user is added as an unlicensed user. In that case, the response code is 201 (which indicates success), but the siteRole value in the response body is set to Unlicensed. **Note:** After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI POST /api/api-version/sites/site-id/users #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to add users to.
#### Request Body _(Use the icon in the top right corner to copy the text.)_ ``` ``` _(Use the icon in the top right corner to copy the text.)_ ``` { "user": { "name":"user-name", "siteRole":"site-role", "authSetting":"auth-setting", "identityPoolName":"identity-pool-name", "idpConfigurationId":"idp-configuration-id", "email":"email-address", "language":"language", "locale": "locale" } } ``` #### Attribute Values
user-name The name of the user. If the server uses local authentication, this can be any name. If you are using Active Directory authentication, or if you are using Tableau Cloud, there are specific requirements for the name.

Tableau Server
If Tableau Server uses Active Directory authentication, this must be the name of an existing user in Active Directory. If the user name is not unique across domains, you must include the domain as part of the user name (for example, example\Adam or adam@example.com).

Note: Active Directory specifies a user name using two attributes: sAMAccountName and userPrincipalName (UPN) prefix. For most Active Directory users, these attributes are the same. By default, if you are adding a user from Active Directory, the name that you provide in the user-name is matched against the Active Directory sAMAccountName attribute, which becomes the name that the user signs in to Tableau Server with.

Two exceptions are when the name that you provide: is longer than 20 characters; and includes an @ character. In these cases, Tableau imports the user using the Active Directory UPN. For more information, see User Naming Attributes on the MSDN site.

Tableau Cloud
The user-name is the email address that the user will use to sign in to Tableau Cloud. When you add a user to the site, Tableau Cloud sends an email invitation. The user can click the link in the invitation to sign in and update their full name and password.

site-role The site role to assign to the user. You can assign the following roles: Creator, Explorer, ExplorerCanPublish, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, or Viewer.

Note: You cannot use the REST API to set a user to be a server administrator (ServerAdministrator site role).

auth-setting (Optional) The authentication method to assign the user.

Tableau Server

The authSetting attribute only applies when updating users on sites with site-specific SAML-enabled settings.

Tableau Cloud

The ability to create and enable multiple authentication methods simultaneously was introduced in API 3.25 (January 2025). As a result of this capability, consider the following:

  • For Tableau with MFA (or Tableau) authentication: To assign Tableau with MFA authentication (or Tableau authentication if still available for your site), you can use the authSetting or idpConfigurationId attribute, but not both.

  • For SAML and OIDC-based authentication:

    • For new configurations: To assign SAML or OIDC-based authentication, whose configurations were created during or after January 2025, you must use the idpConfigurationId attribute for assigning user authentication. Skip to idp-configuration-id.

    • For existing configurations: To assign SAML and OIDC-based authentication, whose configurations that Tableau has automatically prefixed with "Initial" (such as "Initial SAML," "Initial Google," "Initial OIDC," or "Initial Salesforce"), you can continue to use the authSetting attribute for assigning user authentication. Alternatively, you can use the idpConfigurationId attribute for assigning user authentication. Do not use both.

  • Notes:

You can assign the following values for the authSetting attribute:

  • SAML - The user signs in using the identity provider (IdP) configured for the site. For Tableau Cloud configuration, see Enable SAML Authentication on a Site. For Tableau Server, see Configure Site-Specific SAML.
  • OpenID - Tableau Cloud only: The user signs in using Google, Salesforce or OpenID Connect provider credentials. OpenID corresponds to Google, Salesforce, or OIDC authentication configuration in Tableau Cloud authentication settings.
  • TableauIDWithMFA - Tableau Cloud only: The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see About multi-factor authentication and Tableau Cloud.
  • ServerDefault - The user signs in using the default authentication method that's set for the server. For Tableau Cloud, if Tableau hasn't updated your site to require Tableau with MFA yet, you can continue to use this authentication type on a temporary basis. The ServerDefault value corresponds to TableauID in authentication settings. For Tableau Server, the SAML Server help page describes default authentication options.
identity-pool-name (Optional, Tableau Server only) When identity pools are configured, the name of the identity pool.

Starting in API 3.19, include the identity pool name when identity pools are configured and you need to add a user to an identity pool that uses the local identity store and OIDC authentication. For more information, see Identity Pools Methods.

idp-configuration-id

(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).

To find the idpConfigurationId attribute value, use the List Authentication Configurations for Site method.

Notes:

  • In cases where both attributes are supported, you can use the idpConfigurationId attribute or the authSetting attribute, but not both.
  • If neither idpConfigurationId nor authSetting attribute is specified, then TableauIdWithMFA (or in some cases ServerDefault if that option is still available for your site) is the authentication assigned to the user.
email-address (Optional, Tableau Cloud only) The email address where the user can receive notifications. If no value is provided, Tableau Cloud uses the username value to send notifications to.

Starting in API 3.26 (July 2025), you can specify an email address that is different from the username.

language

(Optional, Tableau Cloud only) Language (ISO 639-1) of the user.

Starting in API 3.28 (March 2026), you can set the user's default language in Tableau Cloud to a supported language (ISO 639-1). You can assign one of the following values: de, en_GB, en, es, fr_CA, fr, it, nl, pt, sv, th, ja, zh, zh_TW, or ko.

Important: The language set using this attribute overrides the default site-wide invitation email language that the site admin can set.

locale

(Optional, Tableau Cloud only) Locale of the user.

Starting in API 3.28 (March 2026), you can set the user's default locale to a supported locale. You can assign one of the following values: ar_SA, ar_AE, ar_BH, ar_DZ, ar_EG, ar_IQ, ar_JO, ar_KW, ar_LB, ar_LY, ar_MA, ar_OM, ar_QA, ar_SD, ar_SY, ar_TN, ar_YE, be_BY, bg_BG, ca_ES, cs_CZ, da_DK, de_DE, de_AT, de_CH, de_LU, el_GR, el_CY, en_US, en_AU, en_CA, en_GB, en_IE, en_IN, en_MT, en_NZ, en_PH, en_SG, en_ZA, es_ES, es_AR, es_BO, es_CL, es_CO, es_CR, es_DO, es_EC, es_GT, es_HN, es_MX, es_NI, es_PA, es_PE, es_PR, es_PY, es_SV, es_US, es_UY, es_VE, et_EE, fi_FI, fr_FR, fr_BE, fr_CH, fr_LU, fr_CA, ga_IE, he_IL, hi_IN, hr_HR, hu_HU, id_ID, is_IS, it_IT, it_CH, ja_JP, ko_KR, lt_LT, lv_LV, mk_MK, ms_MY, mt_MT, nl_NL, nl_BE, no_NO, pl_PL, pt_BR, pt_PT, ro_RO, ru_RU, sk_SK, sl_SI, sq_AL, sr_RS, sr_BA, sr_ME, sv_SE, th_TH, tr_TR, uk_UA, vi_VN, zh_CN, zh_HK, zh_SG, or zh_TW.

#### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 ``` ``` #### Response Headers Location: /api/3.29/sites/site-id/users/new-user-id #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400003 Bad request The user authentication setting ServerDefault is not supported for you site. Try again using TableauIDWithMFA instead.
400 400013 Invalid site role

The value of the siteRole attribute must be Explorer, ExplorerCanPublish, SiteAdministratorCreator, SiteAdministratorExplorer, Unlicensed, or Viewer.

400 400217 Unsupported language The specified language is not valid or not supported.
400 400218 Unsupported locale The specified locale is not valid or not supported.
403 403193 Forbidden A non-administrator user called this method or doesn't have permissions to update language for the user.
403 403194 Forbidden A non-administrator user called this method or doesn't have permissions to update locale for the user.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The server is configured to use Active Directory for authentication, and the username specified in the request body doesn't match an existing user in Active Directory.
405 405000 Invalid request method Request type was not POST.
409 409017 User conflict The specified user already exists on the site.
409 409005 Guest user conflict The Tableau Server API doesn't allow adding a user with the guest role to a site.
500 500109 Internal language error The language request could not be completed.
500 500110 Internal locale error The locale request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-user-to-site.xml` - `MY-SERVER` is the name or IP address of your server. - `9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d` is the ID of the site to add the user to, as returned by a previous call to [Sign In](#sign_in). - `12ab34cd56ef78ab90cd12ef34ab56cd` is the authentication returned by a previous call to [Sign In](#sign_in). **Content of add-user-to-site.xml:** ``` ``` **Example response:** ``` ``` ## Create Group Creates a group on a Tableau Cloud site or Tableau Server. **Notes:** - To add users to a group, call [Add User To Group](#add_user_to_group). To make changes to an existing group, call [Update Group](#update_group). - After you create a group, the server updates its search index. If you make a query immediately to see the new group, the query results might not be up to date. **Tableau Cloud** The Create Group response returns information in two ways: in the response header and in the response body. The ID of the new group is always returned as the value of the Location header. If you create a local group immediately, the response body contains the name and ID of the new group. **Tableau Server** The Create Group response returns information in two ways: in the response header and in the response body. The ID of the new group is always returned as the value of the Location header. If you create a local group or import an Active Directory group immediately, the response body contains the name and ID of the new group. If you import an Active Directory group using a background process, the response body contains a element that includes a job ID. You can use the job ID to check the status of the operation by calling [Query Job](#query_job). If Tableau Server is configured to use Active Directory for authentication, this method can create a group and then import users from an Active Directory group. If you use the **Create Group** method to import users from an Active Directory, the import process can be performed immediately (synchronously) or as a background job (asynchronously). If Active Directory contains a large number of users, you should import them asynchronously; otherwise, the process can time out. #### URI POST /api/api-version/sites/site-id/groups POST /api/api-version/sites/site-id/groups?asJob=asJob-value #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site to create the group in.
asJob-value A Boolean value that is used if you are importing from Active Directory. If you set this to false (the default), the import process runs as a synchronous process. If the Active Directory group contains many users, the process might time out before it finishes.

If you set this to true, the process runs asynchronously. In that case, Tableau Server starts a job to perform the import and returns the job ID in the Location header. You can check the status of the import job by calling Query Job.

Note: This parameter has no effect if the server is configured to use local authentication.

This attribute is available for Tableau Server only.

#### Request Body **Creating a local group** ``` ``` **Notes:** - When the request is to create a local group and minimumSiteRole is specified, users are granted a license using the grant license on-login mode by default. **Importing a group from Active Directory** (Tableau Server only) ``` ``` **Notes:** - When the request is to create a group with grantLicenseMode, a siteRole value should also be supplied. - When the request body contains an element, a Tableau Server configured to authenticate via Active Directory will create the group and modify the set of users in the group to be the same as those in Active Directory. The source attribute of the element must be set to `ActiveDirectory`. If Tableau Server or Tableau Cloud site is configured to use local authentication, including an element has no effect. - When a group is created by importing from Active Directory, Tableau Server uses the value of the Active Directory `sAMAccountName` attribute as the user name. #### Attribute Values
new-tableau-server-group-name The name for the new group.
active-directory-group-name

The name of the Active Directory group to import.

This attribute is available for Tableau Server only.

active-directory-domain-name

The domain of the Active Directory group to import.

This attribute is available for Tableau Server only.

minimum-site-role

Required if an import element or grantLicenseMode attribute are present in the request. For Tableau Server, the site role assigned to users who are imported from Active Directory or granted a license automatically using the grant license on-sync or on-login mode.

If the requested user name matches an existing user in the group, the user either retains their existing role or are granted the one specified in the request, based on the role that enables the most capabilities. This is true whether the group the user belongs to is imported from Active Directory (Tableau Server only) or local.

Site roles that can be assigned, listed from the one enabling the least capabilities to the most, are as follows.

  1. Unlicensed
  2. Viewer
  3. Explorer
  4. ExplorerCanPublish
  5. Creator
  6. SiteAdministratorExplorer
  7. SiteAdministratorCreator

Note: You cannot use the REST API to set a user to be a Tableau Server administrator (ServerAdministrator site role).

license-mode

The mode for automatically applying licenses for group members. When the mode is onLogin, a license is granted for each group member when they log in to a site.

For local groups, the mode can be either onLogin or unset. If the attribute is omitted, the default mode is unset, which results in no licenses being granted automatically to group members.

For groups that import an Active Directory domain, the mode can be either onSync or onLogin.

The minimum role granted to users through grantLicenseMode is specified in the siteRole attribute. If that role has less permissions than an existing role assigned to the user, then the user's permissions remain unchanged.

on-demand-access

Optional. A boolean value that is used to enable on-demand access for embedded Tableau content when the Tableau Cloud site is licensed with Embedded Analytics usage-based model or capacity-based model with Cloud+ or Tableau+ edition.

Set to true to enable the capability for the group or set to false to disable the capability for the group. For more information about on-demand access, see On-demand access for users in the Tableau Embedding API v3 Help.

This attribute is available for Tableau Cloud only starting from API version 3.21 (October 2023).

#### Permissions This method can only be called by Tableau Server administrators or Tableau Cloud site admins. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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, for creating a local group and for importing immediately 202, for importing using a background process #### Response Headers Location: /api/3.29/sites/site-id/groups/new-group-id #### Response Body **Creating a local group:** ``` ``` **Creating a group and importing from Active Directory immediately (Tableau Server only):** ``` ``` **Importing as a background process:** ``` ``` #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400013 Invalid site role

The value of the minimumSiteRole or siteRole attribute must be Creator, Explorer, ExplorerCanPublish, SiteAdministratorCreator, SiteAdministratorExplorer, Unlicensed, or Viewer.

400 400019 Malformed import element When the <import> element is present in the request body, the following attributes must be specified: source with the value ActiveDirectory; domainName; and siteRole If any of these is missing, the element is malformed.
400 400984 Not licensed On-demand access can't be enabled if your site is not licensed with the usage-based model or capacity-based usage model with Tableau+ or Cloud+.
403 403011 Active Directory is not configured The <import> element is present, but Tableau Server is configured for local authentication.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404016 Domain not found The request body includes an <import> element, but the specified domain name doesn't exist in Active Directory.
404 404017 Active Directory group not found The request body includes an <import> element, but no group exists in Active Directory that matches the specified group name.
405 405000 Invalid request method Request type was not POST.
409 409009 Group name conflict The group name in the request already belongs to the specified site. For the purpose of uniqueness checks, group names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example: Local Group `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-local-group.xml` **Content of create-local-group.xml:** ``` ``` **Response header:** `Location: /api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d5-e6f7-a8b9-c0d1-e2f3a4b5c6d` **Response body:** ``` ``` #### Example: Active Directory Group `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-ad-group.xml` **Content of create-ad-group.xml:** ``` ``` **Response header:** `Location: /api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d5-e6f7-a8b9-c0d1-e2f3a4b5c6d` **Response body:** ``` ``` ## Create Group Set Creates a group set with a specified name. **Note**: You can't use this method to populate the group set with groups. After you create a group set and its ID is available, you can add a group to the group set by calling [Add Group to Group Set](#add_group_to_groupset). **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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-id/groupsets #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to create the group in.
#### Request Body Copy ```    name

(Required) Name of the new group set.

#### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets/" --header "Content-Type: application/xml" --header "X-Tableau-Auth: YqB9_MHoTHO26HGsFBFEBg|bQDOIH4MsqFGvUDYTrRYh633vrZHBt6d|a946d998-2ead-4894-bb50-1054a91dcab3" --data " "` #### Response Code 201, for creating a group set. #### Response Body Copy ```    ``` Copy ``` {  "groupSet": {    "id": "4123e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6234",    "name": "marketing-group",    "groupCount": "0"  }} ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400013 Invalid site role

The value of the minimumSiteRole or siteRole attribute must be SiteAdministratorCreator or SiteAdministratorExplorer.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
405 405000 Invalid request method The request type wasn’t POST.
409 409121 Group set name conflict The group set name in the request already belongs to another group set. For the purpose of uniqueness checks, group set names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create SCIM Configuration Creates the System for Cross-domain Identity Management Configuration (SCIM) configuration on the Tableau Cloud site. The SCIM capability requires that you configure authentication for your Tableau Cloud site and associate the SCIM configuration with the authentication configuration. For more information about the SCIM capability in Tableau, see [SCIM](https://help.tableau.com/current/online/en-us/scim_config_online.htm) in the Tableau Cloud Help. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_configurations:create` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI POST /api/api-version/sites/site-luid/scimConfigurations #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body ``` SCIM Contractors d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658 ``` ``` { "scimConfiguration": { "name": "SCIM Contractors", "idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658" } } ``` #### cURL Request Example ``` POST request: curl --location 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations \ --data '{ "scimConfiguration":{ "name": "SCIM Contractors","idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658" } }' ``` #### Attribute Values
name (Required) Name of the SCIM configuration.
idpConfigurationId

(Required) Authentication configuration to associate with the SCIM configuration.

Starting in API 3.26, you can have multiple SCIM configurations. Include the idpConfigurationId to identify which SAML authentication configuration to associate with this SCIM configuration. To get the idpConfigurationId, see List Authentication Configurations for Site.

Starting in API 3.28, you can associate OIDC or Google authentication with SCIM.

#### Response Code 201 #### Response Body ``` 065693d8-436a-4738-a8f1-375953a2a888 95dcdf3b-30eb-42ae-b938-7ffca3e11fdc false true SCIM Contractors Tue Apr 01 06:31:47 UTC 2025 ``` ``` { "scimConfiguration": { "id": "065693d8-436a-4738-a8f1-375953a2a888", "idpConfigurationId": "95dcdf3b-30eb-42ae-b938-7ffca3e11fdc", "isApiTokenActive": false, "isOwner": true, "name": "SCIM Contractors", "createdAt": "Tue Apr 01 06:31:47 UTC 2025" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, contains malformed XML, or the idpConfigurationId is not valid.
400400008Bad RequestThe content of the request body is missing the SCIM configuration name, contains unsupported attributes, or the idpConfigurationId is missing.
400400802Bad RequestThe maximum number of 20 SCIM configurations for the site has been reached.
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create SCIM Token Generates the System for Cross-domain Identity Management (SCIM) token and secret. You must be the user who created the SCIM configuration to generate the associated SCIM token. After the SCIM token is generated, ensure the SCIM token's secret is added to the identity provider's (IdP's) SCIM settings. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: Not available _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, and access scopes for_ [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm)_._ #### URI POST /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id/apiToken #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body None #### cURL Request Example ``` POST request: curl --location 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations/065693d8-436a-4738-a8f1-375953a2a888/apiToken' ``` #### Response Code 201 #### Response Body ``` 065693d8-436a-4738-a8f1-375953a2a888 SCIM_CLIENT_API_TOKEN:d3b782da-0787-44ca-8585-6fd48dbfc658 hqh8YEoYQ1enO9t9Z3h1xA==:X_jndRxNXuWKIXIUbvSGEvysnnSK6B7pt62GiWd8Vuw= ``` ``` { "apiToken": { "id": "065693d8-436a-4738-a8f1-375953a2a888", "clientName": "SCIM_CLIENT_API_TOKEN:d3b782da-0787-44ca-8585-6fd48dbfc658", "secret": "hqh8YEoYQ1enO9t9Z3h1xA==:X_jndRxNXuWKIXIUbvSGEvysnnSK6B7pt62GiWd8Vuw=" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400400802Bad RequestThe SCIM configuration is already associated with a SCIM token. To generate a new token for the SCIM configuration, first delete the associated SCIM token and try again.
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
403403182ForbiddenA SCIM token can only be generated by the user who created the SCIM configuration.
404404057Resource Not FoundThe SCIM configuration ID is not valid.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Group Deletes the group on a specific site. Deleting a group does not delete the users in group, but users are no longer members of the group. Any permissions that were previously assigned to the group no longer apply. **Note**: You cannot delete the All Users group. #### URI DELETE /api/api-version/sites/site-id/groups/group-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
group-idThe ID of the group to delete.
#### Request Body None #### Permissions This method can be called by site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 #### Version Version 2.1 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group or the group is not part of the specified site.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. ## Delete Group Set Deletes the group set on a specific site. Deleting a group set doesn’t delete the users in the group set, but users are no longer members of the group set. Any permissions that were previously assigned to the group set no longer apply. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI DELETE /api/api-version/sites/site-id/groupsets/group-set-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the project.
group-set-idThe ID of the group set to delete.
#### Request Body None #### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) for a successful delete operation. The HTTP response code is 204 if the delete operation succeeded. #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type wasn’t DELETE.
409409120Group set not foundThe group set ID in the URI doesn't correspond to an existing group set or the group set isn’t part of the specified site.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete SCIM Configuration Permanently removes the System for Cross-domain Identity Management (SCIM) configuration from the Tableau Cloud site. Deleting the SCIM configuration deletes the associated SCIM token. You must be the user who created the SCIM configuration to delete the SCIM configuration unless the creator of the SCIM configuration is no longer a member of the site. After the SCIM configuration is deleted, ensure the SCIM token's secret is also removed from the identity provider's (IdP's) SCIM settings. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_configurations:delete` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI DELETE /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body None #### cURL Request Example ``` DELETE request: curl --location --request DELETE 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations/065693d8-436a-4738-a8f1-375953a2a888' ``` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
403403182ForbiddenThe SCIM configuration can only be deleted by the user who created the SCIM configuration.
404404057Resource Not FoundThe SCIM configuration cannot be deleted because it does not exist on this site.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete SCIM Token Permanently removes the System for Cross-domain Identity Management (SCIM) token. You must be the user that created the SCIM configuration to delete the associated SCIM token unless the creator of the SCIM configuration is no longer a member of the site. After the SCIM token is deleted, ensure the SCIM token's secret is also removed from the identity provider's (IdP's) SCIM settings. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_api_tokens:delete` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI DELETE /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id/apiToken #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body None #### cURL Request Example ``` DELETE request: curl --location --request DELETE 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations/065693d8-436a-4738-a8f1-375953a2a888/apiToken' ``` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
404404050Resource Not FoundThe SCIM configuration does not have an associated SCIM token.
404404057Resource Not FoundThe SCIM configuration ID is not valid.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Users from Site with CSV Creates a job to remove a list of users, specified in a .csv file, from a site. The .csv file should comply with the rules described in one of the following topics: - For Tableau Cloud - [CSV Import File Guidelines](https://help.tableau.com/current/online/en-us/csvguidelines.htm) - For Tableau Server - [CSV Import File Guidelines](https://help.tableau.com/current/server/en-us/csvguidelines.htm) #### URI POST /api/_api-version_/sites/_site-id_/users/delete #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that users are being deleted from.
#### Request Body Because this method involves a file that is external to Tableau a multi-part request is required. For more information on multi-part requests, See [Importing CSV files with Multipart Requests](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm#multipart_requests). ``` --boundary-string Content-Disposition: form-data; name=\"tableau_user_delete\"; filename=\"users.csv\" Content-Type: text/csv --boundary-string-- ``` #### 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:users: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 #### Version Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request payload is missing or incomplete, or contains malformed XML.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ``` curl -X POST \ http://10.108.21.238//api/3.15/sites/8aa3291f-1b5a-4f52-a3be-6512661f574d/users/delete \ -H 'cache-control: no-cache' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -H 'x-tableau-auth: AVjAKZb3SQimzoqyMmQXEg|9OSHQrwCXF83SIR2XCuDEK91AM7v3FZr' \ -F tableau_user_delete=@users.csv ``` ## Download User Credentials Gets credentials for a user who is being migrated to another Tableau Cloud or Tableau Server site. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:oauth\_credentials:download - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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/users/user-luid/retrieveSavedCreds #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
user-luidThe LUID of the user whole credentials you want to download.
#### Request Body ``` site1 d56023b5-8f8b-4241-aa74-8974ced85827 http://example.com ``` ``` { "destinationSiteUrlNamespace": "site1", "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827", "destinationServerUrl": "http://localhost" } ``` #### Request Attributes
destinationSiteUrlNamespace

(Required) The site name on Tableau Cloud.

destinationSiteLuid (Required)  The site ID on Tableau Cloud.
destinationServerUrl

(Required) The destination Tableau Cloud URL.

#### cURL Request Example ``` curl --location "https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/retrieveKeychain" --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data " site1 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d http://example.com " ``` #### Response Code 200 #### Response Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidList": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The user ID in the URI doesn't correspond to an existing user.
405 405000 Invalid request method Request type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Groups for a User Gets a list of groups of which the specified user is a member. #### URI GET /api/api-version/sites/site-id/users/user-id/groups GET /api/api-version/sites/site-id/users/user-id/groups?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
user-idThe ID of the user whose group memberships are listed.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 ``` ``` **Notes:** - Starting in July 2026 (version 3.29), the externalUserEnabled attribute (Tableau Cloud only) is omitted from the element in the response if the site isn't licensed for on-demand access. #### Version Version 3.7 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012User not foundThe group ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/groups" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Group Set Returns information about the specified group set including ID, name, and member groups. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI GET /api/api-version/sites/site-id/groupsets/group-set-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-set-idThe ID of the group set you want information for.
#### Request Body None #### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets/8cf3b6c1-839f-4eae-b41f-2144165193f2" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body Copy ```                      ``` Copy ``` {  "groupSet": {    "id": "8cf3b6c1-839f-4eae-b41f-2144165193f2",    "name": "All Users",    "groupCount": "2",    "group": [      {        "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d",        "name": "All Users"      },      {        "id": "4123e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6234",        "name": "Researchers"      }    ]  }} ``` #### Version Version 3.22 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodThe request type wasn’t GET.
409409120Group set not foundThe group set ID in the request body doesn't correspond to an existing group set.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get SCIM Configuration Gets the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_configurations:read` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI GET /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body None #### cURL Request Example ``` GET request: curl --location 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations/065693d8-436a-4738-a8f1-375953a2a888' ``` #### Response Code 200 #### Response Body ``` 065693d8-436a-4738-a8f1-375953a2a888 95dcdf3b-30eb-42ae-b938-7ffca3e11fdc false false SCIM Contractors 2025-03-27 11:07:49.129 ``` ``` { "scimConfiguration": { "id": "065693d8-436a-4738-a8f1-375953a2a888", "idpConfigurationId": "95dcdf3b-30eb-42ae-b938-7ffca3e11fdc", "isApiTokenActive": false, "isOwner": false, "name": "SCIM Contractors", "createdAt": "2025-03-27 11:07:49.129" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
404404057Resource Not FoundThe SCIM configuration UUID is not valid.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Users in Group Gets a list of users in the specified group. #### URI GET /api/api-version/sites/site-id/groups/group-id/users GET /api/api-version/sites/site-id/groups/group-id/users?pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-idThe ID of the group to get the users for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 ``` ... additional user information ... ``` The siteRole value is returned as one of the following values: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, ReadOnly, or Viewer. The externalAuthUserId value is returned for Tableau Cloud; it represents ID stored in Tableau's single sign-on (SSO) system. For other server configurations, this field contains null, and the value of lastLogin is an empty string. #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Users on Site Returns the users associated with the specified site. #### URI GET /api/api-version/sites/site-id/users GET /api/api-version/sites/site-id/users?filter=filter-expression GET /api/api-version/sites/site-id/users?sort=sort-expression GET /api/api-version/sites/site-id/users?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/users?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the users.
filter-expression(Optional) An expression that lets you specify a subset of users to return. You can filter on predefined fields such as name and lastLogin. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the views or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the REST API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand **`&`**. #### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 ``` ``` **Notes:** - The siteRole value is returned as one of the following values: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, ReadOnly, or Viewer. - The externalAuthUserId value is returned for Tableau Cloud only; it represents ID stored in Tableau's single sign-on (SSO) system. For other server configurations, this field contains null, and the value of lastLogin is an empty string. - The authSetting attribute is only returned if you are using Tableau Server with site-specific SAML enabled, or Tableau Cloud with either SAML or OpenID Connect enabled. - Starting in API 3.24, **idpConfigurationId** indicates the authentication method assigned to the user in Tableau Cloud only. - When Tableau Cloud returns domain name, it indicates the authentication type of the user. When Tableau Server returns domain name, it indicates the domain of the user. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ... more users ... ``` `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users?filter=siteRole:eq:Unlicensed&sort=name:asc" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` This example includes a filter to return the users whose site role is Unlicensed and specifies that the results should be sorted by the name value. ## Import Users to Site from CSV Creates a job to import the users listed in a specified .csv file to a site, and assign their roles and authorization settings. The .csv file should comply with the rules described in one of the following topics: - For Tableau Cloud - [CSV Import File Guidelines](https://help.tableau.com/current/online/en-us/csvguidelines.htm) - For Tableau Server - [CSV Import File Guidelines](https://help.tableau.com/current/server/en-us/csvguidelines.htm) #### URI POST api/_api-version_/sites/_site-id_/users/import #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe unique ID of the site asset.
#### Request Body Because this method involves a file that is external to Tableau a multi-part request is required. For more information on multi-part requests, See [Importing CSV files with Multipart Requests](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm#multipart_requests). ``` --boundary-string Content-Disposition: name="tableau_user_import" Content-Type: file path_to_csv --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` A `request-payload` without user name or authSetting is valid, but must be present in the request in the form: ``. #### Attribute Values
path-to-csv The file path to the .csv list users to be imported.
user-name

(Optional) The name of the user. If the server uses local authentication, this can be any name. If you are using Active Directory authentication, or if you are using Tableau Cloud, there are specific requirements for the name.

Tableau Server
If Tableau Server uses Active Directory authentication, this must be the name of an existing user in Active Directory. If the user name is not unique across domains, you must include the domain as part of the user name (for example, example\Adam or adam@example.com).

Note: Active Directory specifies a user name using two attributes: sAMAccountName and userPrincipalName (UPN) prefix. For most Active Directory users, these attributes are the same. By default, if you are adding a user from Active Directory, the name that you provide in the user-name is matched against the Active Directory sAMAccountName attribute, which becomes the name that the user signs in to Tableau Server with.

Two exceptions are when the name that you provide: is longer than 20 characters; and includes an @ character. In these cases, Tableau imports the user using the Active Directory UPN. For more information, see User Naming Attributes on the MSDN site.

Tableau Cloud
The user-name is the email address that the user will use to sign in to Tableau Cloud. When you add a user to the site, Tableau Cloud sends an email invitation. The user can click the link in the invitation to sign in and update their full name and password.

auth-setting

Tableau Server

The authSetting attribute only applies when updating users on sites with site-specific SAML-enabled settings.

Tableau Cloud

The ability to create and enable multiple authentication methods simultaneously was introduced in API 3.25 (January 2025). As a result of this capability, consider the following:

  • For Tableau with MFA (or Tableau) authentication: To assign Tableau with MFA authentication (or Tableau authentication if still available for your site), you can use the authSetting or idpConfigurationId attribute, but not both.

  • For SAML and OIDC-based authentication:

    • For new configurations: To assign SAML or OIDC-based authentication, whose configurations were created during or after January 2025, you must use the idpConfigurationId attribute for assigning user authentication. Skip to idp-configuration-id.

    • For existing configurations: To assign SAML and OIDC-based authentication, whose configurations that Tableau has automatically prefixed with "Initial" (such as "Initial SAML," "Initial Google," "Initial OIDC," or "Initial Salesforce"), you can continue to use the authSetting attribute for assigning user authentication. Alternatively, you can use the idpConfigurationId attribute for assigning user authentication. Do not use both.

  • Notes:

You can assign the following values for the authSetting attribute:

  • SAML - The user signs in using the identity provider (IdP) configured for the site. For Tableau Cloud configuration, see Enable SAML Authentication on a Site. For Tableau Server, see Configure Site-Specific SAML.
  • OpenID - Tableau Cloud only: The user signs in using Google, Salesforce or OpenID Connect provider credentials. OpenID corresponds to Google, Salesforce, or OIDC authentication configuration in Tableau Cloud authentication settings.
  • TableauIDWithMFA - Tableau Cloud only: The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see About multi-factor authentication and Tableau Cloud.
  • ServerDefault - The user signs in using the default authentication method that's set for the server. For Tableau Cloud, if Tableau hasn't updated your site to require Tableau with MFA yet, you can continue to use this authentication type on a temporary basis. The ServerDefault value corresponds to TableauID in authentication settings. For Tableau Server, the SAML Server help page describes default authentication options.

Assigning user auth settings with this method

The request payload enables you to set auth settings for individual users, or all users in the .csv file. To prevent the payload from having any impact on auth settings, omit the name and authSetting attributes of the user object:
<tsrequest><user /></tsrequest>.

To set the default auth settings for all users being imported, omit the name attribute and specify the authSetting attribute of the user object:
<tsRequest><user authSetting="OpenID"/><tsRequest>

If the auth setting for a user is defined in both the imported .csv and in a request payload, the setting in the .csv will take precedence.

If no auth setting is defined for a user in either the .csv and the request payload, then the default setting of the site is assigned.

idp-configuration-id

(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).

To find the idpConfigurationId attribute value, use the List Authentication Configurations for Site method.

Notes:

  • In cases where both attributes are supported, you can use the idpConfigurationId attribute or the authSetting attribute, but not both.
  • If neither idpConfigurationId nor authSetting attribute is specified, then TableauIdWithMFA (or in some cases ServerDefault if that option is still available for your site) is the authentication assigned to the user.
isVerbose Tableau Cloud only When set to false, this method only returns the top three errors in a batch of users. When set to true, the method displays a full list of errors during CSV upload.

Available in REST API 3.22 (Tableau Cloud February 2024)

#### Permissions Tableau Server admins or Tableau Cloud site admins only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:users: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 #### Version REST API version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request payload is missing or incomplete, or contains malformed XML.
500500000Internal Server ErrorThe request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ``` curl -X POST \ http://10.108.21.238//api/3.15/sites/8aa3291f-1b5a-4f52-a3be-6512661f574d/users/import \ -H 'cache-control: no-cache' \ -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \ -H 'x-tableau-auth: AVjAKZb3SQimzoqyMmQXEg|9OSHQrwCXF83SIR2XCuDEK91AM7v3FZr' \ -F tableau_user_import=@users.csv \ -F 'request_payload=' ``` #### Response ``` ``` ## List Group Sets Lists all group sets matching optional filter and ordered by optional sort expression. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI GET /api/api-version/sites/site-id/groupsets?pageSize\=page-size&pageNumber\=page-number GET /api/api-version/sites/site-id/groupsets?filter=filter-expression GET /api/api-version/sites/site-id/groupsets?sort=sort-expression #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group sets.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) An expression that lets you specify a subset of group sets to return. You can filter on predefined fields such as name. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which group set information is returned. If you don’t specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
#### Request Body None #### cURL Request Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets&[resultlevel=[members,local]]" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body Copy ```                    ``` Copy ``` {  "pagination": {    "pageNumber": "1",    "pageSize": "100",    "totalAvailable": "3"  },  "groupSets": [    {      "id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",      "name": "All Users",      "groupCount": "1",      "group": {        "id": "gs-1",        "name": "group-one"      }    },    {      "id": "9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b",      "name": "active-directory-group-import",      "group": {        "id": "gs21",        "name": "group-two"      }    },    {      "id": "7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6",      "name": "local-group-license-on-login",      "group": {        "id": "gs-3",        "name": "group-three"      }    }  ]} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter isn’t an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter isn’t an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodThe request type wasn’t GET.
409409120Group set not foundThe group set ID in the URI doesn't correspond with an existing group set.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List SCIM Configurations Returns the System for Cross-domain Identity Management Configuration (SCIM) configurations on the Tableau Cloud site. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_configurations:read` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_; [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)_._ #### URI GET /api/api-version/sites/site-luid/scimConfigurations #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
#### Request Body None #### cURL Request Example ``` GET request: curl --location 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations' ``` #### Response Code 200 #### Response Body ``` 3400f62c-7569-4608-89c9-98c4194390ee cf73f5a0-8483-42f8-89ac-91a5aeed0bcc true true SCIM Employees 2025-08-09 15:15:02.100 065693d8-436a-4738-a8f1-375953a2a888 95dcdf3b-30eb-42ae-b938-7ffca3e11fdc false false SCIM Contractors 2025-03-27 11:07:49.129 ``` ``` { "scimConfigurations": { "scimConfiguration": [ { "id": "3400f62c-7569-4608-89c9-98c4194390ee", "idpConfigurationId": "cf73f5a0-8483-42f8-89ac-91a5aeed0bcc", "isApiTokenActive": true, "isOwner": true, "name": "SCIM Employees", "createdAt": "2025-08-09 15:15:02.100" }, { "id": "065693d8-436a-4738-a8f1-375953a2a888", "idpConfigurationId": "95dcdf3b-30eb-42ae-b938-7ffca3e11fdc", "isApiTokenActive": false, "isOwner": false, "name": "SCIM Contractors", "createdAt": "2025-03-27 11:07:49.129" } ] } } ``` #### Errors
HTTP statuserror CodeConditionDetails
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Groups Returns a list of groups on the specified site, with optional parameters for specifying the paging of large results. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/groups GET /api/api-version/sites/site-id/groups?pageSize\=page-size&pageNumber\=page-number GET /api/api-version/sites/site-id/groups?filter=filter-expression GET /api/api-version/sites/site-id/groups?sort=sort-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the groups.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) An expression that lets you specify a subset of groups to return. You can filter on predefined fields such as name. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which user information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 ``` ... additional groups ... ``` Notes: - If the group was imported from Active Directory, the name attribute of the element contains the group's Active Directory domain. For a group that uses local authentication, the value of that attribute is `local`. - The response body for a local group that has enabled onLogin for its grant license mode will have an import element with a domain name of `local`. Local groups with grant license mode unset, have no import element in their response. - Starting in July 2026 (version 3.29), the externalUserEnabled attribute (Tableau Cloud only) is omitted from the element in the response if the site isn't licensed for on-demand access. #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/groups/" -X GET -H "X-Tableau-Auth:e35Z608JMPHgZfVyJncnedlUeXSX8bmb"` **Example response:** ``` ``` ## Query User On Site Returns information about the specified user. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/users/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to get information for.
#### Request Body None #### Permissions Using this method server administrators and site administrators can view user information directly or through the various ways that data is used throughout Tableau. Use of this method by non-administrator users to view their own information depends on the visibility settings of a site. Using the Visibility Setting in the server UI, or the [Create Site](#create_site) or [Update Site](#update_site) methods, you can change user visibility settings of a Site. For more information, see [Manage Site User Visibility](https://help.tableau.com/current/server/en-us/user_visibility.htm). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 ``` ``` **Notes:** - The lastLogin attribute value is returned as a date in UTC format (YYYY-MM-DDTHH:MM:SSZ). - The siteRole value is returned as one of the following values: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, ReadOnly, or Viewer. - The externalAuthUserId value represents an ID for the user for single sign-on (SSO) with an external identity provider. If the user is not configured to use external authentication, this value is an empty string. - In Tableau Server version 9.0.1 or API version 2.0.1 and later - if SAML is enabled, and the user was imported from Active Directory, the name attribute of the element contains the user's Active Directory domain. - Starting in API 3.24, **idpConfigurationId** indicates the authentication configuration assigned to the user in Tableau Cloud only. - Starting in API 3.26 (July 2025), email indicates an email address that is different from the username. #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
403403133Query user permissions forbiddenThe user does not have permissions to query user information for other users.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Remove Group from Group Set Removes a group from the specified group set. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/groupsets/group-set-id/groups/group-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group set.
group-set-idThe ID of the group set to remove the group from.
group-idThe ID of the group to remove.
#### Request Body None #### Example `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groupsets/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/groups/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400032Deletion failedA problem arose that prevented the group from being removed from the group set.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
405405000Invalid request methodRequest type wasn’t DELETE.
409409120Group set not foundThe group set ID in the URI doesn't correspond to an existing user.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Remove User from Site Removes a user from the specified site. The user will be deleted if they do not own any other assets other than subscriptions. If a user still owns content (assets) on Tableau Server, the user cannot be deleted unless the ownership is reassigned first. You can’t remove a user from the server if they own content on any site on that server. You can remove a user from a site if they no longer own content on the site. If a user is removed from all sites that the user is a member of, the user is deleted. #### URI DELETE /api/api-version/sites/site-id/users/user-id DELETE /api/api-version/sites/site-id/users/user-id?mapAssetsTo=new-user-id #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the user.
user-id The ID of the user to remove.
mapAssetsTo Optional. When included in the URI path, the contents owned by the user being removed are transferred to another user. If the user owns subscriptions and no mapAssetsTo is provided, the value of the owner is changed to unknown user. If a user owns only subscriptions, you can delete them from either server or site without having to set mapAssetsTo a different user.

If a user owns only subscriptions, you can delete the user from the server or site without setting this value.

Note: Even though both server administrators and site administrators can call this method, only server administrators can use the mapAssetsTo parameter to reassign content ownership. Site administrators can't use this parameter value. You must be a server administrator to remove a user who still owns content on Tableau Server.

new-user-id The ID of a user that receives ownership of contents of the user being remove.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:users: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Deletion failedSome other problem arose that prevented the user from being removed from the site.
403404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not DELETE.
409409003User asset conflictThe specified user still owns content on Tableau Server and cannot be deleted.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response contains no body (data) if the user is successfully removed from the site. The HTTP response code is 204 if the delete operation succeeded. ## Remove User from Group Removes a user from the specified group. Beginning in API 3.21, you can bulk remove users from a group by specifying multiple user IDs. #### URI **Remove a single user from a group** DELETE /api/api-version/sites/site-id/groups/group-id/users/user-id **Bulk remove users from a group** (beginning in API 3.21) PUT /api/api-version/sites/site-id/groups/group-id/users/remove #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-idThe ID of the group to remove the user from.
user-idThe ID of the user to remove.
#### Request Body **Remove a single user from a group** None **Bulk remove users from a group** (beginning in API 3.21) ``` ``` #### Attribute Values (bulk remove users only)
user-id

The ID (not name) of the user to add. You can get the user ID by calling Get Users on Site .

Beginning in API 3.21, you can bulk remove users from a group by specifying multiple user IDs.

#### Permissions This method can only be called by server administrators and site administrators. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 204 #### Response Body None #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400032Deletion failedA problem arose that prevented the user from being removed from the site.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user name in the URI doesn't correspond to an existing user.
404404012Group not foundThe group name in the URI doesn't correspond to an existing group.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example ##### Remove a single user from a group `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ##### Bulk remove users from a group (beginning in API 3.21) `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @bulk-remove-users-from-group.xml` **Content of bulk-remove-users-from-group.xml:** ``` ``` **Example response:** The response contains no body (data) if the user (or users) is successfully removed from the group. The HTTP response code is 204 if the delete operation succeeded. ## Update Group Updates a group on a Tableau Cloud site or Tableau Server. **Tableau Cloud** If the Tableau Cloud site is configured to use local authentication, the method lets you update the group name. **Tableau Server** If Tableau Sever is configured to use local authentication, the method lets you update the group name. If Tableau Server is configured to use Active Directory authentication, the method synchronizes the group with Active Directory. During synchronization, the method updates the group and modifies the set of users in the group to be the same as those in Active Directory. Users in Active Directory that are not in the group on Tableau Server are added to the group, and users that are not in the Active Directory group are removed from the group. Users that are no longer in Active Directory at all are unlicensed. If the update synchronizes with Active Directory, Tableau Server can perform the update either immediately (synchronously) or by using a background job (asynchronously). If Active Directory contains a large number of users, you should perform the synchronization process as a background job so that the process doesn't time out. By default, synchronizing with Active Directory is performed immediately (synchronously). #### URI PUT /api/api-version/sites/site-id/groups/group-id PUT /api/api-version/sites/site-id/groups/group-id?asJob=asJob-value #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the group.
group-id The ID of the group to update.
AsJob-value A Boolean value that is used if you are importing from Active Directory. Set this value to true to synchronize with Active Directory as a background task, or set this value to false to synchronize immediately (synchronously). The default is false.

Note: This parameter has no effect if the server is configured to use local authentication.

This attribute is available for Tableau Server only.

#### Request Body **Updating a local group** ``` ``` When the request is to update a local group and minimumSiteRole is specified, users are granted a license using the grant license on-login mode by default. **Updating an Active Directory group** (Tableau Server only) ``` ``` When the request body contains an element, and if Tableau Server or Tableau Cloud site is configured to authenticate via Active Directory, the Update Group method synchronizes with Active Directory. If Tableau Server is configured to use local authentication, including an element has no effect. #### Attribute Values
new-group-name The new name for the group.
AD-group-name

The name of the Active Directory group to synchronize with.

This attribute is available for Tableau Server only.

AD-domain

The domain for the Active Directory group.

This attribute is available for Tableau Server only.

minimum-site-role

Required if an import element or grantLicenseMode attribute are present in the request. The site role assigned to users who are imported from Active Directory (Tableau Server only) or granted a license automatically using the grant license on-sync or on-login mode.

If the requested user name matches an existing user in the group, the user either retains their existing role or are granted the one specified in the request, based on the role that enables the most capabilities. This is true whether the group the user belongs to is imported from Active Directory (Tableau Server only) or local.

Site roles that can be assigned, listed from the one enabling the least capabilities to the most, are as follows.

  1. Unlicensed
  2. Viewer
  3. Explorer
  4. ExplorerCanPublish
  5. Creator
  6. SiteAdministratorExplorer
  7. SiteAdministratorCreator

Note: You cannot use the REST API to set a user to be a Tableau Server administrator (ServerAdministrator site role).

license-mode

Optional. The mode for automatically applying licenses for group members. When the mode is onLogin, a license is granted for each group member when they log in to a site.

For local groups, the mode can be either onLogin or unset. If the attribute is omitted during an update, the group will use the license grant mode configured prior to the update. A local group configured to use onLogin can switch the mode to unset by updating the group using:

minimumSiteRole="UNLICENSED"

For groups that import an Active Directory domain (Tableau Server only), the grantLicenseMode can be updated to either onSync or onLogin. If the attribute is omitted during an update, the group will use the license grant mode configured prior to the update.

The minimum role granted to users through grantLicenseMode is specified in the siteRole attribute of the import element. If that role has less permissions than an existing role assigned to the user, then the user's permissions remain unchanged.

on-demand-access

Optional. A boolean value that is used to enable on-demand access for embedded Tableau content when the Tableau Cloud site is licensed with Embedded Analytics usage-based model or capacity-based model with Cloud+ or Tableau+ edition.

Set to true to enable the capability for the group or set to false to disable the capability for the group. For more information about on-demand access, see On-demand access for users in the Tableau Embedding API v3 Help.

This attribute is available for Tableau Cloud only starting from API version 3.21 (October 2023).

#### Permissions This method can only be called by Tableau Server administrators or Tableau Cloud site admins. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:groups: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 (immediate update) 202 (background update) #### Response Body **Updating a local group:** ``` ``` **Updating an Active Directory group (Tableau Server only):** ``` ``` **Background update:** ``` ``` **Notes:**  - If the operation is performed asynchronously, the response body contains a element that includes a job ID. You can check the status of the operation by using the [Query Job](#query_job) method, which returns status information about the job. A typical approach is to periodically call Query Job method and get the value of the progress attribute from the response body; when this value returns 100, the import process is complete. #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400984 Not licensed On-demand access can't be enabled if your site is not licensed with the usage-based model or capacity-based usage model with Tableau+ or Cloud+ edition.
403 400013 Invalid site role

The value of the minimumSiteRole or siteRole attribute must be Explorer, ExplorerCanPublish, SiteAdministratorCreator, SiteAdministratorExplorer, Unlicensed, or Viewer.

403 400019 Malformed import element If the body includes an <import> element, it must contain a source, domainName, and siteRole attribute. If any of these attributes are missing, the element is malformed. In addition, the source attribute must have a value of ActiveDirectory; otherwise the element is malformed.
403 403011 Active Directory not configured The request body contains an <import> element is included, but Tableau Server is configured for local authentication.
403 403020 Imported group name update forbidden The request body contains an <import> element and the value of the name attribute of the <group> element in the request body is different from the name of the group imported into Tableau Server as referenced by the group-id value in the URI.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404012 Group not found The group ID in the URI doesn't correspond to an existing site.
404 404016 Domain not found The request body includes an <import> element, but the specified domain name doesn't exist in Active Directory.
404 404017 Active Directory group not found The request body includes an <import> element, but no group with the name specified in the <group> element exists in Active Directory.
405 405000 Invalid request method Request type was not PUT.
409 409009 Group name conflict The group name in the request is already in use in the specified site. For the purpose of uniqueness checks, group names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Group Set Updates a group set name on a Tableau Server or Tableau Cloud site. **Version:** Available in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) 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 Tableau Server administrators or Tableau Cloud site admins.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:groupsets: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). #### URI PUT /api/api-version/sites/site-id/groupsets/group-set-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
group-set-idThe ID of the group set to update.
#### Request Body Copy ```    ``` Copy ``` {  "groupSet": {    "@name": "Researchers-one"  }} ``` #### Attribute Values
nameThe new name for the group set.
#### Response Code 200 #### Response Body Copy ```                  ``` Copy ``` {  "groupSet": {    "id": "group-set-id",    "name": "Researchers-one",    "groupCount": "2",    "group": [      {        "id": "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",        "name": "Internal"      },      {        "id": "9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b",        "name": "External"      }    ]  }} ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
403 400013 Invalid site role

The value of the minimumSiteRole or siteRole attribute must be Explorer, ExplorerCanPublish, SiteAdministratorCreator, SiteAdministratorExplorer, Unlicensed, or Viewer.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
405 405000 Invalid request method The request type wasn’t PUT.
409 409120 Group set not found. The group set ID in the request body doesn't correspond to an existing group set.
409 409121 Group set name conflict The group set name in the request already belongs to another group set. For the purpose of uniqueness checks, group set names are case-insensitive.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update SCIM Configuration Updates the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site. You must be the user that created the SCIM configuration to update the SCIM configuration unless the creator of the SCIM configuration is no longer a member of the site. **Version**: Available in API 3.26 (Tableau Cloud August 2025) and later. **License**: No additional license required. **Permissions**: Tableau Cloud site admins only. **Access Scope**: `tableau:scim_configurations:read` - Scope added in API 3.27 (Tableau Cloud December 2025) _For more information, see_ [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_,_ [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_, [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)_._ #### URI PATCH /api/api-version/sites/site-luid/scimConfigurations/scim-configuration-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
scim-configuration-idThe UUID of the SCIM configuration. To get the SCIM configuration UUID, see List SCIM Configurations.
#### Request Body ``` SCIM Contractors Canada d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658 ``` ``` { "scimConfiguration": { "name": "SCIM Contractors Canada", "idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658" } } ``` #### cURL Request Example ``` POST request: curl --location 'https://prod-ca-a.online.tableau.com/api/3.29/sites/0f04ea64-0d72-424a-afd8-ee7d758dc9b8/scimConfigurations \ --data '{ "scimConfiguration":{ "name": "SCIM Contractors Canada", "idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658" } }' ``` #### Attribute Values
name (Required) Name of the SCIM configuration.
idpConfigurationId

(Required) Authentication configuration to associate with the SCIM configuration.

Starting in API 3.26, you can have multiple SCIM configurations. Include the idpConfigurationId to identify which configuration to update. If a SCIM token is associated with SCIM configuration, updating the IdPConfigurationId deletes the SCIM token. Ensure the SCIM token's secret is removed from the identity provider's (IdP's) SCIM configuration. To get the idpConfigurationId, see List Authentication Configurations for Site.

Starting in API 3.28, you can associate OIDC or Google authentication with SCIM.

#### Response Code 204 #### Response Body ``` 065693d8-436a-4738-a8f1-375953a2a888 d3b782da-0787-44ca-8585-6fd48dbfc658 false true SCIM Contractors Canada 2025-04-01 06:31:47.882 ``` ``` { "scimConfiguration": { "id": "065693d8-436a-4738-a8f1-375953a2a888", "idpConfigurationId": "d3b782da-0787-44ca-8585-6fd48dbfc658", "isApiTokenActive": false, "isOwner": true, "name": "SCIM Contractors Canada", "createdAt": "2025-04-01 06:31:47.882" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400008Bad RequestThe content of the request body contains unsupported attributes, the SCIM configuration name already exists, or the idpConfigurationId is missing or not valid.
401401002Unauthorized AccessThe authentication token provided in the request header is invalid or has expired.
403403182ForbiddenThe SCIM configuration can only be updated by the user who created the SCIM configuration.
404404050Resource Not FoundThe SCIM configuration does not have an associated SCIM token.
404404057Resource Not FoundThe SCIM configuration UUID is not valid or does not exist on this site.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update User Modifies information about the specified user. **Tableau Server** If Tableau Server is configured to use local authentication, you can update the user's name, email address, password, or site role. If Tableau Server is configured to use Active Directory for authentication, you can change the user's display name (full name), email address, and site role. However, if you synchronize the user with Active Directory, the display name and email address will be overwritten with the information that's in Active Directory. **Tableau Cloud** For Tableau Cloud, you can update the site role for a user, but you cannot update or change a user's password, user name (email address), or full name. #### URI PUT /api/api-version/sites/site-id/users/user-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to update.
#### Request Body ``` ``` ``` { "user": { "fullName":"new-full-name", "email":"new-email", "password":"new-password", "siteRole":"new-site-role", "authSetting":"new-auth-setting", "identityPoolName":"identity-pool-name", "idpConfigurationId":"idp-configuration-id", "language":"language", "locale":"locale" } } ``` #### Attribute Values Any combination of the elements inside the element is valid. Only those elements present will result in updates to their values for the user. If no elements are present, the update will not take effect.
new-full-name (Optional) The new name for the user. Users can change names without affecting the groups they belong to. Tableau Server only. Not available in Tableau Cloud.
new-email (Optional) The new email address for the for the Tableau Server user.

Starting in API 3.26 (July 2025), the email address where the Tableau Cloud user can receive notifications. If no value is provided, Tableau Cloud uses the username value to send notifications to.

new-password (Optional) The new password for the user. Tableau Server only. Not available in Tableau Cloud.
new-site-role

The new site role to assign to the user. You can assign the following roles: Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, or Viewer.

Note: Only a user in the ServerAdministrator site role can use the REST API to add or remove another user from the ServerAdministrator site role. Users in the ServerAdministrator site role can only be moved to the Creator site role if one or more Creator licenses have been activated on the server; otherwise these users can only be moved to the Publisher site role. This method only supports the ServerAdministrator site role in API 2.8 and later.

new-auth-setting (Optional) The authentication type for the user.

Tableau Server

The authSetting attribute only applies when updating users on sites with site-specific SAML-enabled settings.

Tableau Cloud

The ability to create and enable multiple authentication methods simultaneously was introduced in API 3.25 (January 2025). As a result of this capability, consider the following:

  • For Tableau with MFA (or Tableau) authentication: To assign Tableau with MFA authentication (or Tableau authentication if still available for your site), you can use the authSetting or idpConfigurationId attribute, but not both.

  • For SAML and OIDC-based authentication:

    • For new configurations: To assign SAML or OIDC-based authentication, whose configurations were created during or after January 2025, you must use the idpConfigurationId attribute for assigning user authentication. Skip to idp-configuration-id.

    • For existing configurations: To assign SAML and OIDC-based authentication, whose configurations that Tableau has automatically prefixed with "Initial" (such as "Initial SAML," "Initial Google," "Initial OIDC," or "Initial Salesforce"), you can continue to use the authSetting attribute for assigning user authentication. Alternatively, you can use the idpConfigurationId attribute for assigning user authentication. Do not use both.

  • Notes:

You can assign the following values for the authSetting attribute:

  • SAML - The user signs in using the identity provider (IdP) configured for the site. For Tableau Cloud configuration, see Enable SAML Authentication on a Site. For Tableau Server, see Configure Site-Specific SAML.
  • OpenID - Tableau Cloud only: The user signs in using Google, Salesforce or OpenID Connect provider credentials. OpenID corresponds to Google, Salesforce, or OIDC authentication configuration in Tableau Cloud authentication settings.
  • TableauIDWithMFA - Tableau Cloud only: The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see About multi-factor authentication and Tableau Cloud.
  • ServerDefault - The user signs in using the default authentication method that's set for the server. For Tableau Cloud, if Tableau hasn't updated your site to require Tableau with MFA yet, you can continue to use this authentication type on a temporary basis. The ServerDefault value corresponds to TableauID in authentication settings. For Tableau Server, the SAML Server help page describes default authentication options.

identity-pool-name (Optional, Tableau Server only) When identity pools are configured, the name of the identity pool.

Starting in API 3.19, include the identity pool name when identity pools are configured and you need to add a user to an identity pool that uses the local identity store and OIDC authentication. For more information, see Identity Pools Methods.

idp-configuration-id

(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).

To find the idpConfigurationId attribute value, use the List Authentication Configurations for Site method.

Notes:

  • In cases where both attributes are supported, you can use the idpConfigurationId attribute or the authSetting attribute, but not both.
  • If neither idpConfigurationId nor authSetting attribute is specified, then TableauIdWithMFA (or in some cases ServerDefault if that option is still available for your site) is the authentication assigned to the user.
language

(Optional, Tableau Cloud only) Language of the user.

Starting in API 3.28 (March 2026), you can set the user's default language in Tableau Cloud to one of the supported languages (ISO 639-1). You can assign one of the following values: de, en_GB, en, es, fr_CA, fr, it, nl, pt, sv, th, ja, zh, zh_TW, or ko.

locale

(Optional, Tableau Cloud only) Locale of the user.

Starting in API 3.28 (March 2026), you can set the user's default locale to one of the supported locales. You can assign one of the following values: ar_SA, ar_AE, ar_BH, ar_DZ, ar_EG, ar_IQ, ar_JO, ar_KW, ar_LB, ar_LY, ar_MA, ar_OM, ar_QA, ar_SD, ar_SY, ar_TN, ar_YE, be_BY, bg_BG, ca_ES, cs_CZ, da_DK, de_DE, de_AT, de_CH, de_LU, el_GR, el_CY, en_US, en_AU, en_CA, en_GB, en_IE, en_IN, en_MT, en_NZ, en_PH, en_SG, en_ZA, es_ES, es_AR, es_BO, es_CL, es_CO, es_CR, es_DO, es_EC, es_GT, es_HN, es_MX, es_NI, es_PA, es_PE, es_PR, es_PY, es_SV, es_US, es_UY, es_VE, et_EE, fi_FI, fr_FR, fr_BE, fr_CH, fr_LU, fr_CA, ga_IE, he_IL, hi_IN, hr_HR, hu_HU, id_ID, is_IS, it_IT, it_CH, ja_JP, ko_KR, lt_LT, lv_LV, mk_MK, ms_MY, mt_MT, nl_NL, nl_BE, no_NO, pl_PL, pt_BR, pt_PT, ro_RO, ru_RU, sk_SK, sl_SI, sq_AL, sr_RS, sr_BA, sr_ME, sv_SE, th_TH, tr_TR, uk_UA, vi_VN, zh_CN, zh_HK, zh_SG, or zh_TW.

#### Permissions This method can only be called by server administrators or site administrators. In addition, site administrators have some limitations in what changes they can make to users: - Site administrators cannot set the fullName value. - On Tableau Server, site administrators can change the email and password values only if the caller is a site administrator for all sites that the user is a member of. On Tableau Cloud, you cannot change a user's email or password. - Site administrators can change the siteRole value only if the site is configured to allow site administrators to add and remove site users. Site administrators on Tableau Cloud can change the siteRole value because they have permission to add and remove site users. Starting in API 3.26 (July 2025), site administrators can update a user's email address that is different from the user's username. This email address is for receiving notifications only. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:users: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 ``` ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400000 Invalid email address The email attribute does not contain a valid email address.
400 400003 Bad request The user authentication setting ServerDefault is not supported for you site. Try again using TableauIDWithMFA instead.
400 400012 Bad request The user cannot be assigned the Unlicensed role because they are still a member of a group that has a minimum site role set.
400 400217 Unsupported language The specified language is not valid or not supported.
400 400218 Unsupported locale The specified locale is not valid or not supported.
403 403009 Licensing update on self forbidden A user cannot update their own licensing role.
403 403009 Guest update forbidden The Guest user is a special user and cannot be updated.
400 400013 Invalid site role

The value of the siteRole attribute must be Creator, Explorer, ExplorerCanPublish, ServerAdministrator, SiteAdministratorExplorer, SiteAdministratorCreator, Unlicensed, or Viewer.

403 403193 Forbidden A non-administrator user called this method or doesn't have permissions to update language for the user.
403 403194 Forbidden A non-administrator user called this method or doesn't have permissions to update locale for the user.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The user ID in the URI doesn't correspond to an existing user.
405 405000 Invalid request method Request type was not PUT.
409 409000 User conflict The user with the specified name is already registered on the site in the same domain.
409 409014 Licensing conflict The request is attempting to update the user to a licensing role that has insufficient capacity.
500 500109 Internal language error The language request could not be completed.
500 500110 Internal locale error The locale request could not be completed.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Upload User Credentials Uploads user credentials to a site on a destination Tableau Cloud or Tableau Server. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:oauth\_credentials:upload - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/users/user-luid/uploadSavedCreds #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
user-luidThe LUID of the user whose credentials you want to upload.
#### Request Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidMapping": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Request Attributes
associatedUserLuidMapping

(Required) The user IDs from the source site mapped to destination site user IDs.

encryptedKeychainList (Required) List of encrypted keychains from the source Tableau Server.
#### cURL Request Example ``` curl --location --request GET "https://example.com/api/3.24/sites/a946d998-2ead-4894-bb50-1054a91dcab3/users/6ae4a163-d073-4ab2-9668-954bab4b029e/uploadSavedCreds" --header "Content-Type: application/json" --data " BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= " ``` #### Response Code 200 #### Response Body None. #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404002 User not found The user ID in the URI doesn't correspond to an existing user.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # Using Fields in the REST API You can control the type and amount of data that gets returned from requests to the following REST API endpoints: - Get Users on Site \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_on_site) | [Field list](#get-users_site)\] - Query Datasources \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_datasources) | [Field list](#query_datasources)\] - Query Views for Site \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_views_for_site) | [Field list](#query_views_site)\] - Query Workbooks for Site \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbooks_for_site) | [Field list](#query_workbooks_site)\] - Query Projects \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_projects) | [Field list](#query_projects)\] - Query Jobs \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_jobs) | [Field list\]](#query_jobs) - Query Groups \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groups) | [Field list](#query_groups)\] - Get Favorites for user \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_favorites_for_user) | [Field list](#get_favorites_user)\] - List Custom Views \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#list_custom_views) | [Field list](#list_custom_views)\] - List Metrics for Site \[[API reference](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#list_metrics_for_site) | [Field list](#list_metrics)\] ## Fields and resources Fields are the named elements and attributes associated with Tableau Server resources, such as workbooks, data sources, projects, views, and owners. For example, the fields of the `workbooks` resource includes the workbook `id`, the workbook `name`. Depending upon the resource, the fields can include additional attributes and elements for child or sub-resources, such as the project name (`project.name`) and id (`project.id`), and description (`project.description`), .or owner attributes, and tags . By default, methods like [Query Workbooks for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbooks_for_site) return information about all of the workbooks on a Tableau Server site. If you are only interested in a subset of these, for example the names of the workbooks, you could search through the response data for the workbook names. But if there are a large number of workbooks, you could be looking through pages of data. You could filter the response data by using filtering and sorting, but that requires that you know what the names are to setup the filters. Starting in REST API 2.5 (Tableau 10.2), you can add _field expressions_ to the query string of the URI. By adding a field expression, you can tailor the response to return only the data for the resource elements you are interested in. You add a field expression as a query string using the following general format: `**?fields****=**` For example, you could use a field expression to query a Tableau Server for the just the names of the workbooks: `http://localhost/api/2.5/sites/1a10f5b9-029b-43e4-a620-773d1690338c/workbooks?**fields=name**` In this case, the method queries a Tableau Server site and only the names of workbooks are returned in the response packet. ## Creating field expressions You can create field expressions to use with a set of REST API query methods for Tableau Server resources. The resources are workbooks, data sources, views, and users. Each resource has a set of fields (for example, the name or id of a workbook or owner. In addition, each resource can contain additional elements (or sub-resources). For example, a workbook contains project resource. You can combine fields and resources to create complex field expressions. For example, you can query for the names of all the workbooks and the names of the projects associated with those workbooks. ### **Field expression syntax** A field expression has the following syntax: `**fields=**[keyword,][field, | resource, | resource.field,]...` **Note:** Field names, keywords, and resources are case sensitive. `keyword` (Optional) The `keyword` option can take two values. If you do not specify a field expression with your query, the response returns a default set of fields. If specified, the `keyword` must appear as the first value in the field expression.
KeywordDescription
_all_Returns all the available fields for the requested resource and any additional nested-resources. You can use this value to determine what the available fields are for a given resource.
_default_ Returns the default fields for the requested resource and the default fields for any additional nested resources. The default fields are the same fields that are returned by the query method before any field expression is added. You can combine the _default_ keyword in field expressions with additional fields or resources to return all the default fields and ones that are not part of the default set (for example, Fields=_default_,owner.name).
`field` Specifies the element of the resource that should be returned from the query. The fields that are available depend upon the method and resource that is the object of the query, and whether the query `keyword` asks for all fields (`_all_)` or the default fields (`_default_`). `resource` Specifies the additional (or nested) resource that should be returned from the query. The additional resources depend upon the method and resource that is the object of the query, and whether the query `keyword` asks for all fields (`_all_)` or the default fields (`_default_`). You do not need to specify the resource already queried by the method. For example, if you use [Query Workbooks for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbooks_for_site), you do not need to specify `workbook` as a resource. ## Resources and fields by method The following table shows the fields and resources that are available for the currently supported endpoints. The default fields and resources are included when you call the method without a field expression, or when you specify the keyword `_default_` in the field expression. Additional fields are returned when you use the `_all_` keyword in the field expression. To specify fields for the supported resources, you use the dot notation, for example, `project.id` or `owner.siteRole`. To specify non-default fields that are elements of a resource, such as the name of the owner of a project or the id of a workbook containing a specified view, you can combine the default keyword with additional fields to return just the information you are interested in (for example, `?fields=_default_,owner.name`)
Query Datasources Fields (Fields in bold face are included in the response by default.)

Datasource

Use either:
datasource.field
or: field

contentUrl

id

name

type

description

createdAt

updatedAt

encryptExtracts

isCertified

useRemoteQueryAgent

webPageUrl

size

tag

favoritesTotal

databaseName

connectedWorkbooksCount

hasAlert

hasExtracts

isPublished

serverName

Owner

Use:
_default_,owner.sub-field

owner.id

owner.name

owner.fullName

owner.siteRole

owner.lastLogin

owner.email

Project

Use:
_default_,project.sub-field

project.id

project.name

project.description

     
Get Users on Site Fields (Fields in bold face are included in the response by default.)

User

Use either:
user.field
or field

externalAuthUserId

id

name

siteRole

lastLogin

fullName

email

For servers configured with
site-specific SAML:

authSetting

         
Query Views for Site Fields (Fields in bold face are included in the response by default.)

View

Use either:
view.field
or field

id

name

contentUrl

createdAt

updatedAt

tags

sheetType

usage

Workbook

Use:
_default_,workbook.sub-field

workbook.id

workbook.description

workbook.name

workbook.contentUrl

workbook.showTabs

workbook.size

workbook.createdAt

workbook.updatedAt

workbook.sheetCount

workbook.hasExtracts

workbook.tags

Owner

Use:
_default_,owner.sub-field

owner.id

owner.name

owner.fullName

owner.siteRole

owner.lastLogin 

owner.email

Project

Use:
_default_,project.sub-field

project.id

project.name

project.description

   
Query Workbooks for Site Fields (Fields in bold face are included in the response by default.)

Workbook

Use either:
workbook.field
or field

description

id

name

contentUrl

showTabs

webpageUrl

size

createdAt

updatedAt

encryptExtracts

defaultViewId

tag

sheetCount

hasExtracts

Owner

Use:
_default_,owner.sub-field

owner.id

owner.name

owner.fullName

owner.siteRole

owner.lastLogin

owner.email

Project

Use:
_default_,project.sub-field

project.id

project.name

project.description

     
Query Projects Fields (Fields in bold face are included in the response by default.)

Project

Use either:
project.field
or field

id

name

description

createdAt

updatedAt

contentPermissions

parentProjectId

topLevelProject

writeable

 

Owner

Use:
_default_,owner.sub-field

owner.id

owner.name

owner.fullName

owner.siteRole

owner.lastLogin

owner.email

 

Contents Counts

Use:
_default_,contentsCounts.sub-field

contentsCounts.projectCount

contentsCounts.viewCount

contentsCounts.datasourceCount

contentsCounts.workbookCount

     
Query Jobs Fields (Fields in bold face are included in the response by default.)

Background Job

Use either:
job.field
or field

id

status

createdAt

startedAt

endedAt

priority

jobType

title

subtitle

         
Query Groups Fields (Fields in bold face are included in the response by default.)

Group

Use either:
group.field
or field

id

name

domain name

userCount

minimumSiteRole

         
Get Favorites for User Fields (Fields in bold face are included in the response by default.)

Favorites

Use either:
favorite.field
or field

label

parentProjectName

targetOwnerName

Datasource

Use:
_default_,datasource.sub-field

datasource.id

datasource.name

datasource.description

datsource.contentUrl

datasource.type

datasource.createdAt

datasource.updatedAt

datsource.encryptExtracts

datasource.isCertified

datasource.useRemoteQueryAgent

datasource.webpageUrl

datasource.serverName

datasource.databaseName

Project

Use:
_default_,project.sub-field

project.id

project.name

project.description

User

Use:
_default_,user.sub-field

 

user.id

user.name

user.fullName

user.siteRole

LastLogin

Email

Workbook

Use:
_default_,workbook.sub-field

 

workbook.id

workbook.name

workbook.description

workbook.contentUrl

workbook.showTabs

workbook.tags

workbook.size

workbook.createdAt

workbook.updatedAt

sheetCount

hasExtracts

View

Use:
_default_,view.sub-field

view.id

view.name

view.contentUrl

view.createdAt

view.updatedAt

List Metrics for Site Fields (Fields in bold face are included in the response by default.)

Metrics

Use either:
metric.field
or field

id

name

Owner

Use:
_default_,owner.sub-field

owner.id

owner.name

owner.fullName

owner.siteRole

owner.lastLogin

owner.email

Project

Use:
_default_,owner.sub-field

project.id

project.name

project.description

     

List Custom Views Fields (Fields in bold face are included in the response by default.)

Custom Views

id

name

createdAt

updatedAt

shared

         
## Combining field expression with filtering and sorting You can combine field expressions with filtering and sorting to further refine the data you want returned from the method. For example, you can filter on the date a workbook was last updated and then combine that with the field expression to return just the names of the workbooks that meet that criteria. You combine expressions using an ampersand (**&**). The URI and query string to return workbook names that were updated after a specified date might look like the following: http://localhost/api/2.5/sites/1a10f5b9-029b-43e4-a620-773d1690338c/workbooks?filter=updatedAt:gte:2016-10-27T00:49:27Z&fields=name Note that the fields supported by the `?filter=` and `?sort=` expressions might differ from the fields and resources that you can use in `?fields=` expressions. For information about the fields that can be used for filtering and sorting see, [Filtering and Sorting in the Tableau REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm). ## Examples of using fields in the REST API **Example 1:** The following URI shows the query to return just the id of the workbooks on the Tableau Server. `http://localhost/api/2.5/sites/1a10f5b9-029b-43e4-a620-773d1690338c/workbooks?fields=id` **Example 2:** The following example returns the default fields and the additional specified fields (owner name, project description) for the resource workbooks. `http://localhost/api/2.5/sites/1a10f5b9-029b-43e4-a620-773d1690338c/workbooks?fields=_default_,owner.name,project.description` **Example 3:** The following example returns the name of the workbooks and the default fields for the projects associated with the workbooks. In this case, the default fields are the project name and id.  Because this URI queries the workbook resource, it is not necessary to specify `workbook.name`. You could also use `?fields=name`. `http://localhost/api/2.5/sites/1a10f5b9-029b-43e4-a620-773d1690338c/workbooks?fields=workbook.name,project` **Example 4:** The following example combines the field expression and sorting. The query returns the names and usage data of the views and sorts the response by the workbook name. `http://localhost/api/2.5/sites/1a10f5b9-029b-43e4-a620-773d1690338c/views?fields=name,usage&sort=name:asc` [Skip to main content](#main-content) # Using Pulse Generate Insight Brief This topic provides supplemental information about how to use the [Generate insight brief](https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#tag/Pulse-Methods/operation/EmbeddingsService_GenerateInsightBrief) REST API to make the most of the Enhanced Q&A (Discover) features of the Tableau AI stack. For more information about Enhanced Q&A, see [Ask Questions and Discover Insights in Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_ask_discover_qa.htm). ## Request body ### Metric group context One of the most important components of `/brief` API is the `metric_group_context` associated with each message. This field specifies what are the metrics/definitions that Discover needs to consider for the query. ### Datasource restriction The `/brief` API works best when the metrics come from the same datasource. This allows the backend to apply the same filter for all the metrics to consider. Discover front-end makes sure that all the metrics in the `metric_group_context` shares the same datasource. Make sure you do the same when you call `/brief` API. ### Message History The `/brief` API request payload allows you to send the message history. The backend will use this and include the last few messages (up to 300 words) for the LLM to consider. You can trim the message history in the request to keep the request size manageable, but make sure the history starts with a query. The content of `metric_group_context` likely changes for each response. Usually the backend will narrow down the context to what is needed to respond to the query. \[The following is subject to change, but\] Currently, the API backend looks at the `metric_group_context` for the first and last messages to determine what are the metrics to consider for the query. As you trim the message history, consider keeping the `metric_group_context` for the first message broader to cover the appropriate search space for the query. Each message in the `messages` array contains the following fields: - `role` - The role of the initiator of the message. Values: `ROLE_USER` or `ROLE_ASSISTANT`. - `action_type` - The action type of the message. Value: `ACTION_TYPE_ANSWER`. - `content` - The text content of the message. - `metric_group_context` - The metrics and related objects used to set the context for the insight brief. - `metric_group_context_resolved` - A boolean indicating if the metric group context was resolved. Setting this to `true` means that the backend will use the metrics as-is to respond to your query. Most of the time you want this set to `false` so that the backend can change the scope of the metrics (apply filters/adjust time range) to correspond to the query. ## Response body ### `markup` Markdown format The `/brief` API returns a `markup` field containing the LLM response mostly in a Markdown format and some HTML (particularly `span` tag for bolded text). ### Citation: (`insight_id`|`metric_id`) The `markup` field contains the LLM response which includes one or more citations in it. For example: `The value is below the threshold of 300.0K, which is within the acceptable limit [[1]](41952042-7141-4886-b539-fc5e8199f4f5|dfe52942-85f4-4980-9465-0bc8e291dab9).` The citation markdown link for \[\[1\]\] contains two ids (`insight_id`|`metric_id`). You can find the insight with matching `insight_id` in the `source_insights` field in the response. The `viz` field contains visualization for the insight in a Vega-Lite format. Note that the `insight_id` is only valid in this response. I.e. A subsequent response citing the exact same insight may be associated with a different `insight_id`. ![Example showing how a citation in the markup field links to an insight\_id and metric\_id, with the corresponding insight found in the source\_insights field of the response.](/tableau/next/en-us/api/rest_api/en-us/Img/rest_api_concept_pulse_brief_1.png) You can also provide a link to the metric with the `metric_id`. e.g. `dfe52942-85f4-4980-9465-0bc8e291dab9` in the above example. ![Example showing how to use the metric\_id from a citation to create a link to the corresponding metric.](/tableau/next/en-us/api/rest_api/en-us/Img/rest_api_concept_pulse_brief_2.png) In many scenarios, the `/brief` API can change the scope of the metric based on the query. In that scenario, you are going to see the `metric_id` prefixed with `temp-` keyword. To use the `temp-metric_id`, find the associated `metric_specification` from the `group_context` field in the response and use it with the Get or create metric API to get the actual `metric_id` that you can create a link for. ### Group context The `group_context` field contains the refined list of metrics that the `/brief` API backend generates insights for for the LLM to consider. The LLM response may not use all of the metrics in its response. The Pulse Discover front-end only shows the metrics that are cited in the response. ### Additional response fields The `/brief` API response also includes the following fields: - `follow_up_questions` - An array of suggested follow-up questions. Each question contains a `content` field (the question text) and a `metric_group_context_resolved` field (boolean indicating if the metric group context is resolved). - `generation_id` - A unique identifier for this insight brief generation. - `not_enough_information` - A boolean field. If `true`, there is not enough information to generate an insight brief. If `false`, there is enough information to generate an insight brief. [Skip to main content](#main-content) # Using HTTPS (SSL/TLS) for API Calls As a security measure, you should make API calls to Tableau Server using the HTTPS protocol (SSL or TLS)—that is, using an encrypted channel between your client and Tableau Server. Information is passed as plaintext between the client and server using XML or JSON blocks in the request and response body. Using HTTPS protocol helps keep this information secure. To make API calls with HTTPS, you must configure Tableau Server to use SSL. For details, see [SSL](https://help.tableau.com/current/server/en-us/help.htm#ssl_config.htm) in the Tableau Server documentation. (If you are testing Tableau Server, you can install a self-signed certificate in order to support SSL.) If you make an HTTPS call to Tableau Server but you have not configured the server to use SSL, the server refuses the request. When working with Tableau Cloud, you must use the HTTPS protocol to make API calls. [Skip to main content](#main-content) # Virtual Connections Methods Virtual connections are a centralized way to share access to databases and tables, allowing for convenient reuse. A virtual connection has one or more database connections, where server locations, database names, and credentials are defined. Each database connection accesses one database or file. Associated data policies provide security for workbooks, data sources, and flows that use virtual connections. Using the virtual connections methods of the Tableau Server REST API you can: - Get a list of virtual connections and details for each. - Get and update the connection information for a virtual connection. This functionality relates to the UI elements and concepts described at: [Use a Virtual Connection](https://help.tableau.com/current/server/en-us/dm_vconn_use.htm). ## 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: Virtual Connections](https://www.postman.com/salesforce-developers/salesforce-developers/folder/rnppoei/virtual-connections) ## Add Tags to Virtual Connection Adds tags to a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the View permission for the virtual connection and your site role must be at least Explorer.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connection\_tags:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body ``` ``` #### Attribute Values
tagThe text of the tag.
#### cURL Request Example `curl --location --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/tags' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data @data.xml` **Contents of data.xml.** ``` ``` #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400049Error adding tagsThere was a problem adding tags to the specified virtual connection.
403403004Adding tags forbiddenThe user doesn't have permissions to add tags to the virtual connection.
404404000Site not foundThe site ID in the URI is not for an existing site.
404404006Virtual connection not foundThe virtual connection ID in URI doesn't correspond to an existing virtual connection.
404405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Add Virtual Connection Permissions Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call. If a specified permission has already been granted or denied for a given user or group, the system ignores it. #### URI PUT /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the virtual connection.
virtualconnection-idThe ID of the virtual connection to set permissions for.
#### Request Body ``` ``` #### Attribute Values
user-id The LUID of the user to add permissions for. A request does not need to include both a user and a group grantee.
group-id The LUID of the group to add permissions for. A request does not need to include both a user and a group grantee.
capability-name

The capability to assign. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.

For more information, see Permissions.

capability-mode Allow to allow the capability, or Deny to deny it.
#### Permissions You must be an administrator or have the ChangePermissions permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:update ``` #### Response Code 200 #### Response Body ``` ``` #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400009Invalid capabilityThe specified capability is invalid for a virtual connection. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.
403403004Permissions setting forbiddenThe user tried to change permissions for a virtual connection but doesn't have the permission to change them.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404012Group not foundThe group specified in the request body doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
404404014Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not PUT.
400409004Invalid LUIDThe virtual connection LUID in the URI was not found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data ' '` ## Add Virtual Connection to Server Schedule Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server. _For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task)._ This method identifies and refreshes only the tables in the virtual connection that are configured as extracts; live tables are ignored. **Version**: Available in API 3.30 and later. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Tableau Server users who are not server administrators or site administrators can only add a virtual connection to a schedule if they own the virtual connection, or are the project leader for the project that contains the virtual connection. **Access Scope**: `tableau:schedules:update` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/schedules/schedule-id/virtualconnections #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
schedule-idThe LUID for the schedule that you are associating with the virtual connection.
#### Request Body ``` starting-item-id ``` #### Attribute Values
transaction-level

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
incremental-flag

Optional, boolean. Default is false.

  • If set to false, do a full refresh. Fully refresh all extracts including those configured for incremental extract.
  • If set to true, do an incremental refresh. Add new rows to incremental extracts. Full refresh other extracts.
virtualconnection-id The LUID of the virtual connection to add to the schedule.
starting-item-id The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element.
#### cURL Request Example ``` curl --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/schedules/9a4ebbab-9ec8-487a-9b48-47fa81d6077a/virtualconnections' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 200 #### Response Body ``` 3577de68-2779-4962-b13d-3265ec98a4cb ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
400 400223 Virtual connection table not found. A LUID in startingItemIds is not an extract-eligible table on the virtual connection.
400 400225 Duplicate virtual connection table. startingItemIds contains the same table LUID more than once.
400 404049 No virtual connection specified. The request body must include a virtual connection in the extractRefresh element.
400 409004 Invalid parameter. startingItemIds contains a value that is not a valid LUID.
400 409090 No extract-eligible tables. The virtual connection has no active revision, or none of its tables are configured for extract refresh.
403 403078 Unable to create the task.

One of the following applies:

  • The user is not a system or site administrator and does not own the virtual connection.
  • The virtual connection already has a refresh scheduled on this schedule.
  • The virtual connection is in a personal space.
  • The extract refresh operation is not allowed for the virtual connection.
404 404023 Schedule not found. Check the schedule LUID.
404 404049 Virtual connection not found. Check the virtual connection LUID.
405 405000 Method not allowed. Request type must be PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Create Cloud Extract Refresh Task Creates a custom schedule for an extract refresh on Tableau Cloud. The target of the schedule can be a data source, a workbook, or a virtual connection. _For Tableau Server, see [Add data source to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_data_source_to_schedule), [Add workbook to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_workbook_to_schedule), and [Add virtual connection to server schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_virtual_connection_to_schedule)._ **Version:** Available in API 3.20 (Tableau Cloud June 2023) and later. Virtual connection support added in API 3.30. 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 for a data source or workbook target. A virtual connection target requires Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions:** Administrators and any user with the creator role can create a custom schedule for an extract refresh.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:tasks: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-id/tasks/extractRefreshes #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
#### Request Body ``` ``` ``` { "extractRefresh": { "type": "FullRefresh", "workbook": { "id": "54321fd-6365-44d5-925b-644e5281b605" } }, "schedule": { "frequency": "Daily", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } ``` #### Request Attributes All request attributes are **required** to create a custom schedule for an extract refresh, except where noted below.
extractRefresh type The type of extract refresh being scheduled. Valid values include:
  • FullRefresh
  • IncrementalExtract
extractRefresh transactionLevel

(Optional) : Only used with a virtual connection.

Optional. DATABASE or TABLE. Default is DATABASE.

  • If set to DATABASE: If any table extract refresh fails, none of the extracts are updated.
  • If set to TABLE: If a table extract fails, only that table's extract isn't updated.
workbook id
or datasource id
or virtualConnection id
The LUID of the workbook, data source, or virtual connection that is the target of the custom schedule.
startingItemId

Only used with a virtual connection, when extractRefresh type is FullRefresh

The LUID of an extract table in the virtual connection. You may have more than one <startingItemId> element inside of a <startingItemIds> element. See Virtual Connection Example.

tableLuid

Only used with a virtual connection, when extractRefresh type is IncrementalExtract

The LUID of an extract table in the virtual connection. You may have more than one <tableLiud> element inside of a <tableLiuds> element. See Virtual Connection Example.

schedule frequency (Required to create subscription) enumeration: The scheduled frequency for triggering the task. Valid values include:
  • Hourly
  • Daily
  • Weekly
  • Monthly
frequencyDetails start (Required to create subscription) time: If the schedule frequency is Daily, Weekly, or Monthly, then start is the time of day on which scheduled jobs should run. If the frequency is Hourly, then start is the beginning of the time range during which jobs should be started. The valid format is HH:MM:SS.
frequencyDetails end

(Required to create subscription) time: If the schedule frequency is Hourly, or Daily with an interval of hours less than 24, then end is the time of day on which scheduled jobs should stop being run. The valid format is HH:MM:SS. Time should be specified in 5 minute increments and the difference between start and end times should be increments of 60 minutes. For example, a valid frequencyDetail would be:

<frequencyDetail start="20:45:00" end="21:45:00">
  . . .
</frequencyDetail>
interval {interval type} (Required to create subscription) string: Defines when and how often a scheduled job executes within the time parameters set in the start and end values of the frequencyDetails of the schedule. The type and valid values for an interval expression depend on the declared frequency of the schedule as follows:

FrequencyValid interval values
Hourly The value of an interval for an Hourly schedule can be only one of either:
  • hours="1" The number of hours between jobs. 1 is the only valid value.
  • minutes="60" The number of minutes between jobs. 60 is the only valid value.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, and Saturday.

    For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="1"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>

Daily The value of Daily can have multiple weekday elements, but only one hours declaration. An hours interval is required.
  • hours="interval" The interval between execution of jobs on the weekday(s) specified. Valid values are 2, 4, 6, 8, 12, or 24. Note that if the interval value of a daily schedule is less than 24, a frequencyDetail end time must be supplied.
  • weekDay="weekday" The weekday(s) the job will be run on. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.

    For example, to schedule to run a job every 4 hours on Sunday and Wednesday, during the time range specified in frequencyDetails use an interval like:
    <intervals>
      <interval hours="4"/>
      <interval weekDay="Sunday"/>
      <interval weekDay="Wednesday"/>
    <intervals>
WeeklyweekDay="weekday" The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are: Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.
Monthly

The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:

Specify the day(s) using the number of the day in the month;

  • monthDay="day" The number of the day of the month. Valid values are the whole numbers 1 to 31 or LastDay. If you specify monthDay by day number then you can use multiple interval instances to choose for the job to run on multiple days in the month. If you use LastDay then only one instance of interval can be used in the schedule to specify the last day of the month.

Specify the day by describing which occurrence of a weekday within the month.

  • monthDay="occurrence_of_weekday" Weekday="weekday" The occurrence of the specified weekday within the month when a job should be run. Valid values for occurrencee_of_weekday are First, Second, Third, Fourth, Fifth, or LastDay. Valid values for weekday are Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday. If the value is lastDay then the job will run on the last occurrence of the specified weekday in the month.

    For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:
    <interval monthDay="Third" weekDay="Thursday"/>

#### Virtual Connection Example When the target is a virtual connection, use `virtualConnection id` instead of `workbook id` or `datasource id`. The following example includes only the `` and child elements for brevity; see the primary example above for the a full request without the elements that apply only to virtual connections. _Incremental refresh of specific tables, with a table-level transaction:_ ``` b4e39d59-19c3-4380-8ea4-9bfa4ed8fb84 ``` #### cURL Request Example `curl --location --request POST "https://10ax.online.tableau.com/api/3.29/sites/a946d998-2ead-4894-bb50-1054a91dcab3/tasks/extractRefreshes" --header "Content-Type: application/xml" --data " "` 200 #### Response Body When the target is a virtual connection, the response's `extractRefresh` element includes a `transactionLevel` attribute and a `virtualConnection` element (with a sibling `startingItemIds`, if starting items were specified) in place of `datasource` or `workbook`. ``` ``` ``` { "extractRefresh": { "id": "13237fd-6365-44d5-925b-644e5281b605", "consecutiveFailedCount": "0", "type": "IncrementalRefresh", "datasource": { "id": "0057ccac-872a-11e5-bb51-f763326b1350" } }, "schedule": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "createdAt": "2023-04-06T23:43:12-0700", "updatedAt": "2023-04-06T23:43:12-0700", "frequency": "Daily", "nextRunAt": "2023-04-06T23:43:12-0700", "frequencyDetails": { "start": "18:30:00", "end": "23:30:00", "intervals": { "interval": [ { "hours": "4" }, { "weekDay": "Sunday" }, { "weekDay": "Wednesday" } ] } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
400400225Duplicate starting itemstartingItemIds contains a duplicate table LUID.
409409090Extract operation not allowedThe virtual connection has no extract-configured tables; all tables are live.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
404404026Task not foundThe task for the extract refresh could not be found.
409409004invalid parameter valueThe request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between start and end times are not increments of one hour, this error will result.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Extracts from Virtual Connection Deletes the extracts from a virtual connection, which changes it from extract to live mode. This operation applies to the entire virtual connection. You can't target individual tables. **Version**: Available in API 3.30. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Extracts for virtual connections can be deleted by Tableau server or site administrators, and by users who own the virtual connection or are an owner or leader of the project where the virtual connection resides. **Access Scope**: `tableau:extracts:delete` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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-id/virtualconnections/virtualconnection-id/deleteExtract #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection whose extract is to be deleted.
#### Request Body The request body is an empty tsRequest element. `` ``` {} ``` #### cURL Request Example ``` curl --request POST 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/deleteExtract' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 204 No Content #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400409128No extract to delete.The virtual connection has no extract. Neither the active revision nor any of its tables has extracts enabled.
400409099Unable to delete the extract.A generic error occurred while converting the virtual connection to live and deleting its extract.
403409098User not authorized to delete the extract.The user must be able to see the virtual connection and must have permission to convert its extract to live.
404404049Virtual connection not found.Check the virtual connection LUID. This error also occurs if the virtual connection has no active revision.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Tag from Virtual Connection Deletes a tag from a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the View permission for the virtual connection and your site role must be at least Explorer.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connection\_tags:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
tag-nameThe text of the tag.
#### Request Body None #### cURL Request Example `curl --location --request DELETE 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/tags/office' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
400400077Error deleting tagThere was a problem deleting the tag from the specified virtual connection.
403403004Deleting tags forbiddenThe user doesn't have permissions to add delete tags from the virtual connection.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404004Virtual connection not foundThe virtual connection ID in the URI doesn't correspond to an existing virtual connection.
404404007Tag not foundThe tag in the URI doesn't exist for the specified virtual connection.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Virtual Connection Deletes a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Delete permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:delete - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl --request DELETE 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' ``` #### Response Code 204 #### Response Body None #### Errors
HTTP statuserror CodeConditionDetails
403403004User not authorized.Check to make sure the user has the required permissions.
404404049Virtual connection not foundCheck the virtual connection LUID.
409409122Generic errorAn unknown error occurred.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Virtual Connection Permission Removes the specified virtual connection permission for the specified group or user. #### URI DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions/groups/group-id/capability-name/capability-mode DELETE /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions/users/user-id/capability-name/capability-mode #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the virtual connection.
virtualconnection-id The ID of the virtual connection to remove the permission for.
group-id The LUID of the group to remove the permission for. A request does not need to include both a user and a group grantee.
user-id The LUID of the user to remove the permission for. A request does not need to include both a user and a group grantee.
capability-name

The capability to remove the permission for. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.

For more information, see Permissions.

capability-mode Allow to remove the allow permission, or Deny to remove the deny permission.
#### Request Body None #### Permissions You must be an administrator or have the Delete permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:delete ``` #### Response Code 204 #### Response Body None #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400009Invalid capabilityThe specified capability is invalid for a virtual connection. Valid capabilities for a virtual connection are Read, Connect, Overwrite, ChangeHierarchy, Delete, and ChangePermissions.
403403004Permissions setting forbiddenThe user tried to change permissions for a virtual connection but doesn't have the permission to change them.
404404000Site not foundThe specified site doesn't correspond to an existing site.
404404002User not foundThe user specified in the request body doesn't correspond to an existing user.
404404012Group not foundThe group ID in the URI doesn't correspond to an existing group.
404404013Capability not assignedThe capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).
404404014Capability not foundA capability specified in the request body doesn't correspond to a defined capability. This can apply to either an invalid capability name or to a capability other than Allow or Deny for any mode value.
405405000Invalid request methodRequest type was not DELETE.
400409004Invalid LUIDThe virtual connection LUID in the URI was not found.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location --request DELETE 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/read/allow' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` ## Download Virtual Connection Downloads a virtual connection in `.tvcx` format. _To download a JSON representation of a virtual connection instead, see [Download Virtual Connection as JSON](#download_virtual_connection_as_json)._ A `.tvcx` file is a packaged virtual connection. You can publish a downloaded `.tvcx` file with [Publish Virtual Connection](#publish_virtual_connection). **Version**: Available in API 3.30 and later. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: You must have the Overwrite permission for the virtual connection and your site role must be at least Creator, or you must be a site or server administrator. **Access Scope**: `tableau:virtual_connections:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/content #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site that contains the virtual connection.
virtualconnection-idThe LUID of the virtual connection to download. To get the LUID, use List Virtual Connections.
Unlike [Download Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#download_data_source), this method has no `includeExtract` parameter. If the virtual connection uses extracts, the download always includes them. Encrypted extracts are decrypted before packaging, so the downloaded `.tvcx` file can be published to any site. #### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/content" -X GET -H "X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3" -o my-virtualconnection.tvcx ``` The response is a file that contains the virtual connection. #### Response Code 200 #### Response Headers `Content-Type: application/octet-stream` `Content-Disposition: name="tableau_virtual_connection_content"; filename="virtualconnection-filename.tvcx"` #### Response Body The virtual connection in `.tvcx` format, a binary ZIP archive with the following contents: ``` virtualconnection-name.tvcx (ZIP) virtualconnection-name.tvc The virtual connection schema (tables, columns, connections, and policy collection) Data/Extracts/*.hyper Hyper extracts. Present only if the virtual connection uses extracts. ``` A `.tvcx` file for a virtual connection that has only live tables contains just the `.tvc` schema file. #### Errors
HTTP statuserror CodeConditionDetails
400400200Download virtual connection errorThe virtual connection ID is not a valid ID, or the .tvcx file could not be built.
403403174Download virtual connection forbiddenThe user does not have permission to download the virtual connection.
404404000Site not foundThe site LUID in the URI doesn't correspond to an existing site.
404404049Virtual connection not foundThe virtual connection does not exist.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Virtual Connection as JSON Downloads a JSON-representation of a virtual connection. _To download a virtual connection as a `.tvcx` file, see [Download Virtual Connection](#download_virtual_connection)._ **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Overwrite permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd" -X GET -H "Content-Type: application/xml" -H "X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3" ``` #### Response Code 200 #### Response Body ``` virtualconnection-as-json ``` ``` { "virtualConnection": { "project": { "id": "1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" }, "owner": { "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" }, "content": "virtualconnection-as-json", "name": "virtualconnection-name" } } ``` The response body contains the project LUID, owner LUID, and a content element (for XML output) or content property (for JSON output) containing the virtual connection schema rendered as JSON. If the response is XML, the content element is unescaped JSON. If the response is JSON, the content property is escaped JSON. #### Errors
HTTP statuserror CodeConditionDetails
400400200Generic errorAn unknown error occurred.
403403174User not authorized.Check to make sure the user has the required permissions.
404404049Virtual connection not foundCheck the virtual connection LUID.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download Virtual Connection Revision as JSON Downloads a JSON-representation of an earlier revision of a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Overwrite permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/revisions/revision-number #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
revision-numberThe revision number (revisionNumber) of the virtual connection, as returned by the Get Virtual Connection Revisions method. This is an integer, not a LUID.
#### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/revisions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' ``` #### Response Code 200 #### Response Body ``` virtualconnection-as-json ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "owner": { "id": "owner-id" }, "content": "virtualconnection-as-json", "name": "virtualconnection-name" } } ``` The response body contains the project LUID, owner LUID, and a content element (for XML output) or content property (for JSON output) containing the virtual connection schema rendered as JSON. If the response is XML, the content element is unescaped JSON. If the response is JSON, the content property is escaped JSON. #### Errors
HTTP statuserror CodeConditionDetails
400400200Generic errorAn unknown error occurred. Check to make sure the revision number is a revision and not the active virtual connection.
403403174User not authorized.Check to make sure the user has the required permissions.
404404049Virtual connection not foundCheck the virtual connection LUID. Check that the revision number exists.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Virtual Connection Revisions Lists revisions for a virtual connection. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Overwrite permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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). **Note:** This method can only succeed if version history is enabled for the specified site. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/revisions GET /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/revisions/?pageSize\=page-size&pageNumber\=page-number #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtual-connection-idThe LUID for the virtual connection.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/revisions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3 ' ``` #### Response Code 200 #### Response Body ``` ``` ``` "pagination": { "pageNumber": "page-number", "pageSize": "page-size", "totalAvailable": "page-count" }, "revisions": { "revision": [ { "publisher": { "id": "publisher-id", "name": "publisher-username" }, "revisionNumber": "revision-number", "publishedAt": "datetime", "deleted": deleted-flag, "current": current-flag }, { "publisher": { "id": "publisher-id", "name": "publisher-username" }, "revisionNumber": "revision-number", "publishedAt": "datetime", "deleted": deleted-flag, "current": current-flag }, { ...Additional revisions... } ] } } ``` The `current` property of a revision shows `false` for all revisions except for the currently active virtual connection revision, in which case it shows `true`. #### Errors
HTTP statuserror CodeConditionDetails
400400058Generic errorAn unknown error occurred.
403403054User not authorized.User doesn't have permissions to revisions on this virtual connection. Check the user's permissions.
403403173User not authorized.User forbidden from listing virtual connection revisions. Check the user's permissions and site role.
403403053Revision history is disabled on the site.Check the revision history setting.
404404049Virtual connection not foundCheck the virtual connection LUID.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Virtual Connections Returns a list of available virtual connection names and IDs. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** By default, all users can view virtual connections.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-id/virtualconnections GET /api/api-version/sites/site-id/virtualconnections/?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/virtualconnections/?sort=sort-expression #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site that contains the virtual connection.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
sort-expression(Optional) An expression that lets you specify the order in which virtual connection information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
#### Request Body None #### cURL Request Example `curl --location --request GET "https://MY_SERVER/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/virtualconnections" \ --header "X-Tableau-Auth: 3bl3fJb0T6qxhaCqneNhWg"Nmv6zrJfYeiiovCuEs2grrBAZlREbRGl"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body ```             ``` ``` {  "pagination": {    "pageNumber": "page-number",    "pageSize": "page-size",    "totalAvailable": "total-available"  },  "virtualConnections": {    "virtualConnection": {      "createdAt": "datetime-created",      "hasExtracts": "has-extracts-flag",      "id": "virtual-connection-id",      "isCertified": "is-certified-flag",      "name": "virtualconnection-name",      "updatedAt": "datetime-updated",      "webpageUrl": "web-page-url"    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for virtual connections at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
400400008Invalid parameter valueA parameter in the request body is missing or invalid.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Virtual Connection Database Connections Returns information about database connections in the specified virtual connection **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** Users who are not administrators can query a virtual connection only if they have explicit or implicit \[Connect\] (view) permission for the virtual connection.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content:read - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 GET /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/connections GET /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/connections?pageSize=page-size&pageNumber=page-number #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site that contains the virtual connection.
virtual-connection-idThe LUID for the virtual connection that includes the database connections.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### cURL Request Example `curl --location --request GET "https://MY_SERVER/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/virtualconnections/26bc30d8-90d6-4af1-922d-ac285e7b08fb/connections?X-Tableau-Auth =3bl3fJb0T6qxhaCqneNhWg"Nmv6zrJfYeiiovCuEs2grrBAZlREbRGl"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body ```            ``` ``` {  "pagination": {    "pageNumber": "pageNumber",    "pageSize": "page-size",    "totalAvailable": "total-available"  },  "virtualConnectionConnections": {    "connection": {      "id": "connection-id",      "serverAddress": "server-address",      "dbClass": "database-type",      "serverPort": "port-number",      "userName": "connection-user-name"    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for virtual connections at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
401401002UnauthorizedThe authentication token provided in the request header was invalid or has expired.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Virtual Connection Publishes a virtual connection on the specified site, either from a packaged virtual connection file (`.tvcx`) or from a downloaded JSON representation. If the virtual connection does not exist, it is published as a new virtual connection. If it already exists and you choose to overwrite it, the virtual connection is published as a revision of the existing virtual connection. You can publish in either of these ways: - **`.tvcx` file**. Send a packaged virtual connection file, as returned by [Download Virtual Connection](#download_virtual_connection). A `.tvcx` file can include extracts. - **JSON representation**. Send the virtual connection schema, as returned by [Download Virtual Connection as JSON](#download_virtual_connection_as_json), inline in the request body. **Version**: Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. Support for publishing a `.tvcx` file added in API 3.30. **License**: Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions**: You must have the Overwrite permission for the virtual connection and your site role must be at least Creator, or you must be a Tableau administrator. **Access Scope**: `tableau:virtual_connections:create`. Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). To publish a `.tvcx` file, you can call this method in two ways. You can publish a virtual connection in a single request. To do that, you include the content of the `.tvcx` file in the body of the request. The maximum size of a file that can be published in a single request is about 64 MB. Alternatively, you can publish a `.tvcx` file in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload), and then commit the upload by calling Publish Virtual Connection. In this case, Publish Virtual Connection doesn't contain the file to publish. We recommend this approach for files larger than about 64 MB, such as files that include large extracts. **Virtual connections with extracts** A `.tvcx` file for a virtual connection that uses extracts contains the Hyper extract files, in addition to the virtual connection schema. A `.tvcx` file for a live virtual connection contains only the schema. This method accepts both kinds of file. **Draft or active** When you publish a JSON representation, the virtual connection can be published as a draft or as an active virtual connection, as set by the `publishAsDraft` parameter. A virtual connection that you publish from a `.tvcx` file is always published as an active virtual connection, whether or not the file includes extracts. The `publishAsDraft` parameter does not apply to a `.tvcx` file. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-id/virtualconnections POST /api/api-version/sites/site-id/virtualconnections?publishAsDraft=publish-as-draft-flag POST /api/api-version/sites/site-id/virtualconnections?overwrite=overwrite-flag POST /api/api-version/sites/site-id/virtualconnections?uploadSessionId=upload-session-id&overwrite=overwrite-flag #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The LUID of the site to publish to.
publish-as-draft-flag (Optional) true to publish the virtual connection as a draft, or false to publish it as an active virtual connection. The default is true. This parameter applies only when you publish a JSON representation. The parameter is case sensitive.

If the virtual connection contains an extract, the publishAsDraft parameter value is ignored and the virtual connection is published as a draft.

Note: If you are using the REST API to publish a virtual connection as a draft, note the virtual connection's LUID (virtualconnection id) in the response body. Use that LUID to build a URL to further edit, create extracts for, or publish the virtual connection using the virtual connection editor in the regular web interface. For more information, see "Draft in Progress" in the Tableau Cloud Product Help and Tableau Server Product Help.

overwrite-flag true to overwrite a virtual connection that has the same name in the target project, or false to fail if the specified virtual connection already exists. The default is false. If overwrite-flag is set to true but the virtual connection doesn't already exist, the operation succeeds.
upload-session-id (Optional, .tvcx files only) If you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
#### Request Body The request body depends on whether you publish a `.tvcx` file or a JSON representation. **Publishing a .tvcx file** The content type in the header of requests to publish a `.tvcx` file must use the mixed multipart content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. The server uses this content type to tell a `.tvcx` request from a JSON request. A request with any other content type, such as `application/octet-stream` or `multipart/form-data`, is handled as a request to publish a JSON representation and fails. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_virtual_connection"; filename="virtualconnection-name.tvcx" Content-Type: application/octet-stream content-of-virtualconnection-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` **Publishing a JSON representation** ``` virtualconnection-as-json ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "owner": { "id": "owner-id" }, "content": "virtualconnection-as-json", "name": "virtualconnection-name" } } ``` #### Request Attributes **For a .tvcx file**
boundary-string (Required) A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

virtualconnection-name (Required) The name to assign to the virtual connection when it is saved on the server. This is typically derived from the file name.
project-id (Optional) The LUID of the project to publish to. If you omit it, the virtual connection is published to the default project.
owner-id (Optional) The LUID of the owner of the virtual connection. If you omit it, the authenticated user becomes the owner.
tableau_virtual_connection file part The .tvcx file. Include it when you publish in a single request. Omit it when you commit a file that was uploaded in parts. If you include both a file part and the uploadSessionId parameter, or if you include neither, the request fails.
**For a JSON representation**
virtualconnection-name The name of the virtual connection you are publishing. If publishing an existing virtual connection as a revision, the virtual connection name is ignored.
project-id The LUID of the project you are publishing to.
owner-id This attribute is required, but is ignored.
virtualconnection-as-json

The virtual connection schema rendered as JSON, as obtained using the Download Virtual Connection as JSON or Download Virtual Connection Revision as JSON method. The schema appears in the content element (for XML output) or content property (for JSON output).

Note: Changing the downloaded schema and then using it with this method isn't supported.

When using the Publish Virtual Connection method, we recommend using the virtual connection schema format that matches the format you used for downloading it. This is important because the virtual connection schema returned by the download methods has escape characters in it if the output was JSON. If you download and publish using different formats, you will have to make changes to the JSON representation of the virtual connection.

In other words:

  • If the output of the Download Virtual Connection as JSON method was XML (except for the content element, which is always a form of JSON), use XML when using this Publish Virtual Connection method.
  • If the output of the Download Virtual Connection as JSON method was JSON (in which case it will have escape characters in the content property), use JSON when using this Publish Virtual Connection method.
  • Alternatively, you can escape or unescape the schema yourself if you are downloading and publishing using different formats.

For more information on the difference between using XML and using JSON with the REST API, see Fundamentals of the Tableau Server REST API.

#### cURL Example **Publishing a .tvcx file** `curl "http://MY_SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections?overwrite=false" -X POST -H "X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3" -H "Content-Type: multipart/mixed; boundary=----TabBoundary" --data-binary @publish-vconn-request.txt` The file `publish-vconn-request.txt` contains the multipart request body shown above in **Publishing a file in the request body**. **Publishing a JSON representation** `curl --location 'http://MY_SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections?overwrite=true&publishAsDraft=false' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data @data.xml` **Content of data.xml**: ``` virtualconnection-as-json ``` Replace virtualconnection-as-json in this example with the virtual connection schema you downloaded using the [Download Virtual Connection as JSON](#download_virtual_connection_as_json) method. #### Response Code 201 #### Response Body The response is the same whether you publish a JSON representation or a `.tvcx` file. ``` ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "id": "virtualconnection-id", "name": "virtualconnection-name" } } ``` #### Errors
HTTP status error Code Condition Details
400 400000 Bad request

When you publish a .tvcx file, the request is not valid for one of these reasons:

  • The request does not include request_payload or the virtualConnection element.
  • The virtualConnection element does not include a name.
  • The request includes both the .tvcx file and uploadSessionId, or it includes neither. Include only one.
  • The file for the uploadSessionId is no longer available.
  • The .tvcx file is not valid.
  • The virtual connection could not be published with the extract in the .tvcx file.
400 400201 Publish virtual connection error The virtual connection could not be published. This includes content that is not valid virtual connection JSON, or a .tvcx file or its contents that could not be read.
403 403008 Insufficient site storage The content would exceed the site's storage quota. Applies when publishing a .tvcx file.
403 403175 Publish virtual connection forbidden The user does not have permission to publish the virtual connection.
404 404015 File upload not found The uploadSessionId does not match an upload owned by the user. Applies when publishing a .tvcx file.
404 404049 Virtual connection not found The virtual connection could not be found while publishing it with the extract in the .tvcx file.
405 405000 Invalid request method Request type was not POST.
409 409123 Virtual connection exists A virtual connection with the same name already exists in the project and overwrite is false. Applies when publishing a .tvcx file.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Virtual Connection Permissions Returns a list of permissions for a specific virtual connection. #### URI GET /api/api-version/sites/site-id/virtualconnections/virtualconnection-id/permissions #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the virtual connection.
virtualconnection-idThe ID of the virtual connection to get permissions for.
#### Request Body None #### Permissions You must be an administrator or have the Read (View) permission for the virtual connection (either explicitly or implicitly). #### Required scope for JWT authorization _Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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), or [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help or [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. ``` tableau:permissions:read ``` #### Response Code 200 #### Response Body ``` ``` **Note**: The parent element is included in the response only if the workbook's permissions are determined by project-level default permissions and project permissions are locked. Project permissions can be locked for a new project when you call [Create Project](#create_project) or for an existing project by calling [Update Project](#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm). #### Version Version 3.23 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Virtual Connection not foundThe virtual connection ID in the URI doesn't correspond to an existing virtual connection.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl --location 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/permissions' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3'` ## Update Virtual Connection Updates a virtual connection's name, owner, project, or certification status. **Version:** Available in API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** You must have the Overwrite permission for the virtual connection and your site role must be at least Creator.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtual\_connections:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-id/virtualconnections/virtualconnection-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection.
#### Request Body _(Use the icon in the top right corner to copy the text.)_ ``` ``` _(Use the icon in the top right corner to copy the text.)_ ``` { "virtualConnection": { "name": "virtualconnection-name", "isCertified": "certified-flag", "certificationNote": "certification-message", "project": { "id": "project-id" }, "owner": { "id": "owner-id" } } } ``` #### Request Attributes
virtualconnection-name The name of the virtual connection.
certification-flag Boolean. If true, the virtual connection is certified. If false, it won't.
certification-message The certification label's message.
project-id The LUID of the project the virtual connection is located in.
owner-id

The LUID of the user that owns the virtual connection.

Request attributes that are different from the virtual connection's current properties result in updating the virtual connection. #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl --request PUT 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data @data.xml ``` **Contents of data.xml.** _(Use the icon in the top right corner to copy the text.)_ ``` ``` #### Response Code 200 #### Response Body ``` ``` ``` { "virtualConnection": { "project": { "id": "project-id" }, "owner": { "id": "owner-id" }, "id": "virtualconnection-id", "isCertified": certified-flag, "name": "virtualconnection-id" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400203Generic errorAn unknown error occurred.
403403004User not authorized to change virtual connectionCheck to make sure the user has the required permissions.
403403176User not authorized to change virtual connection's ownerCheck to make sure the user has the required permissions.
403403177User not authorized to move assets into the target project.Check to make sure the user has the required permissions.
403403178User not authorized to move the virtual connectionCheck to make sure the user has the required permissions.
404404049Virtual connection not foundCheck the virtual connection LUID.
409409124A virtual connection with the chosen name already exists in the project.Try a different virtual connection name.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Virtual Connection Database Connections Updates the server address, port, username, or password for the specified database connection in a virtual connection. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** Requires [Tableau Data Management](https://help.tableau.com/current/online/en-us/dm_overview.htm). **Permissions:** Users who are administrators or have the site role of Creator or higher can update a database connection.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:virtualconnectionconnections:update - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-id/virtualconnections/virtual-connection-id/connections/connection-id/modify #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site that contains the virtual connection.
virtual-connection-idThe LUID for the virtual connection that includes the database connections.
connection-idThe ID of the database connection. To determine what connections are in a virtual connection, call List Virtual Connection Database Connections.
#### Request Body ```   ``` ``` {  "connection": {    "serverAddress": "server-address",    "serverPort": "port-number",    "userName": "test",    "password": "password"  }} ``` #### Request Attributes
connection serverAddressThe new server for the database connection.
connection serverPortThe new port for the database connection
connection userNameThe new username for the database connection.
connection passwordThe new password for the database connection.
#### cURL Request Example `curl --location --request PUT "https://MY_SERVER/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/virtualconnections/26bc30d8-90d6-4af1-922d-ac285e7b08fb/connections/26bc30d8-90d6-4af1-922d-ac285e7b08fb"` #### Response Code 200 #### Response Body Copy ```          ``` Copy ``` {  "virtualConnectionConnections": {    "connection": {      "id": "connection-id",      "serverAddress": "server-address",      "serverPort": "port-number",      "userName": "connection-user-name",      "password": "password"    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002UnauthorizedThe authentication token provided in the request header was invalid or has expired.
403403004Operation unauthorizedThe user isn’t authorized to perform the task.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Virtual Connection Now Runs an extract refresh on the specified virtual connection. This method identifies and refreshes only the tables in the virtual connection that are configured as extracts; live tables are ignored. No additional input is required from the caller. **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). **Version**: Available in API 3.30 and later. **License**: Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle. **Permissions**: Users who are not server administrators or site administrators can only refresh extracts for virtual connections if they own the virtual connection, or if they are the project leader for the project. **Access Scope**: `tableau:tasks:run` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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-id/virtualconnections/virtualconnection-id/refresh #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
virtualconnection-idThe LUID for the virtual connection to refresh.
#### Request Body The request body is an empty tsRequest element. ``` ``` ``` {} ``` #### cURL Request Example _(Use the icon in the top right corner to copy the text.)_ ``` curl --request POST 'http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/virtualconnections/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/refresh' --header 'Content-Type: application/xml' --header 'X-Tableau-Auth: HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3' --data '' ``` #### Response Code 202 #### Response Body ``` ``` ``` { "job": { "id": "job-id", "mode": "Asynchronous", "type": "RefreshExtract", "createdAt": "date-time", "extractRefreshJob": { "virtualConnection": { "id": "virtualconnection-id", "name": "virtualconnection-name" } } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400403180Full refresh not allowed.A full refresh extract operation is not allowed for the virtual connection.
400403181Incremental refresh not allowed.The request specified an incremental refresh, but an incremental refresh extract operation is not allowed for the virtual connection.
400409090No extract-eligible tables.The virtual connection has no active revision or no extract-eligible tables. Live tables are not refreshed.
403403199User not authorized to refresh the virtual connection.The user must have either the Manage Extract or the Allow Extract Refresh permission on the virtual connection.
403409082Run Now is disabled for the site.Enable Run Now for the site, then try the request again.
404404049Virtual connection not found.Check the virtual connection LUID.
405405000Method not allowed.Direct virtual connection extract refresh is not enabled for this site.
409409093Operation already in queue.An extract refresh job for the virtual connection is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). [Skip to main content](#main-content) # What's New in the REST API This topic summarizes changes made to the REST API for Tableau Server and Tableau Cloud. All versions include updated documentation. ## REST API 3.30 (Tableau Cloud October 2026 / Tableau Server 2026.3) - Tableau now supports managing Bridge routing rules via the REST API. A routing rule routes a domain's Bridge queries to a specific pool (optionally scoped to projects) or blocks a domain from being routed. New endpoints let you create, get, update, and delete routing rules, and add or remove project scoping on an allow rule. For information, see [Bridge Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_bridge.htm). - Tableau now supports editing published data sources via the REST API. Create a work copy of a published data source, read, add, update, or delete its columns, field descriptions, and table descriptions, and then publish the work copy as a data source. You can also read these elements directly from a published data source. These methods complement [VizQL Data Service](https://help.tableau.com/current/api/vizql-data-service/en-us/index.html): VizQL Data Service queries data sources, and these methods author them. Requires Data Management or Tableau+. For information, see [Data Sources Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#create_work_copy). ## REST API - New Feature (Tableau Cloud September 2026) - Knowledge Graph methods: New methods let you explore the Tableau Knowledge Graph programmatically. Search nodes, trace lineage and downstream impact, and attach semantic context to your content. For information, see [Tableau Knowledge Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm). ## REST API 3.29 (Tableau Cloud June 2026 / Tableau Server 2026.2) - Tableau MCP now supports per-site configuration via the REST API, allowing administrators to customize settings at the site level. When a Tableau MCP user authenticates to a site, that site's specific MCP configuration is applied for tailored access control and functionality. For information, see [Tableau MCP Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_tableau_mcp.htm). - Tableau now supports interacting with the Recycle Bin via the REST API. New endpoints allow users to get or list content, restore content, and permanently delete some or all content. For information, see [Recycle Bin Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_recycle_bin.htm). - Tableau now supports interacting with Bridge via the REST API. Using the Bridge methods of the Tableau REST API you can: - Bridge clients: List Bridge clients for a site or get details for a specific Bridge client; delete a Bridge client; move a Bridge client between pools or to unassigned status. - Bridge pools: List, create, update, and delete Bridge pools. [Bridge pools](https://help.tableau.com/current/online/en-us/to_enable_bridge_live_connections.htm) are logical groupings of Bridge clients for load distribution and management. - Bridge domains: Add domains to pools, block domains, update domain names or pool assignment, get domain mapping, and delete domain mappings. For information, see [Bridge Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_bridge.htm). - On-demand access update: Beginning in July 2026, on-demand access is supported for Tableau Cloud sites licensed with the [capacity-based model](https://help.tableau.com/current/online/en-us/license_product_keys.htm#capacity) (Cloud+ or Tableau+ edition) in addition to the usage-based model. Enable on-demand access with the `externalUserEnabled` attribute using the [Create Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_group) and [Update Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_group) methods. - [Data Acceleration (Retired)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_acceleration.htm)\-related methods and attributes were retired. ## REST API 3.28 (Tableau Cloud February 2026) - Starting in March 2026, you can set the default language and locale for users using the [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods. - Collections Methods: New REST API endpoints let you programmatically create, retrieve, update, and delete Tableau collections. You can list collections accessible to the signed-in user, manage collection items across projects, update properties in batch, and transfer ownership between users. The endpoints support filtering by resource type, owner, visibility (public/private), timestamps, and favorites, as well as sorting by various fields including custom item position. Users accessing shared collections will only see items they have permissions to view. See [Collections Methods](https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#tag/Collections-Methods). - Permissions methods for collections: To complement the new collections methods, now you can also add, list, and delete permissions on collections. See [Collections Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_collections.htm). - New security options for trusted extensions: The [List Tableau Extension Site Settings](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm#list_tableau_extensions_site_settings) and [Update Tableau Extension Site Settings](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm#update_tableau_extensions_site_settings) methods now include the `allowTrusted` attribute and three new sub-options: `includeSandboxed`, `includeTableauBuilt`, and `includePartnerBuilt`. These settings allow you to automatically permit specific categories of trusted extensions to run without requiring individual entries on the safe list. - Delegate extract refreshes: The [Add Data Source Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_data_source_permissions) and [Add Workbook Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_workbook_permissions) methods now support the `ExtractRefresh` capability. This allows admins and owners to grant other users the ability to [manually trigger refreshes](https://help.tableau.com/current/online/en-us/permissions.htm#allow-other-users-to-refresh-extracts), ensuring teams can maintain data freshness even when the asset owner is unavailable. - Incremental refresh support for on-demand updates: You can now specify an incremental refresh when using the [Update Data Source Now](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_now) and [Update Workbook Now](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_now) methods by adding `incremental="true"` to the `extractRefresh` element in the request body. - Access scopes are now supported across additional Tableau REST OpenAPI methods, including [Analytics Extensions Settings](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm) and [Custom Domains](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_custom_domain.htm). - SCIM configurations now support OIDC and Google authentication in Tableau Cloud. To configure SCIM, see [Create SCIM Configuration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_scim_configuration). - Increased file upload reliability: The updated [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload) method now supports a sequenceID parameter in the URI querystring. Using the sequenceID parameter ensures files are assembled in order, and therefore helps prevent corruption of the uploaded file. - Starting April 2026, flow updates: - Use the new [Update Flow Connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow_connections) to update the server address, port, username, or password and more for one or more flow connections. - Specify `authenticationType` in [Update Flow Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow_connection) and [Update Flow Connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow_connections) to update the authentication type for flow connections. ## REST API 3.27 (Tableau Cloud December 2025 / Tableau Server 2025.3) - Starting in December 2025: - For Tableau Cloud, you can authorize access to the Tableau REST API using unified access token (UAT) JWTs. For more information, see [Sign in with unified access tokens JWT](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm#uat). - For Tableau Cloud, as part of the UAT JWT support, new and existing scopes can be used in UAT JWTs to define access to Tableau REST API methods. - For Tableau Cloud, additional scopes were added to support Tableau connected apps JWTs. For more information, see [Sign in with connected apps JWT](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm#connected_apps). - For Tableau Server, a subset of additional scopes were added to support Tableau connected apps. - Also starting in December 2025 in Tableau Cloud, when using connected apps with direct trust for embedding workflows, you can use the [Signing In and Signing Out (Authentication)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm#sign_out) method to end a user's Tableau session when they sign out of your application. This ensures embedded visualizations are no longer accessible after the user signs out. - Bulk activate or suspend schedules: The new [Batch Update Schedule State](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#batch_update_schedule_state) method for Tableau Server activates or suspends a set of schedules, even all of them at once, making preparations for processes like system maintenance easier. - Delete views from workbooks: The new [Delete View](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_view) method deletes a view from a workbook. This method is useful for simply removing views, but it can also be used alongside other methods to delete hidden views when republishing or migrating to a different environment. - Change the owner of a flow: The new **Set Flow Owner** method changes the owner of a flow. - Refresh all thumbnail images for a workbook: The new [Refresh Workbook Thumbnail Images](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook) method generates thumbnails for each view in a workbook. Use this new method during migration to Tableau Cloud, or other times you need to refresh the thumbnail images. - Update authentication type on connections. The [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) and [Update Workbook Connection](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection) methods now allow you to change authentication type. - Update specific connections in data sources and workbooks containing multiple connections. The [Update Data Source Connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connections) and [Update Workbook Connections](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connections) methods allow you to update individual connections. - Use the `attributeCaptureEnabled` attribute in the [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#update_site) method to enable user attribute functions in Tableau Cloud OIDC and SAML SSO workflows. ## REST API 3.26 (Tableau Cloud June 2025) - New for Pulse: Starting in September 2025: - [Generate insight brief](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#EmbeddingsService_GenerateInsightBrief) enables you to provide a synopsis in answer to a user's question by gathering relevant insights for the specified metrics. - [Generate breakdown insight bundle](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleBreakdown) lets you generate a breakdown insight bundle, showing the breakdown of the metric by the specified dimensions. - [Generate exploration insight bundle](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleExploration) enables you to generate an insight bundle with suggested follow up questions. - The [Download Workbook PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_workbook_pdf) method now enables you to set the width and height of the download. - Starting in July 2025, Tableau Cloud supports specifying an email address for a user that is different from their username. The email address can be used for receiving notifications only. If the `email` attribute is not specified, Tableau Cloud will continue to use the `username` value to send notifications to. For more information, see the [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods. - Beginning in August 2025, you can configure multiple SCIM configurations for a site. For more information, see [Create SCIM Configuration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_scim_configuration), [Create SCIM Token](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_scim_token), [Get SCIM Configuration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#get_scim_configuration), [Update SCIM Configuration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_scim_configuration), [List SCIM Configurations](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#list_scim_configurations), [Delete SCIM Configuration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_scim_configuration), and [Delete SCIM Token](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_scim_token) methods. ## REST API 3.25 (Tableau Cloud February 2025 / Tableau Server 2025.1) - New for Pulse: Starting in March 2025: - New Pulse Methods - [Create metric tag](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_CreateTag) and [Delete metric tag](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_DeleteTag) methods enable users to add or remove custom user-defined tags to a metric, or a system-defined `mute-from-summary` tag that prevents the metric from appearing in insight summaries. Both user-defined and system-defined tags are listed in responses that show metric details. - [List metric definition measurement periods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GetMeasurementPeriods) lets you see the measurement periods configured for a metric definition. - [List site alerts](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#AlertService_ListAlerts) lets you see the alerts that are configured for a site. Currently only the unfavorable trend alert type is supported. - New Pulse Elements - Metric definition methods now support related links. You can specify up to 5 links in the [Create metric definition](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_CreateDefinition) and [Update metric definition](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_UpdateDefinition) methods, and view link details wherever metric definitions are present in a response. - User permissions to create Pulse metrics from a data source can now be viewed and managed with the `PulseMetricDefine` capability in the [Add data source permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_data_source_permissions) and [List data source permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#query_data_source_permissions) methods. - Metric definition extension options now include `custom_calendar` that lets you configure the calendar of metrics in the definition using data in your data source. - Use the `attributeCaptureEnabled` attribute in the [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#update_site) method to enable user attributes for Tableau Server embedding workflows. - The [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job) and [Query Jobs](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_jobs) methods now support the `tableau:jobs:read` scope if users authenticate with a JWT. - Added methods for downloading and uploading encrypted flows. For more information, see [Download Flow Encrypted Keychain](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#download_flow_encrypted_keychain) and [Upload Flow Encrypted Keychain](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#upload_flow_encrypted_keychain) methods. ## REST API 3.24 (Tableau Cloud October 2024) - New for Pulse: Starting in December 2024: - New Pulse insight type - `INSIGHT_TYPE_RECORD_LEVEL_OUTLIERS` shows values that fell outside of the range of most of the rest of the values for a metric. - New Pulse Methods - [Generate basic insight bundle](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleBasic) enables you to create a Basic insight bundle. Basic insights are similar to a springboard insight, but data is focused on the dimensions of a metric that are low bandwidth because they have small value sets. - [List Pulse user preferences](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_GetUserPreferences) lets you view the signed in user's preferences, optionally sorted and grouped. - [Update Pulse user preferences](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_UpdateUserPreferences) lets you modify the signed in user's preferences. - [Batch list metric definitions (many)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_BatchGetDefinitionsByPost) lets you specify large batches of definitions to view. - New Pulse Enumerations - [List followed metrics groups](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_ListFollowedMetricsGroups) With the new group by value `GROUP_BY_TIME_RANGE`, you can group returns by time period. - With the new metric specification comparison type `TIME_COMPARISON_FISCAL_YEAR_AGO_PERIOD`, you can configure comparisons based on fiscal year. - With the new definition insight option type `INSIGHT_TYPE_UNUSUAL_CHANGE` you can now configure your insight to highlight unusual changes in your data. - A new definition basic specification measure value `AGGREGATION_USER` lets you aggregate insight data by user. - Two new measurement period granularity values `GRANULARITY_BY_FISCAL_YEAR` and `GRANULARITY_BY_FISCAL_QUARTER` now let you define the measurement period of of a metric specification by fiscal year or fiscal quarter. - Two new measurement period granularity values `GRANULARITY_BY_FISCAL_YEAR` and `GRANULARITY_BY_FISCAL_QUARTER` now let you define the measurement period of of a metric specification by fiscal year or fiscal quarter. - New Pulse Parameters - [List metrics in definition](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_ListMetrics) With newly added parameters you can: specify the type of metric to return; sort results by metric name ascending or descending; and choose to exclude metrics without followers. - For requests and responses about definitions: - `datasource_goals` define a metric with a target that is calculated from values in the definition's data source. This is as opposed to a metric goal whose value is defined directly in the request. - Returned for requests about insights: - `InsightFeedbackMetadata`, giving you programmatic access to user thumbs up/down feedback on insights. - `generation_id`, the LUID of the insight. - `table` the columns and rows of the data table produced by filtering your datasource as defined in your metric specification. - Returned for insight bundles options: - `language` and `locale`, let you define the language characteristics of your insights. - `score_weights` let you refine the weighting of data in your insights. - Deprecated in Pulse methods - In API 3.24 (Tableau Cloud December 2025) and later, [Batch list metric definitions (few)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_BatchGetDefinitions) method is deprecated and may be retired in future releases. Instead use the [Batch list metric definitions(many)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_BatchGetDefinitionsByPost) method. That method has the same behavior but supports listing larger batches of definitions. - New REST API method for downloading a PDF image of a custom view using the [Get Custom Views PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_custom_view_pdf) method. - New REST API method for downloading the data of a custom view in CSV format using the [Get Custom Views Data](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_custom_view_data) method. - Added in this REST API version: When using the [Download Workbook PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_workbook_pdf) method, you can now filter the downloaded view. For more information, see [View filter queries](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). - Added in this REST API version: When using the [Query View Image](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_view_image) method, you can now set the height and width of the downloaded viz. - New REST API methods for downloading and uploading workbook encrypted keychains. For more information, see [Workbooks and Views Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm). - New REST API methods for downloading and uploading user credentials. For more information, see [Users and Groups Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm). - Starting in January 2025, Tableau Cloud supports the configuration of multiple authentication types for a site. This capability introduces the following changes: - Use the [List Authentication Configurations for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site) method to query the authentication configurations on the site and get the `idpConfigurationId` value for each authentication configuration. - You will now use the `idpConfigurationId` attribute to assign authentication to a user. You can continue to use the `authSetting` attribute when assigning authentication to configurations that Tableau has added the "Initial" prefix to. For more information, see [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) or [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods. - For the [Create OpenID Connect Configuration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_openid_connect.htm#create_openid_connect_configuration) method, include `idpConfigurationName`; for the [Update OpenID Connect Configuration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_openid_connect.htm#update_openid_connect_configuration) method, include the `idpConfigurationId`; for [Remove OpenID Connect Configuration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_openid_connect.htm#remove_openid_connect_configuration) method, include the `idpConfigurationId` in the URI. ## REST API 3.23 (Tableau Cloud June 2024 / Tableau Server 2024.2) - Pulse method additions to API 3.23 in Tableau Cloud July 2024 - New Method: [Get site entitlements](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_GetEntitlements) lets any user to see the advanced features enabled for sites they have access to. - [Batch list metric definitions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_BatchGetMetrics) now has support for grouping and sorting returned metrics. - Enabling and disabling query tagging for individual connections using the `queryTaggingEnabled` attribute of the [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook_connection) and [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection) will no longer be supported and may be retired in future releases. For more information, see [Query Tagging](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_query_tagging.htm). - Tableau Server supports registering one or more EASs at the site level for Tableau connected apps using OAuth 2.0 trust. For more information, see [Connected App Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm). - Tableau Server supports specifying multiple projects to enable embedding of content for Tableau connected apps using direct trust. For more information, see [Create Connected App](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#create_connectedapp) and [Update Connected App](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#update_connectedapp) methods. - New REST API methods to help with migrating Virtual connections from Tableau site to Tableau site, including Tableau Server to Tableau Cloud. Includes methods to download, publish, delete, tag, and change permissions. For more information, see [Virtual Connections Methods.](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm) - New REST API methods for replacing permissions and default permissions. For more information, see [Permissions Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_permissions.htm). - The labels methods support scopes if users authenticate with a JWT. This gives the administrator more authorization granularity for these methods. For more information, see the labels methods at [Metadata Methods.](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm) - Starting in July, Tableau Cloud supports a new REST API method for generating workbook, data source, and table descriptions. For more information, see the [Get Metadata Suggestion](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_metadata_suggestion) method. ## REST API 3.22 (Tableau Cloud February 2024) - Add Flow Task to Schedule renamed to Add Flow Task to Server Schedule and retired for Tableau Cloud in API 3.22 in March 2024: > > [!WARNING] > > > > The Add Flow Task to Schedule method is renamed and retired for Tableau Cloud in API 3.22 March 2024. It will remain available for Tableau Server only. This method will be replaced with Create Flow Task with Custom Schedule method. - As a Tableau Cloud site admin, you can configure OpenID Connect (OIDC) to authenticate your users. For more information, see [OpenID Connect Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_openid_connect.htm). - As a Tableau Cloud site admin, you can configure your Tableau connected app (direct trust) to enable content in multiple projects to be embedded. For more information, see [Create Connected App](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#create_connectedapp) and [Update Connected App](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#update_connectedapp) methods. - As a Tableau Cloud site admin, you can configure your Tableau connected apps (OAuth 2.0 trust) to use different external authorization servers (EASs). For more information, see [Register EAS](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#create_connectedapp_eas) and [Update EAS](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#update_connectedapp_eas) methods. - Added support to filter groups by `luid`and `id` for better performance. For more information, see [Query Groups](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groups). - View acceleration and data freshness policy for view acceleration and query caching can now be enabled and managed for a workbook through the [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook) method. You can now get the status of these configurations for each workbook and its views through the [Get Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_workbook) method. - There is no longer a limit on the number of data labels per category on an asset, and a label message is no longer required for any category of label. Furthermore, the length limit for label value names and category names is increased from 24 to 128 characters. For more information, see [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). - Query tagging changes: In Tableau Server 2023.3 and later, the TSM `configuration set [native_api.UserInfoInGeneratedSQLEnabled](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#nativeapiUserInfoInGeneratedSQLEnabled)` key is available to enable or disable query tagging for all content on the server. - Starting in July 2024 in Tableau Cloud, include the name of the authentication configuration when assigning authentication to a user. ## REST API 3.21 (Tableau Cloud October 2023/ Tableau Server 2023.3) - [Pulse methods for managing metric definitions, metrics, insights and subscriptions](https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#tag/Pulse-Methods) are available for Tableau Cloud sites. - Ask Data Lens and Metrics Methods: retired in API 3.22 (Tableau Cloud February 2024 / Server 2024.2) **Retired in API 3.22 (Cloud February 2024 / Server 2024.2)** Tableau's legacy metrics feature was retired in Tableau Cloud in February 2024 and in Tableau Server version 2024.2. In October 2023, Tableau retired the ability to embed legacy metrics in Tableau Cloud and in Tableau Server version 2023.3. With Tableau Pulse, we've developed an improved experience to track metrics and ask questions of your data. For more information, see [Create Metrics with Tableau Pulse](https://help.tableau.com/current/online/en-us/pulse_create_metrics.htm) to learn about the new experience and [Create and Troubleshoot Metrics (Retired)](https://help.tableau.com/current/online/en-us/metrics_create.htm) for the retired feature. - [Tableau Extensions Settings Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) have been added to for allowing and disallowing extensions on Tableau Cloud and Server. They replace the now retired Dashboard Extensions Settings Methods. - Dashboard Extensions Settings Methods: retired in API 3.21 (Tableau Cloud October 2024 / Server 2023.3) > > [!WARNING] > > > > In October 2023 Tableau Cloud and Tableau Server version 2023.3 releases, Tableau's REST API methods for dashboard extensions settings are retired. We recommend you replace dashboard extensions methods for enabling, listing, getting details of, and updating dashboard extensions with [Tableau extensions settings methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm) that have similar functionality. - New [List Users with Custom View as Default](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#list_users_with_custom_view_as_default) and [Set Custom View as Default for Users](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#set_custom_view_as_default_for_users) methods enable you to use the REST API to manage default custom view settings for users. - As part of the personal access tokens (PATs) enhancements, [list personal access tokens](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#list_personal_tokens) and [revoke personal access token](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm) methods are available for Tableau Cloud site admins and users. - The [Update Embedding Settings for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#embedding_settings_for_site) method enables Tableau Server users (previously Tableau Cloud users only) to control where Tableau content can be embedded when an external application uses a Tableau connected app with OAuth 2.0 trust for authentication. - Enable on-demand access using the [Create Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_group) and [Update Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_group) methods to allow users who are not provisioned on a Tableau Cloud site licensed with Embedded Analytics usage-based model to interact with embedded Tableau content. - [Create Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_projects.htm#create_project) and [Update Project methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_projects.htm#update_project) now enable you to specify a project's owner. - The labelCategories methods allow an administrator to create, update, or delete data label categories, giving their users more control over the classification of assets. For more information, see [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) and the labelCategories methods in [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). - You can bulk add and bulk remove users from a group. For more information, see [Add User to Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_group) and [Remove User from Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#remove_user_to_group). - For Tableau Server (previously Tableau Cloud only), both the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_in) and [Sign Out](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_out) methods are supported by JWT authorization but do not require scopes to use. ## REST API 3.20 (Tableau Cloud June 2023) - The new [Create Data Driven Alert](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#create_data_driven_alert) method enables you to create and configure a data driven alert programmatically for Tableau Cloud sites. - New methods for Tableau Cloud extract refresh and subscriptions tasks offer more customizable frequency configuration. See: - [Create Cloud Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task) - [Update Cloud extract refresh task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#update_cloud_extract_refresh_task) - [Get Extract Refresh Task (Tableau Cloud Request)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#tableau-cloud-request) - [List Extract Refresh Task (Tableau Cloud Request)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#tableau-cloud-request1) - [Create Subscription (Tableau Cloud Request)](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#tableau-cloud-request) - [Get Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#tableau-cloud-request1) (Tableau Cloud Request) - [Update Subscriptions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#tableau-cloud-request3) (Tableau Cloud Request) - The [Update Embedding Settings for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#embedding_settings_for_site) method now enables users to control where Tableau content can be embedded when an external application uses a Tableau connected app with OAuth 2.0 trust for authentication. - The labelValues methods allow an administrator to customize existing label values or create entirely new ones, giving their users more control over the classification of assets. For more information, see [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) and the labelValues methods in [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). - Both the [Sign In](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_in) and [Sign Out](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_out) methods are supported by JWT authorization but do not require scopes to use. - The [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#publish_workbook) and [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook) methods support adding a description to the workbook. ## REST API 3.19 (Tableau Cloud March 2023/ Tableau Server 2023.1) - As a Tableau Server administrator, you can use the [Identity Pools Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm) to provision and authenticate Tableau Server users. - As a Tableau Cloud site administrator, you can enable the user attributes site setting for embedding workflows using the [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#update_site) method. - Methods for working with virtual connections—previously available only for Tableau Cloud—are now available for Tableau Server. Use the [List Virtual Connections method](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#ref_list_virtual_connections) to get a list of virtual connections and details for each, the [List Virtual Connection Database Connections method](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#ref_list_virtual_connection_database_connections) to retrieve database connection information, and the [Update Virtual Connection Database Connections method](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_virtual_connection_database_connections) to update database connection information. - Using the new content exploration method [Get content suggestions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_content_exploration.htm#-content-exploration-service_get-suggestions) you can now get suggestions for relevant content returned to display completion options as a user types. - [Ask data lens](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_ask_data_lens.htm) methods now support [JWT access scopes](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) so that permissions to use them can be granted to connected apps. ## REST API 3.18 (Tableau Cloud December 2022) - New methods are available for working with virtual connections. Use the [List Virtual Connections method](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#ref_list_virtual_connections) to get a list of virtual connections and details for each, the [List Virtual Connection Database Connections method](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#ref_list_virtual_connection_database_connections) to retrieve database connection information, and the [Update Virtual Connection Database Connections method](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_virtual_connection_database_connections) to update database connection information. - You can use the new [Get usage statistics](https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#operation/UsageStatsService_GetUsageStats) and [Get batch usage stats](https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#operation/UsageStatsService_GetUsageStatsBatch) content exploration methods to discover how users are accessing your content. - [Mobile Settings Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_mobile_settings.htm) enable you to view and control the Tableau mobile client security settings of mobile apps that access your site. - Custom view methods now allow you to [get a list of custom views on a site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#list_custom_views), [get the details of a custom view](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_custom_view), [download an image of it](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_custom_view_image), [delete it](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_custom_view), or [update its name or owner](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_custom_views). - Tableau Server administrators can [delete a site asynchronously](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#async) to track deletion progress. ## REST API 3.17 (Tableau Cloud October 2022 / Tableau Server 2022.3) - As a Tableau Cloud site admin, you can register an external authorization server (EAS) to a site to establish a trust relationship between the EAS and your site using the OAuth 2.0 standard protocol. This trust relationship enables you to provide your users with a single sign-on (SSO) experience to Tableau content embedded in your custom applications or for REST API authorization. For more information, see [Connected app methods using OAuth 2.0 trust](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#eas). - As a Tableau Server admin, you can programatically authorize access to the Tableau REST API on users' behalf using JSON web tokens (JWTs) and Tableau connected apps. For more information, see [Access Scopes for Connected Apps](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm) in the Tableau Server Help. - Methods to manage data labels—originally released for Tableau Cloud only—are now available for Tableau Server. Label methods offer a new, unified interface for manipulating certification and data quality warnings through the REST API. For more information, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic and the label methods in [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). - The ability to move databases and tables—originally released for Tableau Cloud only—is now available for Tableau Server. You can move databases and tables to projects, enabling you to control permissions through them. For more information, see the [Move Database](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#move_database) and [Move Table](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#move_table) methods in the Tableau REST API Reference. - Now you can set data quality warnings on columns. Relevant methods for data quality warnings and data labels were updated to include support for columns. - You can now get the details of a workbook using the [Get Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook) method with the content URL of the workbook (the part that appears after `…/authoring/…` or `…/views/…` in the URL path of the workbook in your browser address bar). ## REST API 3.16 (Tableau Cloud June 2022) - As a Tableau Cloud site admin, you can programatically authorize access to the Tableau REST API on users' behalf using JSON web tokens (JWTs) and Tableau connected apps. For more information, see [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help. - Label methods offer a new, unified interface for manipulating certification and data quality warnings through the REST API. For more information, see the [Data Labels in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic and the label methods in [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). - You can move databases and tables to projects, enabling you to control permissions through them. For more information, see the [Move Database](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#move_database) and [Move Table](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#move_table) methods in the Tableau REST API Reference. - As a Tableau Cloud site admin, you can restrict embedding of Tableau views to only certain domains of your choice. For more information see the embedding setting methods in [Site Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm) ## REST API 3.15 for Tableau Server 2022.1 and Tableau Cloud - As a Tableau Server admin or Tableau Cloud site admin, you can list and change user notification preferences for your site. For more information, see [Notifications Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_notifications.htm). - The Data-Driven Alerts methods and the Webhooks methods were moved to the [Notifications Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_notifications.htm) page. - REST API methods are now available that enable multiple users to be imported to or deleted from a site from a .csv list of users. The .csv data can also include site role and authorization settings that will be assigned for each user upon import. For more information, see [Import Users to Site from CSV](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#import_users_to_site_from_csv) and [Delete Users from Site with CSV](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_users_from_site_with_csv). - New methods related are now available to run and get information on linked tasks. Linked tasks are used to schedule flows to run one after the other. For more information, see [Flow Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm). - New attributes to support flow parameters have been added to various flow methods including methods that are used to run flows. You can use REST API to override flow parameter values at run time. For more information, see [Flow Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm). - Methods related to certification and data quality warnings have been expanded to include support for virtual connections and virtual connection tables. For more information, see [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). ## REST API 3.14 for Tableau Server 2021.4 and Tableau Cloud - As a Tableau Server admin or Tableau Cloud site admin, you can create, query, update, and delete Tableau connected apps configured for your site. For more information, see [Connected App Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm). - The [publish data source](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#publish_data_source) method now supports multi table data created using the Hyper API, as long as there is a single fact table containing the foreign key for each of the other tables in the extract. ## REST API 3.13 for Tableau Server 2021.3 and Tableau Cloud - Add, update, query, and delete data quality certifications for databases, tables, and data sources using the following methods: [Add (or Update) Data Quality Certifications](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_dqw_certification), [Query Data Quality Certification by ID](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_dqw_certification), [Query Data Quality Certifications by Content](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_dqw_certifications), [Delete Data Quality Certification by ID](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_dqw_certification), and [Delete Data Quality Certifications by Content](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_dqw_certifications). - Query databases and tables from the connection information in the data source or workbook file's XML using [Get Databases and Tables from the Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_xml_databasestables). - Enable data quality warnings (DQWs) in subscription emails for your site using the [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site) or [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_site) method. - If needed, you can disable Explain Data per site using the [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site) or [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site) method. - Manage default permissions for lenses and data roles with the [Add Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_default_permissions), [Query Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_default_permissions), [Delete Default Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_default_permission) methods. - Understand Workbook Impact on Your Database Using [Query Tagging](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_query_tagging.htm). ## REST API 3.12 for Tableau Server 2021.2 and Tableau Cloud - You can modify (insert, update, upsert, replace, and delete) data in a published data source that is a live-to-Hyper connection. Use [Update Data in Hyper Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_in_hyper_data_source) or [Update Data in Hyper Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_in_hyper_connection). For more information, see [Update data in published live-to-Hyper data sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm). - With the appropriate permissions, you can batch add (or update), and delete multiple data quality warning (DQW) items to and from different content and external assets using the following methods: [Batch Add Data Quality Warnings](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#batch_add_dqws) and [Batch Delete Data Quality Warnings](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#batch_delete_dqws). - Server and Site administrators can now directly find the Tableau resource responsible for a problematic data source query when they enable [query tagging](https://help.tableau.com/current/pro/desktop/en-us/performance_tips.htm) through [update workbook connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook_connection) and [update data source connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection). They can view enablement status through [query workbook connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook_connections) and [query data source connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_source_connections). ## REST API 3.11 for Tableau Server 2021.1 and Tableau Cloud - Add quality warning triggers to extract data sources and flows. Quality warning triggers, applied to extract data sources and flows, monitor for and display alerts, along side other DQWs, when refreshes or flow runs fail. For more information, see the following methods: [Add Quality Warning Triggers](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_dqw_trigger), [Update Quality Warning Trigger](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_dqw_trigger), [Query Quality Warning Trigger](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_dqw_trigger), [Query Quality Warning Triggers](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_dqw_triggers), [Delete Quality Warning Trigger](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_dqw_trigger), and [Delete Quality Warning Triggers](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_dqw_triggers). - List the Active Directory domains in use on a Tableau Server and update a domain's name and nickname on a server using the [List Server Active Directory Domains](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_server.htm#list_server_active_directory_domains) and [Update Server Active Directory Domain](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_server.htm#update_server_active_directory_domain) methods. - If you have Tableau Server administrator permissions, you can now use a [personal access token](https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm) (PAT), instead of a user name and password to more securely impersonate users on a server. You can also revoke all server administrator PATs using the Revoke Administrator Personal Access Tokens method. [Learn more.](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_authentication.htm) ## REST API 3.10 for Tableau Server 2020.4 and Tableau Cloud - New REST endpoints have been added to [manage metrics on your Tableau site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metrics.htm). You can now [list all metrics for a site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#list_metrics_for_site), [get the details of a specified metric](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#get_metric), [update the properties of a metric](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#update_metric), and [delete a metric](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#delete_metric) through REST requests. - [Analytics Extensions methods](https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#tag/Analytics-Extensions-Settings) are now available for Tableau Cloud. - The `flowsEnabled` attribute for sites is deprecated and is replaced with `editingFlowsEnabled` and `schedulingFlowsEnabled` to provide more granular control over editing and scheduling flows. For more information, see [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site). - You can now get a list of flow runs for a site and details of a specific flow run. You can also cancel a specific flow run. For more information, see [Get Flow Run](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_run), [Get Flow Runs](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_runs), and [Cancel Flow Run](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm#cancel_flow_run). ## REST API 3.9 for Tableau Server 2020.3 and Tableau Cloud - With the appropriate permissions, you can do the following: - Add and delete tags for databases, tables, and columns using the following methods: [Add Tags to Database](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_tags_database), [Add Tags to Table](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_tags_table), [Add Tags to Column](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_tags_column), [Delete Tag from Database](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_tags_database), [Delete Tag from Table](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_tags_table), and [Delete Tag from Column](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_tags_column). - Batch update tags on Tableau content and external assets using the following methods: [Batch Add Tags](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#batch_add_tags) and [Batch Delete Tags.](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#batch_delete_tags) - You can set a data quality warning for sensitive data. For more information, see [Add Data Quality Warning.](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_dqw) ## REST API 3.8 for Tableau Server 2020.2 and Tableau Cloud - You can enable high visibility for a data quality warning using the following methods: [Add Data Quality Warning](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_data_quality_warning) and [Update Data Quality Warning](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_data_quality_warning). - Administrators can now enable data acceleration for specific workbooks. The workbook loads faster because Tableau Server precomputes the workbook's data in a background process. For more information, see [Data Acceleration](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_data_acceleration.htm). - The details of the current server session can now be viewed by calling [Get Current Server Session](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get-current-server-session). The response includes identifiers and configuration information for the current site and user. - You can now call [Download Workbook PowerPoint](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#download_workbook_powerpoint) to download images of views and dashboards in a workbook as slides in a PowerPoint deck (`.pptx` file). - Settings for [Analytics Extensions](#) and [Dashboard Extensions](#) can now be configured using the REST API. These endpoints introduce a new form of RESTful API to the set of Tableau automation tools. To learn more, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). - Organize a user's favorites. For more information, see [Favorites Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#update_favorites). ## REST API 3.7 for Tableau Server 2020.1 and Tableau Cloud - Administrators can now use [Get Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_site) or [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_site) to view the Tiered Capacities (maximum users of a site for each license type or role) configured for a site. For a site that has user-based licensing with no licensing limits set by its administrator, maximums for Creator, Explorer, and Viewer licensed users are determined by the activated licenses for each role on the site. On-premise server administrators can set the Tiered Capacity attributes to lower the user limits on any or all of the license types using [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_site) or [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_site). - You can now [get the groups a site user belongs to](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_groups_for_a_user) with a REST API call. - You can now manage view recommendations using the REST API. Use [Get View Recommendations](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_view_recommendations), to get a current list of recommended views. Use [Hide a View Recommendation](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#hide_view_recommendations), to hide a view from the list of recommended views. Use [Unhide a View Recommendation](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#unhide_view_recommendations), to hide a view from the list of recommended views. ## REST API 3.6 for Tableau Server 2019.4 - With the appropriate permissions, you can query, set, and delete permissions on databases and tables using the following methods: [Add Database Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_database_perms), [Query Database Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_database_perms), [Add Default Database Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_database_perms_default), [Query Default Database Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_database_perms_default), [Delete Database Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_database_perms), [Delete Default Database Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_database_perms_default), [Add Table Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_table_perms), [Query Table Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_table_perms), [Delete Table Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_table_perms). - You can now use a [Personal Access Token](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_auth.htm#make-a-sign-in-request-with-a-personal-access-token) (PAT), instead of plain text username and password, to sign in to Tableau Server or Online with the REST API. Signing in with a PAT returns the same form of credentials token as a password sign in, but PATs are more secure because they are revocable, they can be easily monitored, and they avoid revealing identifying information in scripts and tools. Administrators can make the impact of each process more visible by using separate PATs for each process. PATs allow you to change sign in credentials for a user without affecting their Tableau user credentials. - Using [Tableau Webhooks](https://github.com/tableau/webhooks-docs/tree/master#tableau-webhooks-documentation), you can now build custom applications or workflows that react to events that happen in Tableau. For example, you could use webhooks to send an SMS or Slack notification any time a data source refresh fails. Use the REST API to create and manage your webhooks for a site. This initial release enables 13 workbook, data source and view events to fire notifications to destination URL of your choosing. ## REST API 3.5 for Tableau Server 2019.3 - You can now manage extract encryption at rest. To learn more, see [Extract Encryption Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm). - You can query or update metadata indexed by or surfaced through Tableau Catalog. To learn more, see [Metadata Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_metadata.htm). - With administrator permissions, you can now globally enable or disable attachments for subscriptions to workbooks and views in a site. You can read the enablement status in response bodies for [Query Sites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#query_sites), [Query Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#query_site), [Create Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#create_site), and [Update Sites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_site.htm#update_site) requests. Enablement state can be set during Create Site and Update Site calls. - Users can now determine the file format (`.png` and/or `.pdf`) of the attachments for a subscribed workbook or view. Attachment settings can be viewed in response bodies for [Query Subscriptions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#query_subscriptions), [Query Subscriptions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#query_subscription), [Create Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#create_subscription), and [Update Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#update_subscription) requests. Attachment format can be set using Create Subscription or Update Subscription requests. ## REST API 3.4 for Tableau Server 2019.2 - You can now use the maxAge parameter of the [Query View Image](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_view_image) method to set or get the limit for the age of a cached image of a view in your workbook. When that limit is passed accessing a view image will refresh the cache with a current image. - You can now use the public parameter of the [Get Data-Driven Alert](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data-driven_alerts) method to set or get whether users who do not own an alert can discover and subscribe to it. - You can now use the [Download Workbook PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_workbook_pdf) method to download a PDF containing the views in the a workbook. ## REST API 3.3 for Tableau Server 2019.1 - When you publish a workbook that contains a user filter, you can now specify which user should be used to generate thumbnails by using the generateThumbnailsAsUser attribute. To learn more, see [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook). - You can now manage flows. To learn more, see [Flow Methods](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_flow.htm), [Add Flow to Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_flow_to_favorites), and [Delete Flow from Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_flow_from_favorites). ## REST API 3.2 for Tableau Server 2018.3 - When you call the [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook) method with hidden sheets (also known as views) those sheets are no longer included in the published workbook. - You can now manage permissions for views using the [Add View Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_view_permissions), [Query View Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_permissions), and [Delete View Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_view_permission) methods. - You can now manage data-driven alerts using the [Query Data-Driven Alerts](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data-driven_alerts), [Query Data-Driven Alert Details](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data-driven_alert_details), [Update Data-Driven Alert](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data-driven_alert), [Delete Data-Driven Alert](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_data-driven_alert), [Add User to Data-Driven Alert](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_user_to_data-driven_alert), and [Delete User from Data-Driven Alert](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_user_from_data-driven_alert) methods. ## REST API 3.1 for Tableau Server 2018.2 - You can now move projects within the project hierarchy. You can now move projects to the top of the project hierarchy when using the [Update Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Update) method by passing an empty string ("") to the **parentProjectId** attribute of the **** element. - You can now manage and cancel jobs. The following methods have been updated or added in the 2018.2 release to improve the management of jobs: - **Added**: The [Query Jobs](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_jobs) method returns a list of all active jobs on the specified site. - **Added**: The [Cancel Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#cancel_job) method allows you to cancel a job that is pending or in-progress. - **Updated**: The [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_job) method now allows you to query jobs used to run workbook subscriptions or view subscriptions. - You can now manage which projects are included on a user's list of favorites, and query a list of favorites that includes favorite projects using the following methods that have been updated or added in the 2018.2 release: - **Added**: [Add Project to Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_project_to_favorites) - **Added**: [Delete Project from Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_project_from_favorites) - **Updated**: [Get Favorites for User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_favorites_for_user) - You can now publish data sources asynchronously by adding the _asJob_ parameter to the Publish Data Source request URI. To learn more, see [Publishing workbooks and data sources asynchronously](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm#async). ## REST API 3.0 for Tableau Server 2018.1 - You can now publish workbooks that use multiple data source connections. To learn more, see [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook). - Starting with the 2018.1 release of Tableau Server and Tableau Cloud, available site roles have changed significantly to support the new user-based Creator, Explorer and Viewer licenses. To learn more, see [Updated Site Roles in REST API 3.0](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_new_site_roles.htm). - You can now publish workbooks asynchronously by adding the _asJob_ parameter to the Publish Workbook request URI. To learn more, see [Publishing workbooks asynchronously](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm#async). - Additional fields are now available when making queries using the REST API: - To format views, you can use the _sheetType_ field with the [Query Views for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_views_for_site) method. - To see workbook descriptions, you can use the _description_ field with the [Query Workbooks for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbooks_for_site) and [Query Views for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_views_for_site) methods. To learn more, see [Using fields in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fields.htm). ## REST API 2.8 for Tableau Server 10.5 - You can now filter results from the [Query View Image](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_image), [Query View Data](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_data) and [Query View PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_pdf) methods by specific workbook field values. To learn more, see [Filter query views](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). - Create or update project hierarchies. A project can now contain other projects. For more information about nested projects, see the following methods: - [Create Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Create) - [Update Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Update) - Export workbook views as .pdf files or comma-separated values. Similar to the [Query View Image](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_image) method, you can now export workbook views using the [Query View Data](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_data) and [Query View PDF](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_pdf) methods. - Refresh workbooks and data source extracts without associating them with a schedule. To learn more, see [Update Data Source Now](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_source_now) and [Update Workbook Now](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook_now). - Add workbooks and data sources to a schedule. You can now add workbook refreshes and data source extract refreshes to an existing schedule. To learn more, see [Add Workbook to Server Schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_workbook_to_schedule) and [Add Data Source to Server Schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_data_source_to_schedule). - The Update User method now supports the **ServerAdministrator** site role. Users who are in the **ServerAdministrator** site role can now add or remove other users from that site role. To learn more, see [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_user). ## REST API 2.7 for Tableau Server 10.4 - Filtering and sorting can now be performed on the following additional methods: - [Query Groups](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groups) - [Query Projects](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_projects) For information, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm) - The permissions required to move a data source from one project to another have been improved for non-server administrators. Users who either own the data source or the current project, or are project leaders for the current project, can update a data source if they have write permissions for the new project. See [Update Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_source) - Improved pagination. Results returned from methods that support pagination, such as [Query Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_sources) or [Query Projects](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_projects), are now indexed and sorted internally, ensuring consistent results across method calls. See [How Elements are Ordered](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_paging.htm#how_elements_are_ordered). - Certification notes and status. The [Update Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_source) method now supports setting certification status and adding a certification note. To learn more about data source certification, see [Use Certified and Recommended Data Sources and Tables](https://help.tableau.com/current/pro/desktop/en-us/datasource_recommended.html). ## REST API 2.6 for Tableau Server 10.3 - New feature for querying a site for refresh tasks and running an extract refresh job. For more information, see the following methods: - [Get Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_extract_refresh_task) - [Get Extract Refresh Tasks](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_extract_refresh_tasks) - [Run Extract Refresh Task](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#run_extract_refresh_task) - New methods for tagging data sources and views. - [Add Tags to Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_tags_to_data_source) - [Delete Tag from Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_tag_from_data_source) - [Add Tags to View](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_tags_to_view) - [Delete Tag from View](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_tag_from_view) - New method that makes it easy to switch sites. You no longer need to provide a user name and password every time. See [Switch Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#switch_site). - Update to [Query Sites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_sites). No longer just for server administrators. Now returns only the sites that the user making the call has access to. ## REST API 2.5 for Tableau Server 10.2 - New method for getting views and workbooks that a user has marked as favorites. For more information, see [Get Favorites for User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_favorites_for_user). - New method for getting images for views. You can get images in standard resolution and high resolution. For more information, see [Query View Image.](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_image) - A new feature you can use to control the type and amount of data you want returned from some methods. You can qualify the return values based upon the type of resource (for example, workbooks or views), and fields (names, ids, and tags). You can include multiple fields in a request. You can combine this feature with filtering and sorting. For example, you can return the names of the all workbooks that were updated after a certain date. For more information, see [Using Fields in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fields.htm). - Support for JSON in the REST API. You can set `Content-Type` and `Accept` headers to `application/json` or `application/xml` to control whether you want send requests or receive responses in XML or JSON. For more information, see [Fundamentals of the Tableau Server REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm) and [REST API Example Requests](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_example_requests.htm). - Support for _Cross Origin Resource Sharing_ (CORS). You can now enable CORS on Tableau Server to allow cross-orgin requests to the REST API, making it easier to use the API with JavaScript. For more information, see [Enabling CORS on Tableau Server for the REST API.](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm#Enabling) - Download workbooks or data sources without including the extracts. You can now download a data source or workbook without the large payload of the extract file by simply appending `?includeExtract=False` to the URI. For more information, see the following methods: - [Download Data Dource](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Download) - [Download Data Source Revision](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Download2) - [Download Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Download3) - [Download Workbook Revision](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Download4) - New option to publish the Tableau provided sample workbooks when you create or update a project. For more information see the following methods: - [Create Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Create) - [Update Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#Update) ## REST API 2.4 for Tableau Server 10.1 - The [Server Info](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#server_info) method returns information about the version of Tableau Server and the version of the REST API compatible with the server. - Site administrators can now use the method to [Query Workbooks for a User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbooks_for_user). Previously, only server administrators had permission to use this method. - Filtering and sorting can be performed on the following additional methods: - [Query Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_sources) - [Query Views for Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_views_for_site) ## REST API 2.3 for Tableau Server 10.0 - A new feature that lets you add filter (`name`, `createdDate`, `tags`, and so on) to some methods. For example, instead of having to get all the users or workbooks for a site and then loop through them looking for a specific ones, you can add a filter to the method call to return just the users or workbooks you're interested in. You can also specify sort parameters to return the items in a defined order. For more information, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm). - New and updated methods for viewing, downloading, and removing versions (revisions) for workbooks and data sources: - [Get Data Source Revisions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_data_source_revisions) - [Download Data Source Revision](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#download_data_source_revision) - [Remove Data Source Revision](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#remove_data_source_revision) - [Get Workbook Revisions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_workbook_revisions) - [Download Workbook Revision](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#download_workbook_revision) - [Remove Workbook Revision](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#remove_workbook_revision) - [Query Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_site). Now returns information about versioning settings for the site. - [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_site). Now lets you change versioning settings for the site. - New methods for creating and deleting schedules: - [Create Schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_schedule) - [Delete Server Schedule](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_schedule) - New methods for creating, viewing, and deleting subscriptions: - [Create Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_subscription) - [Query Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_subscription) - [Query Subscriptions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_subscriptions) - [Update Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_subscription) - [Delete Subscription](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_subscription) - New methods for adding and removing data sources from a user's favorites: - [Add Data Source to Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_data_source_to_favorites) - [Delete Data Source from Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_data_source_from_favorites) - New and updated methods for working with multiple connections in a data source. Starting with Tableau Server 10.0, data sources can have multiple connections. This version of the REST API includes the following changes: - [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_source_connection). This method has new syntax that lets you specify which connection in a data source you want to update. **Note**: If the data source was created in Tableau 9.3 or earlier, the [previous syntax for this method](https://help.tableau.com/v9.3/api/rest_api/en-us/help.htm#REST/rest_api_ref.htm#Update_Datasource_Connection) (without `/connections/connection-id` in the URI) will work for updating that data source. However, we recommend that you use the syntax documented here for all data sources. - [Query Data Source Connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_source_connections). This new method returns information about all the connections in a data source. - Updates to the [Update Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_site) to let you upload a new logo image to a Tableau Cloud site. ## REST API 2.2 for Tableau Server 9.3 - New methods for querying schedules and tasks: - [List Server Schedules](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_schedules) - [Query Extract Refresh Tasks](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_extract_refresh_tasks) - The [Query Views for Sites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_views_for_site) method. - A new append parameter for the [Publish Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_data_source) method that lets you add data to a data source that was published previously. - A new `size` attribute was added to the response for these methods: - [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook) - [Query Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook) - [Query Workbooks for User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbooks_for_user) - [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook) - New `createdAt` and `updatedAt` attributes were added to the response for these methods: - [Publish Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_data_source) - [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook) - [Query Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_source) - [Query Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_sources) - [Query Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook) - [Query Workbooks for User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbooks_for_user) - [Update Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_source) - [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook) ## REST API 2.1 for Tableau Server 9.2 - New methods for setting default permissions. The REST API now has the following methods that let you set, view, and remove default permissions for a project. Default permissions let you specify a set of permissions that are applied to new content in a project. - [Add Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_default_permissions) - [Query Default Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_default_permissions) - [Delete Default Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_default_permission) - Updated methods to support locking of project permissions. Permissions in a project can now be "locked" so that users cannot change permissions on individual workbooks or data sources in that project. The following methods have been updated in the REST API to enable you to lock or unlock permissions, or to view project default permissions. - [Create Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_project) - [Query Data Source Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_source_permissions) - [Query Projects](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_projects) - [Query Workbook Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook_permissions) - [Update Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_project) - Changes to the project capabilities that you can set or delete permissions for. Starting in Tableau Server 9.2, projects support only these capabilities: Read (view), Write (save), and ProjectLeader. (In Tableau Server 9.1 and earlier, you could set capabilities that could apply to all content in the project.) **Note**: This is a change in the permissions model for Tableau Server itself, not just in the API. In Tableau Server 9.2, you cannot set permissions for any project capability except the ones listed here, even if you specify a previous version of the REST API in the URI. This change affects the following methods: - [Add Project Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_project_permissions) - [Delete Project Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_project_permission) - [Query Project Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_project_permissions) To set capabilities that apply to content in the project, you can use the new methods for setting default permissions (see earlier items in this list). - Updated permissions for some methods to allow them to be called by site administrators in addition to server administrators. This also has the effect of making those methods available in Tableau Cloud. These are the affected methods: - [Add Data Source Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_data_source_permissions) - [Add Project Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_project_permissions) - [Add Tags to Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_tags_to_workbook) - [Add User to Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_user_to_group) - [Add User to Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_user_to_site) - [Add View to Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_view_to_favorites) - [Add Workbook Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_workbook_permissions) - [Add Workbook to Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_workbook_to_favorites) - [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload) - [Create Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_group) - [Create Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#create_project) - [Delete Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_data_source) - [Delete Data Source Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_data_source_permission) - [Delete Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_project) - [Delete Project Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_project_permission) - [Delete Tag from Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_tag_from_workbook) - [Delete View from Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_view_from_favorites) - [Delete Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_workbook) - [Delete Workbook from Favorites](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_workbook_from_favorites) - [Delete Workbook Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_workbook_permission) - [Download Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#download_data_source) - [Download Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#download_workbook) - [Get Users in Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_in_group) - [Get Users on Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#get_users_on_site) - [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload) - [Publish Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_data_source) - [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook) - [Query Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_source) - [Query Data Source Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_source_permissions) - [Query Data Sources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_data_sources) - [Query Groups](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_groups) - [Query Project Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_project_permissions) - [Query Projects](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_projects) - [Query Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_site) - [Query User on Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_user_on_site) - [Query View Preview Image](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_view_preview_image) - [Query Views for Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_views_for_workbook) - [Query Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook) - [Query Workbook Connections](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook_connections) - [Query Workbook Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook_permissions) - [Query Workbook Preview Image](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_workbook_preview_image) - [Remove User from Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#remove_user_from_group) - [Remove User from Site](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#remove_user_from_site) - [Update Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_source) - [Update Data Source Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_data_source_connection) - [Update Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_group) - [Update Project](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_project) - [Update User](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_user) - [Update Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook) - [Update Workbook Connection](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#update_workbook_connection) - A new [Delete Group](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_group) method. - Changes to required permissions for working with project permissions. In previous versions of the REST API, users who are not administrators can call [Add Project Permissions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#add_project_permissions) or [Delete Project Permission](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#delete_project_permission) if they have ChangePermissions permissions. In REST API 2.1, users must instead have ProjectLeader permissions. - More rigorous checking to be sure that payloads are well formed. The REST API now requires the structure of payloads to conform strictly to the XML schema (see next point) and to the applicable RFC specifications. For example, the payloads for methods that allow multi-part publishing ([Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload), [Publish Data Source](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_data_source), and [Publish Workbook](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#publish_workbook)) must meet the [RFC 1341 standard](http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html) for multi-part payloads. The practical effect is that in some cases, payloads that were accepted in earlier versions of the REST API now cause an error and return a 500-level HTTP code. For example, in the [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload) method, the first part of the payload is often blank, containing only `content-disposition` and `content-type` headers. With the change in the REST API 2.1, this blank payload must include two blank lines, per the RFC specification. Earlier versions of the REST API allowed you to include only one blank line, even though this structure did not conform exactly to the RFC specification. - A new XML schema (version 2.1) for the REST API. For more information, see [REST API XML Schema](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_schema.htm). - Updated versions of the Python and Java samples. For more information, see [REST API Samples](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_samples.htm). ## in REST API 2.0.1 for Tableau Server 9.1 - **Updated namespace**. The namespace and schema locations that are returned in the blocks of REST API responses have been changed from `tableausoftware.com` to `tableau.com`. [Skip to main content](#main-content) # Workbooks and Views Methods Using the workbooks and views methods of the Tableau Server REST API you can do the operations listed in the following categories: **Workbooks** (configurations of data sources and views in a site) - Get a filtered, sorted list of all or selected fields of workbooks of a site. - Get a list of workbooks a user has read access to or that they own. - Get or update the details of a specific workbook. - Update (refresh) the extract of a workbook. - List the data sources of a workbook or update the details of a datasource. - Publish a workbook to a specific site as a single part or in multiple parts. - Download or delete a specific workbook. - Download a specific revision of a workbook. - Download images of the sheets of a workbook as a `.pdf` or `.pptx` file. - Download the crosstab data of a specific view to an `.xlsx` file. - Download an encrypted keychain for a workbook that is migrating to another site. - Upload an encrypted keychain for a workbook migrated to another site. **Views** (sheets of a workbook in a site) - Get a filtered, sorted list of all or selected fields of views in a site. - Get a list of views for a workbook and the usage statistics for each view. - Get the data, a full or thumbnail .png image, or a .pdf of a selected view. - Get a thumbnail of the default (first) view of a workbook. **Custom views** (sheets of a workbook in a site) - Get a list of custom views on a site, get the details of a custom view, or download an image of a custom view. - Delete a custom view or update the name or owner of a custom view. - Get a list of users that have a specified custom view configured as their default view. - Configure a custom view as the default view for specified users. **Tags** (keywords added to workbooks, views, data sources, and flows) - Add or delete tags of a Workbook or Site. **View recommendations** (Recommended Views that are displayed on the server Home and Recommendations pages) - Get a list of the currently recommended views on a site. - Hide or unhide views from being recommendable to a user by adding them to or removing them from a list of views that are dismissed for the user. **Validate Tableau workbook files (TWB files)** - Syntactically (using the [XSD](https://github.com/tableau/tableau-document-schemas)) and semantically validate TWB files. Many workbook and view methods relate to UI elements and concepts described at: [Workbooks and Sheets](https://help.tableau.com/current/pro/desktop/en-us/environ_workbooksandsheets.htm). ## 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: Workbooks and Views](https://www.postman.com/salesforce-developers/salesforce-developers/folder/9eavnhy/workbooks-and-views) ## Add Tags to View Adds one or more tags to the specified view. #### URI PUT /api/api-version/sites/site-id/views/view-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
view-idThe ID of the views to add tags to.
#### Request Body ``` ... additional tags ... ``` #### Attribute Values
view-idThe view to add the tag to. If the view is already tagged with a tag that's included in the request body, those tags are ignored and the view retains them. If the <tags> element is empty, no new tags are added to the view.
tagThe text of the tag.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read permissions for the view (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:view_tags: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 ``` ... additional new tags ... ... existing tags ... ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400076 Error adding tags There was a problem adding tags to the specified view.
403 403004 Adding tags forbidden

A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if the <tags> element is empty.

404 404000 Site not found

The site ID in the URI is not for an existing site.

404 404011 View not found The view ID in URI doesn't correspond to an existing view.
404 404009 Workbook ID mismatch The request body contains a view ID (which is optional) and it doesn't match the ID in the URI.
404 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/views/1f1e1d1c-2b2a-2f2e-3d3c-3b3a4f4e4d4c/tags" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-tags-to-view.xml` **Content of add-tags-to-workbook.xml:** ``` ``` **Example response:** ``` ``` ## Add Tags to Workbook Adds one or more tags to the specified workbook. #### URI PUT /api/api-version/sites/site-id/workbooks/workbook-id/tags #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to add tags to.
#### Request Body ``` ... additional tags ... ``` #### Attribute Values
workbook-idThe workbook to add the tag to. If the workbook is already tagged with a tag that's included in the request body, those tags are ignored and the workbook retains them. If the <tags> element is empty, no new tags are added to the workbook.
tagThe text of the tag.
#### Permissions Tableau Server users who are not server administrators or site administrators can call this method only if they have Read permissions for the workbook (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbook_tags: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 ``` ... additional new tags ... ... existing tags ... ``` #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400000 Bad request The content of the request body is missing or incomplete, or contains malformed XML.
400 400049 Error adding tags There was a problem adding tags to the specified workbook.
403 403004 Adding tags forbidden

A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if the <tags> element is empty.

404 404000 Site not found

The site ID in the URI is not for an existing site.

404 404006 Workbook not found The workbook ID in URI doesn't correspond to an existing workbook.
404 404009 Workbook ID mismatch The request body contains a workbook ID (which is optional) and it doesn't match the ID in the URI.
404 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/tags" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-tags-to-workbook.xml` **Content of add-tags-to-workbook.xml:** ``` ``` **Example response:** ``` ``` ## Delete Custom View Deletes the specified custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1). _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** Tableau administrators can delete a custom view. Other users can delete any custom view that they own.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:views:update - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 DELETE /api/api-version/sites/site-luid/customviews/custom-view-luid #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body None. #### Required scope for JWT authorization _Introduced in Tableau Cloud December 2022 (API 3.18) ._ Authorize use of this method in your connected app by including this scope in its JSON Web Token (JWT). For more information, see [Access Scopes for Connected Apps](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm) in the Tableau Cloud Help. ``` tableau:views:update ``` #### cURL Request Example `curl -L -X DELETE "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/37d015c6-bc28-4c88-989c-72c0a171f7aa" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg|wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq|a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 201 #### Response Body None. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Tag from View Deletes a tag from the specified view. #### URI DELETE /api/api-version/sites/site-id/views/view-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
view-idThe ID of the view to remove the tag from.
tag-nameThe name of the tag to remove from the view.
#### Request Body None #### Permissions Tableau Server users who are not server administrators, site administrators, or workbook owners can delete a tag from a workbook only if they are project leaders or if they originally added the tag. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:view_tags: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400078Error deleting tagThere was a problem deleting the tag from the specified view.
403403004Deleting tags forbiddenA non-administrator user called this method but doesn't have permission to delete a tag from the specified workbook.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404007Tag not foundThe tag in the URI doesn't exist for the specified workbook.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Tag from Workbook Deletes a tag from the specified workbook. #### URI DELETE /api/api-version/sites/site-id/workbooks/workbook-id/tags/tag-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to remove the tag from.
tag-nameThe name of the tag to remove from the workbook.
#### Request Body None #### Permissions Tableau Server users who are not server administrators, site administrators, or workbook owners can delete a tag from a workbook only if they are project leaders or if they originally added the tag. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbook_tags: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400051Error deleting tagThere was a problem deleting the tag from the specified workbook.
403403004Deleting tags forbiddenA non-administrator user called this method but doesn't have permission to delete a tag from the specified workbook.
404404000Site not foundThe site ID or URL namespace in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404007Tag not foundThe tag in the URI doesn't exist for the specified workbook.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete View Deletes a view from a workbook. Use the [Get Workbook](#query_workbook) method or the [Query Views for Workbook](#query_views_for_workbook) method to find the view ID. If you delete the only view in a workbook, the workbook is deleted. #### URI DELETE /api/api-version/sites/site-id/views/view-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
view-idThe ID of the view to remove.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a view for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:views: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 #### Version Introduced in Tableau Cloud December 2025 / Server 2025.3 (API 3.27). For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400212Generic errorAn unknown error occurred. Try again.
403403004Operation on resource unauthorizedInsufficient permissions to perform the operation. Confirm you have Read and Delete permissions for the view.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site. Confirm the site ID.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view. Confirm the view ID.
405405000Invalid request methodThe HTTP request method was wrong. Confirm you're using the HTTP DELETE method.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Delete Workbook Deletes a workbook. When a workbook is deleted, all of its assets are also deleted, including associated views, data connections, and so on. #### URI DELETE /api/api-version/sites/site-id/workbooks/workbook-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to remove.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can delete a workbook for which they have Read (view) and Delete permissions (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbooks: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 #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Download View Crosstab Excel Downloads an Excel (`.xlsx`) file containing crosstab data from a view that the user has permission to access in a workbook. If a crosstab is exported from a dashboard, data from only the first view in the dashboard will appear in the `.xlsx` file. Downloads of data from story dashboards are not supported at this time. If you make multiple requests for an `.xlsx`, subsequent calls return a cached version of the file. This means that the returned `.xlsx` might not include the latest changes to the workbook. To decrease the amount of time that a workbook is cached, use the maxAge parameter. Note the data exported is at a summary level only. Detail level data is only available as a download option in the user interface. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-id/views/view-id/crosstab/excel GET /api/api-version/sites/site-id/views/view-id/crosstab/excel?maxAge=max-age-minutes GET /api/api-version/sites/site-id/views/view-id/crosstab/excel?vf\_=_filter-value_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
view-idThe ID of the view to use as the source of the crosstab to be downloaded as an .xlsx file.
max-age-minutes(Optional) The maximum number of minutes an .xlsx file will be cached on the server before being refreshed. To prevent multiple .xlsx requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
filter-valueThe value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /excel?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
#### Request Body None #### Permissions To export a crosstab to an `.xlsx` of a view, users who are not server administrators or site administrators need Read and ExportData permissions for the workbook containing the view and for the view itself. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:views:download ``` 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 This method has no response body. The response is in the form of a downloaded `.xlsx` file. The response header content will have Content-Type: `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`. #### Version Version 3.9 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400101 Unknown error

There was a problem downloading or querying this file.

400 400130 Unknown error

The view ID in the URI doesn't correspond to a view available on the specified site.

401 4001XX Unauthorized

The authentication token for the request is missing, invalid, or expired.

403 4031XX Unauthorized

A user attempted to download a .xlsx file without Read and/or ExportData permissions for the workbook or view, and is not an administrator.

404 404xxx Site or view not found The site or view specified in the request could not be found.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.9/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/crosstab/excel?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` The response is a file that contains the crosstab, whose data is no older than 60 minutes, saved as an `.xlsx` file. ## Download Workbook Downloads a workbook in `.twb` or `.twbx` format. **Security note:** Content in .twb or .twbx files downloaded using this method is stored in plain text. All data, including filter values that may give semantic clues to the data, will be readable by anyone who opens the files. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/content GET /api/api-version/sites/site-id/workbooks/workbook-id/content?includeExtract=extract-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to download.
extract-value(Optional) The extract-value is a Boolean value (False or True). When the workbook specified for download has an extract, if you add the parameter ?includeExtract=False, the extract is not included when you download the workbook. You can use this option to improve performance if you are downloading workbooks or data sources that have large extracts.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can download a workbook only if they have ExportXml permission for the workbook (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:workbooks:download ``` 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 One of the following, depending on the format of the workbook: - The workbook's content in `.twb` format (`Content-Type: application/xml`) - The workbook's content in `.twbx` format (`Content-Type: application/octet-stream`) In both cases, the response will have the following content disposition header: `Content-Disposition: name="tableau_workbook"; filename="workbook-filename"` #### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403019Read forbiddenA non-administrator user attempted to download a workbook, but the caller doesn't have ExportXml permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/content" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" > c:\files\my-workbook.twbx` The response is a file that contains the workbook. ## Download Workbook Encrypted Keychain Gets an encrypted version of the embedded credentials from the workbook. These credentials can only be migrated to the linked destination Tableau Cloud or Tableau Server. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:embedded\_credentials:download - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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/workbooks/workbook-luid/retrieveKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
workbook-luidThe LUID of the workbook to download the encrypted keychain from.
#### Request Body ``` site1 d56023b5-8f8b-4241-aa74-8974ced85827 http://localhost ``` ``` { "destinationSiteUrlNamespace": "site1", "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827", "destinationServerUrl": "http://localhost" } ``` #### Request Attributes
destinationSiteUrlNamespace

(Required) The site name on Tableau Cloud.

destinationSiteLuid (Required)  The site ID on Tableau Cloud.
destinationServerUrl

(Required) The destination Tableau Cloud URL.

#### cURL Request Example ``` curl --location "https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/retrieveKeychain" -X POST --header "Content-Type: application/xml" --header "X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86" --data " site1 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d http://example.com " ``` #### Response Code 200 #### Response Body ``` BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidList": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` ## Download Workbook PDF Downloads a `.pdf` containing images of the sheets that the user has permission to view in a workbook. Download Images/PDF permissions must be enabled for the workbook (true by default). If Show sheets in tabs is not selected for the workbook, only the default tab will appear in the `.pdf` file. If you make multiple requests for a PDF, subsequent calls return a cached version of the file. This means that the returned PDF might not include the latest changes to the workbook. To decrease the amount of time that a workbook is cached, use the maxAge parameter. **Version**: Available in API 3.4 and later. **License**: No additional license required. **Permissions**: To download a `.pdf` of a workbook, Tableau Server users who are not server administrators or site administrators need Read and ExportImage permissions for the workbook. The user needs Read and ExportImage permissions for a view in a workbook in order for that view to appear in the `.pdf`. **Access Scope**: `tableau:workbooks:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/workbooks/workbook-id/pdf?type=page-type&orientation=orientation GET /api/api-version/sites/site-id/workbooks/workbook-id/pdf?maxAge=max-age-minutes Available in API 3.23 (Tableau Cloud December 2024 / Tableau Server 2024.3) and later: GET /api/api-version/sites/site-id/workbooks/workbook-id/pdf?vf\_fieldname\=filter-value Available in API 3.26 (Tableau Cloud June 2025/ Tableau Server 2025.3) and later: GET /api/api-version/sites/site-id/workbooks/workbook-id/pdf?vizHeight=viz-height&vizWidth=viz-width #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the workbook.
workbook-id The ID of the workbook to use as the source of the .pdf file to be downloaded.
max-age-minutes (Optional) The maximum number of minutes a workbook PDF will be cached before being refreshed. To prevent multiple PDF requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
orientation (Optional) The orientation of the pages in the .pdf file produced. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-type

(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid.

If this parameter is not present the page type will default to Legal.

fieldname=filter-value

Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later:

(Optional) An expression that applies a granular filter to the request. Returns will be based on the value (filtervalue) of the dimension or measure (fieldname) of your view data you specify. For more information, see View filter queries.

viz-height (Optional) The height of the rendered pdf image in pixels that, along with the value of vizWidth, determines its resolution and aspect ratio.
viz-width (Optional) The width of the rendered pdf image in pixels that, along with the value of vizHeight, determines its resolution and aspect ratio.
#### Request Body None #### Response Code 200 #### Response Body This method has no response body. The response is in the form of a downloaded `.pdf` file. The response header content will have `Content-Type:application/pdf`. #### Errors
HTTP status error Code Condition Details
400 400101 Unknown error

There was a problem downloading or querying this workbook.

403 403004 Unauthorized

A non-administrator user attempted to download a pdf, but they don't have Read and/or ExportImage permissions for the workbook or user does not have Read permissions for the views of the workbook.

403 403105 Unauthorized

The PDF export feature is disabled on the server or the server is not configured to allow PDF exports using the REST API.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in the URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Request Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/pdf?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -o "response.pdf" ``` The response is a file that contains the workbook, whose data is no older than 60 minutes, is saved as a pdf. ## Download Workbook PowerPoint Downloads a PowerPoint (`.pptx`) file containing slides with images of the sheets that the user has permission to view in a workbook. Download Images/PDF permissions must be enabled for the workbook (true by default). If Show sheets in tabs is not selected for the workbook, only the default tab will appear in the `.pptx` file. If you make multiple requests for a `.pptx`, subsequent calls return a cached version of the file. This means that the returned `.pptx` might not include the latest changes to the workbook. To decrease the amount of time that a workbook is cached, use the maxAge parameter. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/powerpoint GET /api/api-version/sites/site-id/workbooks/workbook-id/powerpoint?maxAge=max-age-minutes #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to use as the source of the .pptx file to be downloaded.
max-age-minutes(Optional) The maximum number of minutes a workbook .pptx will be cached before being refreshed. To prevent multiple .pptx requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
#### Request Body None #### Permissions To download a `.pptx` of a workbook, Tableau Server users who are not server administrators or site administrators need Read and ExportImage permissions for the workbook. The user needs Read and ExportImage permissions for a view in a workbook in order for that view to appear in the `.pptx`. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbooks:download ``` 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 This method has no response body. The response is in the form of a downloaded `.pptx` file. The response header content will have Content-Type: `application/vnd.openxmlformats-officedocument.presentationml.presentation`. #### Version Version 3.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400101 Unknown error

There was a problem downloading or querying this workbook.

401 4001XX Unknown error

There was a problem downloading or querying this workbook.

403 4031XX Unauthorized

A non-administrator user attempted to download a .pptx file, but they don't have Read and/or ExportImage permissions for the workbook or user does not have Read permissions for the views of the workbook.

403 403105 Unauthorized

The PowerPoint export feature is disabled on the server or the server is not configured to allow PowerPoint exports using the REST API.

404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in the URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/powerpoint?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -o "response.pptx"` The response is a file that contains the workbook, whose data is no older than 60 minutes, saved as a `.pptx`. ## Download Workbook Revision Downloads a specific version of a workbook in `.twb` or `.twbx` format. **Note:** This method is available only if version history is enabled for the specified site. For more information, see **Security note:** Content in .twb or .twbx files downloaded using this method is stored in plain text. All data, including filter values that may give semantic clues to the data, will be readable by anyone who opens the files. [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions/revision-number/content GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions/revision-number/content?includeExtract=extract-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to download.
revision-numberThe revision number of the workbook to download. To determine what versions are available, call Get Workbook Revisions. Note that the current revision of a workbook cannot be accessed by this call; use Download Workbook instead.
extract-value(Optional) The extract-value is a Boolean value (False or True). When the workbook specified for download has an extract, if you add the parameter ?includeExtract=False, the extract is not included when you download the workbook. You can use this option to improve performance if you are downloading workbooks or data sources that have large extracts.
#### Request Body None #### Permissions Users who are site administrators can download workbook revisions on the site that they are administrators for. Users who are not server administrators or site administrators can download workbook revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified workbook. - Save (write) permissions for the project that contains the workbook. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:workbooks:download ``` 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 One of the following, depending on the format of the workbook: - The workbook's content in `.twb` format (`Content-Type: application/xml`) - The workbook's content in `.twbx` format (`Content-Type: application/octet-stream`) In both cases, the response will have the following content disposition header: `Content-Disposition: name="tableau_workbook"; filename="workbook-filename"` #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403053Version history not enabledversion history is not enabled for the specified site.
403403019Read forbiddenA non-administrator user attempted to download a workbook, but the caller doesn't have required permissions.
404404024Workbook revision not foundThe revision number in the URI doesn't correspond to an existing data source revision.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Custom View Gets the details of a specified custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1). _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** Tableau administrators can get the details of a custom view. Other users can get the details of any custom view that they have **Read** permissions for.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content:read - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 GET /api/api-version/sites/site-luid/customviews/custom-view-luid #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body None. #### cURL Request Example `curl -L -X GET "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/37d015c6-bc28-4c88-989c-72c0a171f7aa" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg"wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "1", "pageSize": "100", "totalAvailable": "1673" }, "customView": { "id": "37d015c6-bc28-4c88-989c-72c0a171f7aa", "name": "New name 2", "createdAt": "2016-02-03T23:35:09Z", "updatedAt": "2022-09-28T23:56:01Z", "lastAccessedAt": "2022-09-28T23:57:12Z", "shared": "false", "view": { "id": "8e33ff19-a7a4-4aa5-9dd8-a171e2b9c29f", "name": "circle" }, "workbook": { "id": "2fbe87c9-a7d8-45bf-b2b3-877a26ec9af5", "name": "marks and viz types 2" }, "owner": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "name": "workgroupuser" } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Custom View Data Returns a specified custom view rendered as data in comma separated value (CSV) format. **Version**: Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later. **License**: No additional license required. **Permissions**: Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) and Export data permissions for the underlying view (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). CSV data is provided in the response body, rather than as a download. If the request is for a dashboard, only data for the dashboard's first view is returned. If you make multiple requests for a custom view's data, subsequent calls return a cached version of the data. This means that the returned data might not include the latest changes to the custom view. To decrease the amount of time that data of a custom view is cached, use the maxAge parameter. Default age of data is 60 minutes. For Tableau Cloud, concurrent requests to endpoints that start long-running jobs, including this one, are limited to 20 at a time. A 429 HTML response means that a request exceeded the limit and should be retried at a later time. (introduced September 2021). Note the data exported is at a summary level only. Detail level data is only available as a download option in the user interface. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-id/customviews/custom-view\_luid/data GET /api/api-version/sites/site-id/customviews/custom-view\_luid/data?maxAge=max-age-minutes GET /api/api-version/sites/site-id/customviews/custom-view\_luid/data?vf\__fieldname_\>=_filter-value_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
custom-view-luidThe ID of the view to render as data.
max-age-minutes(Optional) The maximum number of minutes view data will be cached before being refreshed. To prevent multiple view data requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
fieldname=filter-value(Optional) An expression that applies a granular filter to the request. Returns will be based on the value (filtervalue) of the dimension or measure (fieldname) of your view data you specify. For more information, see View filter queries.
#### Request Body None #### cURL Request `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/customviews/2474164d-8d37-4a4c-abc7-c2070fd25fd5/data?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body The response body contains view data in CSV format no more than 60 minutes old. ``` Month of Date,Year of Date,Above Median?,Avg. Median January,1893,below median,-1.0 January,1864,below median,-0.9 January,1861,below median,-0.9 December,1862,below median,-0.9 March,1917,below median,-0.8 December,1892,below median,-0.8 February,1862,below median,-0.8 February,1911,below median,-0.8 February,1917,below median,-0.8 May,1861,below median,-0.8 November,1862,below median,-0.8 March,1898,below median,-0.8 December,1860,below median,-0.8 January,1862,below median,-0.7 March,1850,below median,-0.7 February,1893,below median,-0.7 December,1870,below median,-0.7 ``` #### Errors
HTTP status error Code Condition Details
400 400080 Bad Request The view ID in the URI doesn't correspond to a view available on the specified site.
401 401002 Unauthorized The authentication token provided in the request header was invalid or has expired.
403 403032 Read forbidden A non-administrator user attempted to get custok views, but the caller doesn't have Read or Expot imagepermission.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
405 405000 Invalid request method Request type was not GET.
429 429000 Concurrent request limit exceeded

For Tableau Cloud, the cumulative number of concurrent requests has exceeded the limit of 20. This limit applies to long-running jobs such as exports and downloads for view data, images, .pdf or .pptx files, datasources, and crosstabs, Retry this request at a later time.

Introduced September 2021.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Custom View Image Downloads an image file of the specified custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1). _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** Tableau administrators download the image of a custom view. Other users candownload the image of any custom view that they have **Publish** permissions for.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:views:download - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 GET /api/api-version/sites/site-id/customviews/view-id/image GET /api/api-version/sites/site-id/customviews/view-id/image?resolution=image-resolution GET /api/api-version/sites/site-id/customviews/view-id/image?maxAge=max-age-minutes GET /api/api-version/sites/site-id/customviews/view-id/image?vf\_=_filter-value_ Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2 and later: GET /api/api-version/sites/site-id/customviews/view-id/image?format=image-format #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID for the site.
view-idThe LUID for the custom view being updated.
image-resolution(Optional) The resolution of the image. Image width and actual pixel density are determined by the display context of the image. Aspect ratio is always preserved. Set the value to high to ensure maximum pixel density.
max-age-minutes(Optional) The maximum number of minutes a view image will be cached before being refreshed. To prevent multiple image requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
filter-valueThe value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /data?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
image-format(Optional) The format of the returned image. Valid values are png (default) or svg. Available in API 3.29 and later.
#### Request Body None. #### cURL Request Example `curl -L -X GET "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/37d015c6-bc28-4c88-989c-72c0a171f7aa/image" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg"wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body None. Tableau returns a an image file as a download. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Custom View PDF Returns a specified custom view rendered as a .pdf file. **Version**: Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later. **License**: No additional license required. **Permissions**: Tableau Serverand site administrators can get custom views as PDFs. Other users can do this only if they have Read (view) and Export image permissions for the views (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). If you make multiple requests for a PDF, subsequent calls return a cached version of the file. This means that the returned PDF might not include the latest changes to the custom view. To decrease the amount of time that an PDF is cached, use the maxAge parameter. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-luid/customviews/custom-view-luid/pdf GET /api/api-version/sites/site-luid/customviews/custom-view-luid/pdf?vizHeight=viz-height&vizWidth=viz-width GET /api/api-version/sites/site-luid/customviews/custom-view-luid/pdf?maxAge=max-age-minutes GET /api/api-version/sites/site-luid/customviews/custom-view-luid/pdf?type=page-type&orientation=orientation GET /api/api-version/sites/site-luidcustomviews/custom-view-luid/pdf?vf\_fieldname\=filter-value #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The ID of the site that contains the view.
custom-view-luid The ID of the view to render as a .pdf file.
viz-height (Optional) The height of the rendered pdf image in pixels that, along with the value of vizWidth, determines its resolution and aspect ratio.
viz-width (Optional) The width of the rendered pdf image in pixels that, along with the value of vizHeight, determines its resolution and aspect ratio.
max-age-minutes (Optional) The maximum number of minutes a view PDF will be cached before being refreshed. To prevent multiple PDF requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
orientation (Optional) The orientation of the pages in the .pdf file produced. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-type

(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid.

If this parameter is not present the page type will default to Legal.

fieldname=filter-value (Optional) An expression that applies a granular filter to the request. Returns will be based on the value (filtervalue) of the dimension or measure (fieldname) of your view data you specify. For more information, see View filter queries.
#### Request Body None #### Response Code 200 #### Response Body This method has no response body. The response is in the form of a downloaded `.pdf` file. The response header content will have `Content-Type:application/pdf`. #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84dcustomviews/2474164d-8d37-4a4c-abc7-c2070fd25fd5/pdf/maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` The response is a file that contains the view, whose data is no older than 60 minutes, saved as a pdf. #### Errors
HTTP statuserror CodeConditionDetails
400400080Bad RequestThe view ID in the URI doesn't correspond to a view available on the specified site.
401401002UnauthorizedThe authentication token provided in the request header was invalid or has expired.
403403032Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get View Gets the details of a specific view. **Version**: Available in API 3.0 and later. **License**: No additional license required. **Permissions**: For users who are not server administrators or site administrators, the method returns only the views that the user owns or has **Read** permissions for (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/views/view-id?includeUsageStatistics=get-usage-information #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
view-idThe ID of the view whose details are requested.
(Optional) get-usage-informationtrue to return usage statistics. The default is false.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "view": { "id": "view-id", "name": "view-name", "contentUrl": "path-to-view", "createdAt": "created-date", "updatedAt": "updated-date", "viewUrlName": "view-url-name", "workbook": { "id": "workbook-id" }, "owner": { "id": "owner-id" }, "project": { "id": "project-id" }, "tags": [] } } ``` #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Resource not foundThe view ID in the URI doesn't correspond to an existing view.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views/1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6ds" -X GET -H "X-Tableau-Auth:RDEj_zqgQtGGcCiD3BXnSA|abXWv8thv5ocrXLNU7axCicQu3UdfgeX" ``` **Example response:** ``` ``` ## Get View by Path Gets the details of all views in a site with a specified name. **Version**: Available in API 3.6 and later. **License**: No additional license required. **Permissions**: For users who are not server administrators or site administrators, the method returns only the views that the user owns or has **Read** permissions for (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/views?filter=viewUrlName:eq:view-name #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
view-nameThe name of the view as it appears in the URL to the view. For https://MY_SERVER/#/MY_SITE/views/workbook-name/Sheet1?:iid=1, the name would be Sheet1.
#### Request Body None #### Response Code 200 #### Response Body ``` ``` ``` { "view": { "id": "view-id", "name": "view-name", "contentUrl": "path-to-view", "createdAt": "created-date", "updatedAt": "updated-date", "viewUrlName": "view-name", "workbook": { "id": "workbook-id" }, "owner": { "id": "owner-id" }, "project": { "id": "product-id" }, "tags": [] } } ``` The value of view-url-name is the name of the view in its URL. For example, if a view named `View 1` shows the URL `https://MY_SERVER/#/site/MY_SITE/views/VIEW_1` in your browser address bar, then the view-url-name would be `VIEW_1`. Modifying the name (display name) of a view will not impact the view-url-name (path element of the view's URL). #### Errors
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Resource not foundThe view ID in the URI doesn't correspond to an existing view.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views?filter=viewUrlName:eq:Sheet1" -X GET -H "X-Tableau-Auth:RDEj_zqgQtGGcCiD3BXnSA|abXWv8thv5ocrXLNU7axCicQu3UdfgeX" ``` **Example response:** ``` viewUrlName="Sheet1" > ``` ## Get Recommendations for Views - Deprecated in API 3.19 Gets a list of views that are recommended for a user. > [!WARNING] > > Starting in API version 3.19 (Tableau Server 2023.1 / Cloud March 2023), this method is deprecated, will no longer be supported, and may be retired in future releases. Using machine learning, the server will match preferences between similar users and recommend content that is most popular and recently viewed. When a recommended view is selected and not marked as hidden, it appears on the server Home and Recommendations pages. #### URI GET /api/api-version/sites/site-id/recommendations/?type=view #### Path Parameters
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe LUID of the site that contains the group.
#### Request Body None #### Permissions This method can be called by any site user or administrator. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:recommendations: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 ``` ``` #### Version Version 3.7 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/recommendations?type=view" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Get Workbook Downgrade Info Returns a list of the features that would be impacted, and the severity of the impact, when a workbook is exported as a downgraded version (for instance, exporting a v2019.3 workbook to a v10.5 version). #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/downGradeInfo?productVersion=downgrade-target-version #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook that downgrade info is being shown for.
workbook-idThe ID of the workbook being downgraded.
downgrade-target-versionThe Tableau release version number the workbook is being downgraded to.
#### Request Body None #### Permissions Tableau Server users who are site administrators can get downgrade information for workbooks on the site that they are administrators for. Users who are not server administrators or site administrators can get downgrade information for workbooks they have permissions to. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbook_downgrade_info: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 ``` ``` #### Version Version 3.5 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400114Unknown downgrade errorThe workbook cannot be exported to a downgraded version due to an unknown error.
400400115Invalid downgrade versionThe downgrade version specified is not a valid Tableau version number.
400400116Downgrade version not supportedThe downgrade version specified refers to a Tableau version that is not supported.
40340310Access to downgrade info deniedThe caller does not have permissions required to access download info for this workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Workbook Revisions Returns a list of revision information (history) for the specified workbook. **Note:** This method is available only if version history is enabled for the specified site. To get a specific version of the workbook from revision history, use the [Download Workbook Revision](#download_workbook_revision) method. For more information, see [Maintain a History of Revisions](https://help.tableau.com/current/server/en-us/help.htm#revision_history_maintain.htm) in the Tableau Server Help. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions GET /api/api-version/sites/site-id/workbooks/workbook-id/revisions?pageSize\=page-size&pageNumber\=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook to get revisions for.
workbook-idThe ID of the workbook to get revisions for.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions Tableau Server users who are site administrators can get workbook revisions on the site that they are administrators for. Users who are not server administrators or site administrators can get workbook revisions if they have all of the following: - A site role of ExplorerCanPublish. - Read (view), Write (save), and Download (save as) permissions for the specified workbook. - Save (write) permissions for the project that contains the workbook. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ``` If the revision element includes the attribute `isDeleted="true"`, the workbook has been deleted and cannot be downloaded using the [Download Workbook Revision](#download_workbook_revision) method. If a user has been deleted from the site, no `` element is included in the `` element. #### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP status error Code Condition Details
400 400006 Invalid page number The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400 400007 Invalid page size The page size parameter is not an integer, or is less than one.
403 403014 Page size limit exceeded The specified page size is larger than the maximum page size.
403 403053 Version history not enabled version history is not enabled for the specified site.
403 403056 A non-administrator user attempted to get workbook revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in the URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Hide a Recommendation for a View - Deprecated in API 3.19 Hides a view from being recommended by the server by adding it to a list of views that are dismissed for a user. > [!WARNING] > > Starting in API version 3.19 (Tableau Server 2023.1 / Cloud March 2023), this method is deprecated, will no longer be supported, and may be retired in future releases. If hidden, a view will not be displayed on the server Home or Recommendation pages. #### URI PUT /api/api-version/sites/site-id/recommendations/dismissals #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
#### Request Body ``` ``` #### Request Parameters
view-luidThe LUID of the view to be added to the list of views hidden from recommendation for a user.
#### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:recommendation_dismissals: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 None #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe content ID in the URI doesn't correspond to an existing content of the requested type.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/dismissals -X PUT \ -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" \ -d "@hide-view.xml" ``` **Content of** hide-view.xml ``` ``` **Example response:** No response body. Response code is `204`. ## List Custom Views Gets a list of custom views on a site. The list includes details of each custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 and Tableau Server 2023.1) 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:** Tableau administrators can get the list of the custom views on a site, including details of each custom view. For details of non-administrator users' permissions, see _[Permissions Details](#list_custom_views_permissions)_ .  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content:read - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 GET /api/api-version/sites/site-luid/customviews GET /api/api-version/sites/site-luid/customviews?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/customviews?sort=sort-expression GET /api/api-version/sites/site-id/customviews?fields=field-expression GET /api/api-version/sites/site-id/customviews?fields=filter-expression #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luid The LUID for the site.
page-size (Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number (Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
field-expression

(Optional) An expression that lets you specify the set of available fields to return. When a request has a valid field expression, describing the attributes of a Tableau resource like a workbook or data source, only the attributes specified in the expression will be present in the response. For example, a field expression that results in a response containing only the resources LUIDs of the resources being requested would look like:

?field=id

You can qualify the expression to return values based upon predefined keywords such as _default_, which returns only default values, and _all_, which returns default and non-default values. You can include multiple field expressions in a request, and mix field, sort, and filter expressions in the same request.

The supported fields for custom views are its attributes: id, name, createdAt, updatedAt, and shared.

For more information, see Using Fields in the REST API.

filter-expression

(Optional) An expression that lets you filter which Tableau resources are present in the response. A filter expression has a resource, an operator, and a value. For example, a filter that returns only resources created after a specified date would look like:

?filter=createdAt:gt:2016-08-26T18:00:33Z (where gt is the greater-than operator)

You can include multiple filter expressions in a request, and mix field, sort, and filter expressions in the same request.

The supported filters for custom views use the eq (equals) operator, with the resources: viewId, ownerId, and workbookId.

For more information, see Filtering and Sorting in the Tableau REST API.

sort-expression

(Optional) An expression that lets you sort the Tableau resources present in the response. A sort expression contains an attribute name and a direction (asc or desc). For example, a sort expression that sorts the requested resource by creation date with the latest date first would look like:

?sort=createdAt:desc

You can include multiple sort expressions in a request, and mix field, sort, and filter expressions in the same request.

The supported filters for custom views use the eq (equals) operator, with the resources: viewId, ownerId, and workbookId.

For more information, see Filtering and Sorting in the Tableau REST API.

#### Request Body None. #### Required scope for JWT authorization _Introduced in Tableau Server 2022.3 (API 3.17)._ Authorize use of this method by including this scope in the JSON Web Token (JWT). 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) see [Access Scopes for Connected Apps](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm) in the Tableau Server Help. `tableau:content:read` #### cURL Request Example `curl -L -X GET "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg"wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq"a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "1", "pageSize": "100", "totalAvailable": "1673" }, "customViews": { "customView": { "id": "37d015c6-bc28-4c88-989c-72c0a171f7aa", "name": "New name 2", "createdAt": "2016-02-03T23:35:09Z", "updatedAt": "2022-09-28T23:56:01Z", "lastAccessedAt": "2022-09-28T23:58:25Z", "shared": "false", "view": { "id": "8e33ff19-a7a4-4aa5-9dd8-a171e2b9c29f", "name": "circle" }, "workbook": { "id": "2fbe87c9-a7d8-45bf-b2b3-877a26ec9af5", "name": "marks and viz types 2" }, "owner": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "name": "workgroupuser" } } // more customViews } } ``` #### Permissions Details **For users who do not have administrator permissions:** The custom views present in the response to a request, and the details of those views that are displayed, depend on four things: - Does the user have both **Write** and **WebAuthoring** permissions for the custom view? - Is the user is the owner of the custom view - Is there filter applied in the request parameters. - Is [site user visibility](https://help.tableau.com/current/server/en-us/user_visibility.htm) set to **Limited**? The expected behavior in a response is as follows: - If the request has no filter parameters: Users will see only custom views that they own. - If the filter parameters include `ownerId`: Users will see only custom views that they own. - If the filter parameters include `viewId` and/or `workbookId`, and don't include `ownerId`: - Users will see those custom views that they have **Write** and **WebAuthoring** permissions for. - If site user visibility in not set to **Limited**, the Users will see those custom views that are "public", meaning the value of their `shared` attribute is `true`. #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## List Users with Custom View as Default Gets the list of users whose default view is the specified custom view. **Version:** Available in API 3.21 (Tableau Cloud October 2023 / Server 2023.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:** Only Tableau administrators can list users whose default view is the specified custom view.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content: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). #### URI GET /api/api-version/sites/site-luid/customviews/custom-view-luid/default/users #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body None. #### cURL Request Example ``` curl --location 'https://qa-near.tsi.lan/api/3.21/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/3321cb71-6606-4d78-8a0c-e69a7e7d2261/default/users' --header 'Accept: application/xml' --header 'X-Tableau-Auth: LfzV48kKRUOYMYbzamWRpA|bfkD8ruGmN8ZNGmdL03PHB0gMHGtCfOk|a946d998-2ead-4894-bb50-1054a91dcab3' ``` #### Response Code 200 #### Response Body Copy ```                        ``` Copy ``` {  "pagination": {    "pageNumber": "1",    "pageSize": "100",    "totalAvailable": "1"  },  "users": {    "user": [      {        "id": "5c9a81df-7ec0-4752-a057-82cd2bb22c44"      }    ]  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions.
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Publish Workbook Publishes a workbook on the specified site. To make changes to a published workbook, call [Update Workbook](#update_workbook) or [Update Workbook Connection](#update_workbook_connection). **Version**: Available in API 2.0 and later. **License**: No additional license required. **Permissions**: Users who are not server administrators or site administrators can publish a workbook only if the workbook belongs to a project that they have permissions to publish to. **Access Scope**: `tableau:workbooks:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This method is used in two ways. You can call it to publish a workbook in a single request. To do that, you include the content of the workbook file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB. If you want to avoid having the publishing process time out, you can use the _asJob_ parameter to make workbook publication asynchronous. Alternatively, you can publish a workbook in multiple parts. To do that, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload), and then commit the upload by calling Publish Workbook. In this case, Publish Workbook doesn't contain the file to publish. **Hiding views in a published workbook** To exclude certain sheets (also known as views) when you publish a workbook, configure them in the request as `hidden`. You cannot publish a workbook if all sheets are hidden. **Extracts with multiple table options** If an extract was stored using the multiple tables option, you can't append data to it. **Workbooks that rely on external local resources** When you publish a workbook from your local computer to the server, the publish process will fail if the workbook relies on resources (such as an Excel file or other data file) that are on your local computer but are not available on the server. (Unlike the publish process that is used in Tableau Desktop, the REST API publish process cannot automatically include extracts or other resources that the workbook uses.) If you are publishing a workbook that gets its data from a source on your computer, save the workbook as a packaged workbook (`.twbx` file) and publish the package so that workbook has all the resources it needs on the server. For more information, see [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm). #### URI POST /api/api-version/sites/site-id/workbooks POST /api/api-version/sites/site-id/workbooks?overwrite=overwrite-flag POST /api/api-version/sites/site-id/workbooks?skipConnectionCheck=skip-connection-check-flag POST /api/api-version/sites/site-id/workbooks?uploadSessionId=upload-session-id&workbookType=workbook-file-type&overwrite=bool&asJob=asJob-value #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site to publish to.
overwrite-flag(Optional) true to overwrite a workbook that has the same name, or false to fail if the specified workbook already exists. The default is false. If overwrite-flag is set to true but the workbook doesn't already exist, the operation succeeds.
asJob-value(Optional, boolean) If false, the workbook publishing process runs as a synchronous process. If a workbook is very large, the process might time out before it finishes. If you set this value to true, the process runs asynchronously, and a job will start to perform the publishing process and return the job ID. You can check the status of the import job by calling Query Job. Default value is false.
skip-connection-check-flag(Optional, boolean) If true, then the Tableau server will not check if a non-published connection of a workbook is reachable. Publishing will succeed but unchecked connection issues may result in a non-functioning workbook. If you encounter this issue, follow Keep Data Fresh guidelines. Default value is false.
upload-session-idIf you are calling this method to commit a file that was uploaded in parts, this value contains the upload session ID that was generated by a call to Initiate File Upload. If this value is not included, the server assumes that the body of the request contains the file to be published.
workbook-file-typetwb or twbx to indicate whether you have uploaded a workbook file (twb) or a packaged workbook file (twbx). This value is required if you are calling Publish Workbook in order to commit a file that was previously uploaded using Append to File Upload. The value is not used if you upload a file in the body of the request.
#### Request Body The content type in the header of requests to publish a workbook must use the mixed multi-part content type with a boundary string definition, in the form of: `Content-Type: multipart/mixed; boundary=boundary-string`. **Publishing a file in the request body** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string Content-Disposition: name="tableau_workbook"; filename="workbook-file-name" Content-Type: application/octet-stream content-of-workbook-file --boundary-string-- ``` **Committing a file previously uploaded** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` **Hiding a view when publishing a workbook** ``` --boundary-string Content-Disposition: name="request_payload" Content-Type: text/xml --boundary-string-- ``` #### Attribute Values
boundary-string A string of characters that is guaranteed to be unique within the body of the request, and that is used to delimit sections of the request body. This value must be declared as a header that has this format:

Content-type: multipart/mixed; boundary=boundary-string

workbook-name The name to assign to the workbook when it is saved on the server.
workbook-description (Optional) Starting in API 3.20, the description for the workbook.
show-tabs-flag (Optional) Specify true to have the published workbook show views in tabs; otherwise, false. The default is false.
user-luid (Optional) The LUID of the user to generate thumbnails as. You can get the user LUID by calling Get Users on Site.
server-address (Optional) Specify the server address for a data source connection if that data source does not use OAuth.
port-number (Optional) Specify the port number for a data source connection if that data source does not use OAuth.
connection-username (Optional) If the workbook's data source connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection username. If the element is included but is not required (for example, if the data source uses OAuth), the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client id. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

Note: Even if credentials are embedded in a workbook, you must still provide credentials when connecting to a data source that requires credentials, unless that data source uses OAuth.

connection-password (Optional) If the workbook's data source connections require credentials, the <connectionCredentials> elements are included and this attribute specifies the connection password. If the element is included but is not required (for example, if the data source uses OAuth), the server ignores the element and its attributes.

If your auth type allows secrets to be passed as generic username and password variables, use this attribute for the appropriate secret, such as client secret. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

Note: Even if credentials are embedded in a workbook, you must still provide credentials when connecting to a data source that requires credentials, unless that data source uses OAuth.

embed-flag (Optional) If the workbook's data source connection requires credentials, the <connectionCredentials> element is included. Setting this attribute to true instructs the server to save the credentials for when the data source is used.
oauth-flag (Optional) If the workbook's data source connection is configured to use OAuth, set this to true to specify that the value of the name attribute in the <connectionCredentials> element is an OAuth username. In that case, no password is required and the value of the embed attribute specifies whether to embed the OAuth credential with the workbook, and the server address and port number are not required.

If your auth type allows secrets to be passed as generic username and password variables, set the oAuth attribute to false. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)

For more information on OAuth, see the OAuth Connections section of the Tableau Cloud or Tableau Server Product Help.

hide-view-flag Setting this flag to true will cause the named view to be hidden in the published workbook. The default value is false. You can specify any number of views to hide. If all views in a workbook are hidden the server will not perform a publish.
project-id The ID of the project to assign the workbook to. If the project is not specified, the workbook will be published to the default project.
workbook-file-name The file name (including extension) of the workbook file to upload. This attribute is used in the request body only if the request also includes the content of the workbook file; it is not used if you are committing a file uploaded using previous requests.
content-of-workbook-file The content of the workbook file, if the request includes the file. The maximum size of a file that can be uploaded in one call is 64 MB.
encryptExtracts (Optional) true to encrypt the extracts or false to not encrypt extracts. For more information, see Extract and Encryption Methods.
#### Response Code 201 #### Response Body ``` ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### cURL Request Example ``` curl "http://MY_SERVER/api/3.4/sites/ff2a8360-3c2b-4b05-a793-7607c602e1fb/workbooks" -X POST -H "X-Tableau-Auth:7T_33sOfS8Ks_0cht4tYxw|8tsTYQyyOZXfOgxZEHWQ4jUTCQ08GhRr" -H "Content-Type: multipart/mixed;" -F "request_payload=@publish-workbook.xml" -F "tableau_workbook=@MY_WORKBOOK.twbx" ``` **Content of publish-workbook.xml** (publish the Test1 workbook, hide the Test Sheet 1 view): ``` ``` **Example response:** ``` ``` #### Response Headers Location: /api/3.29/sites/site-id/workbooks/workbook-id #### Errors
HTTP statuserror CodeConditionDetails
400400000Malformed request bodyThe XML content in the MIME multipart request is not empty.
400400000Missing workbookThere is no attachment in the request and no uploadSessionID parameter.
400400000Unexpected attachmentsThe message had both an uploadSessionId parameter and an attachment, or the request body contained more than one attachment.
400400008Invalid embed valueThe request body contains a <connectionCredentials> element and it has an embed attribute whose value is not true or false.
400400008Invalid overwrite valueThe overwrite parameter must be true or false.
400400011Publishing errorThe workbook could not be published for some other reason than those specified earlier.
400400020Invalid workbook file nameThe name of the workbook doesn't end in .twb or .twbx.
400400035Missing or invalid file typeThe request included an uploadSessionId parameter but no file type, or the file type was something other than .twb or .twbx.
403403007Insufficient publishing permissionA non-administrator user attempted to publish a workbook, but the caller doesn't have sufficient project permissions.
403403007Unlicensed publishing forbiddenA non-administrator user attempted to publish a workbook. This is disallowed for all projects (including the default project).
403403007Overwrite forbiddenA workbook with the specified name already exists and the overwrite parameter was not set to true.
403403007Problem connecting to data sourceThere was a problem connecting to a data source used by the workbook. This can be due to missing or invalid connection credentials or because the referenced data source is not available on the server.
403403008Insufficient storage quotaThe workbook could not be published because there is not enough storage remaining on the server to accommodate its size.
403403130Publishing overwriteA workbook with the same name already exists.
403403131Concurrent updateThe workbook is already being published in another process.
403403132Failed connection checkOne or more data sources used by the workbook could not be reached.
404404005Project not foundThe project ID in the request body doesn't correspond to an existing project on the site.
404404006Workbook not foundThe user specified overwrite as true but no workbook with the specified name exists on the site.
404404015File upload not foundThe file upload session ID in the uploadSessionId parameter doesn't correspond to an existing file upload on the site.
405405000Invalid request methodRequest type was not POST.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Views for Site Returns all the views for the specified site, optionally including usage statistics. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version**: Available in API 2.2 and later. **License**: No additional license required. **Permissions**: For users who are not server administrators or site administrators, the method returns only the views that the user owns or has Read permissions for (either explicitly or implicitly). **Access Scope**: `tableau:content:read` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 GET /api/api-version/sites/site-id/views GET /api/api-version/sites/site-id/views?includeUsageStatistics=get-usage-information GET /api/api-version/sites/site-id/views?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/views?includeUsageStatistics=get-usage-information&pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/views?filter=filter-expression GET /api/api-version/sites/site-id/views?sort=sort-expression GET /api/api-version/sites/site-id/views?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 2.2. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the views.
get-usage-information(Optional) true to return usage statistics. The default is false.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
filter-expression(Optional) Fields and operators that you can use to filter results. For more information, see Filter expressions.
sort-expression(Optional) Field and direction to sort results. For more information, see Sorting.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the workbooks or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the REST API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand (**`&`**). #### Request Body None #### cURL Request `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views" -X GET -H "X-Tableau-Auth:1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d"` #### Response Code 200 #### Response Body ``` ``` ``` { "pagination": { "pageNumber": "1", "pageSize": "100", "totalAvailable": "2" }, "views": [ { "id": "1f1e1d1c-2b2a-2f2e-3d3c-3b3a4f4e4d4c", "name": "Economic Indicators", "contentUrl": "Finance/sheets/EconomicIndicators", "workbook": { "id": "1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" }, "owner": { "id": "9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" } }, { "id": "9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b", "name": "Investing in the Dow", "contentUrl": "Finance/sheets/InvestingintheDow", "workbook": { "id": "59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" }, "owner": { "id": "9f8e7d6c5-b4a3-f2e1-d0c9-b8a7f6e5d4c" } } ] } ``` The element is included in the response only if the method has `includeUsageStatistics=true` in the URI. #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
400400008Invalid parameter valueThe includeUsageStatistics was provided with a value other than true or false.
403403004Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
403403014Page size limit exceededThe specified page size is larger than the maximum page size.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Views for Workbook Returns all the views for the specified workbook, optionally including usage statistics. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/views GET /api/api-version/sites/site-id/workbooks/workbook-id/views?includeUsageStatistics=get-usage-information #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to get the views for.
(Optional) get-usage-informationtrue to return usage statistics. The default is false.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ... additional views ... ``` The element is included in the response only if the method has `includeUsageStatistics=true` in the URI. #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400008Invalid parameter valueThe includeUsageStatistics was provided with a value other than true or false.
403403004Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/views" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query View Data Returns a specified view rendered as data in comma separated value (CSV) format. **Version**: Available in API 2.8 and later. **License**: No additional license required. **Permissions**:Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). CSV data is provided in the response body, rather than as a download. If the request is for a dashboard, only data for the dashboard's first view is returned. If you make multiple requests for a view's data, subsequent calls return a cached version of the data. This means that the returned data might not include the latest changes to the view. To decrease the amount of time that an data is cached, use the maxAge parameter. Default age of data is 60 minutes. For Tableau Cloud, concurrent requests to endpoints that start long-running jobs, including this one, are limited to 20 at a time. A 429 HTML response means that a request exceeded the limit and should be retried at a later time. (introduced September 2021). Note the data exported is at a summary level only. Detail level data is only available as a download option in the user interface. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-id/views/view-id/data GET /api/api-version/sites/site-id/views/view-id/data?maxAge=max-age-minutes GET /api/api-version/sites/site-id/views/view-id/data?vf\_=_filter-value_ #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
view-idThe ID of the view to render as data.
max-age-minutes(Optional) The maximum number of minutes view data will be cached before being refreshed. To prevent multiple view data requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
filter-valueThe value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /data?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
#### Request Body None #### cURL Request `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/views/2474164d-8d37-4a4c-abc7-c2070fd25fd5/data?maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` #### Response Code 200 #### Response Body The response body contains view data in CSV format no more than 60 minutes old. ``` Month of Date,Year of Date,Above Median?,Avg. Median January,1893,below median,-1.0 January,1864,below median,-0.9 January,1861,below median,-0.9 December,1862,below median,-0.9 March,1917,below median,-0.8 December,1892,below median,-0.8 February,1862,below median,-0.8 February,1911,below median,-0.8 February,1917,below median,-0.8 May,1861,below median,-0.8 November,1862,below median,-0.8 March,1898,below median,-0.8 December,1860,below median,-0.8 January,1862,below median,-0.7 March,1850,below median,-0.7 February,1893,below median,-0.7 December,1870,below median,-0.7 ``` #### Errors
HTTP status error Code Condition Details
400 400080 Bad Request The view ID in the URI doesn't correspond to a view available on the specified site.
401 401002 Unauthorized The authentication token provided in the request header was invalid or has expired.
403 403032 Read forbidden A non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
405 405000 Invalid request method Request type was not GET.
429 429000 Concurrent request limit exceeded

For Tableau Cloud, the cumulative number of concurrent requests has exceeded the limit of 20. This limit applies to long-running jobs such as exports and downloads for view data, images, .pdf or .pptx files, datasources, and crosstabs, Retry this request at a later time.

Introduced September 2021.

For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query View Image Downloads an image file of the specified view. **Version**: Available in API 2.5 and later. **License**: No additional license required. **Permissions**: Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). If you make multiple requests for an image, subsequent calls return a cached version of the image. This means that the returned image might not include the latest changes to the view. To decrease the amount of time that an image is cached, use the maxAge parameter. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). **Note**: If you want to disable this endpoint, use TSM to set the `sheet_image.enabled` setting to false. For more information, see [tsm configuration set options](https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm) in the Tableau Server help. #### URI GET /api/api-version/sites/site-id/views/view-id/image GET /api/api-version/sites/site-id/views/view-id/image?resolution=image-resolution GET /api/api-version/sites/site-id/views/view-id/image?maxAge=max-age-minutes GET /api/api-version/sites/site-id/views/view-id/image?vf\_=_filter-value_ Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later: GET /api/api-version/sites/site-id/views/view-id/image?resolution=image-resolution GET /api/api-version/sites/site-id/views/view-id/image?vizHeight=viz-height&vizWidth=viz-width Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2 and later: GET /api/api-version/sites/site-id/views/view-id/image?format=image-format #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the view.
view-id The ID of the view to return an image for.
viz-height

Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later: 

(Optional) The height of the rendered pdf image in pixels that, along with the value of vizWidth determine its resolution and aspect ratio.

viz-width

Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later:

(Optional) The width of the rendered pdf image in pixels that, along with the value of vizHeight determine its resolution and aspect ratio.

image-resolution (Optional) The resolution of the image. Image width and actual pixel density are determined by the display context of the image. Aspect ratio is always preserved. Set the value to high to ensure maximum pixel density.
max-age-minutes (Optional) The maximum number of minutes a view image will be cached before being refreshed. To prevent multiple image requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
filter-value The value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /data?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
image-format (Optional) The format of the returned image. Valid values are png (default) or svg. Available in API 3.29 and later.
#### Request Body None #### Response Code 200 #### Response Body The response `Content-Type` header changes based on the `image-format` parameter: - Default/PNG: `image/png` - SVG: `image/svg+xml` #### cURL Request Example ``` curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/image?resolution=high&maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` #### Errors
HTTP statuserror CodeConditionDetails
400400010Bad requestInvalid query parameter. For example, attempting to query 'jpg' image-format.
403403004Read forbiddenA non-administrator user attempted to query a view preview image, but the caller doesn't have Read permission.
403403068ForbiddenThe endpoint has been disabled on the server. To enable the endpoint, a server administrator must use tsm to configure the sheet_image.enabled setting. For more information, see tsm configuration set Options in the Tableau Server help.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view in the specified workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query View PDF Returns a specified view rendered as a .pdf file. **Version**: Available in API 2.8 and later. **License**: No additional license required. **Permissions**: Tableau Server users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). **Access Scope**: `tableau:views:download` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). If you make multiple requests for a PDF, subsequent calls return a cached version of the file. This means that the returned PDF might not include the latest changes to the view. To decrease the amount of time that an PDF is cached, use the maxAge parameter. This method includes the ability to filter a view using fields in the underlying workbook data. To learn more about filtering query views, see [Filtering and Sorting in the REST API](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views). #### URI GET /api/api-version/sites/site-id/views/view-id/pdf GET /api/api-version/sites/site-id/views/view-id/pdf?vizHeight=viz-height&vizWidth=viz-width GET /api/api-version/sites/site-id/views/view-id/pdf?maxAge=max-age-minutes GET /api/api-version/sites/site-id/views/view-id/pdf?type=page-type&orientation=orientation GET /api/api-version/sites/site-id/views/view-id/pdf?vf\_=_filter-value_ #### Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the view.
view-id The ID of the view to render as a .pdf file.
filter-value The value of the field that you want to use to filter the workbook view. For example, a workbook with the filter /data?vf_year=2017 would only display data from the year 2017. To learn more, see View filter queries.
viz-height (Optional) The height of the rendered pdf image in pixels that, along with the value of vizWidth, determines its resolution and aspect ratio.
viz-width (Optional) The width of the rendered pdf image in pixels that, along with the value of vizHeight, determines its resolution and aspect ratio.
max-age-minutes (Optional) The maximum number of minutes a view PDF will be cached before being refreshed. To prevent multiple PDF requests from overloading the server, the shortest interval you can set is one minute. There is no maximum value, but the server job enacting the caching action may expire before a long cache period is reached.
orientation (Optional) The orientation of the pages in the .pdf file produced. The value can be Portrait or Landscape. If this parameter is not present the page orientation will default to Portrait.
page-type

(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be: A3, A4, A5, B5, Executive, Folio, Ledger, Legal, Letter, Note, Quarto, or Tabloid.

If this parameter is not present the page type will default to Legal.

#### Request Body None #### Response Code 200 #### Response Body This method has no response body. The response is in the form of a downloaded `.pdf` file. The response header content will have `Content-Type:application/pdf`. #### cURL Example ``` curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/views/2474164d-8d37-4a4c-abc7-c2070fd25fd5/pdf/maxAge=60" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" ``` The response is a file that contains the view, whose data is no older than 60 minutes, saved as a pdf. #### Errors
HTTP statuserror CodeConditionDetails
400400080Bad RequestThe view ID in the URI doesn't correspond to a view available on the specified site.
401401002UnauthorizedThe authentication token provided in the request header was invalid or has expired.
403403032Read forbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query View Preview Image Returns the thumbnail image for the specified view. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/views/view-id/previewImage #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the view.
workbook-idThe ID of the workbook that contains the view to return a thumbnail image for.
view-idThe ID of the view to return a thumbnail image for.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can query workbook views only if they have Read (view) permission for the views (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:views:download ``` 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 The view's preview image in PNG format (MIME media type `image/png`). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA non-administrator user attempted to query a view preview image, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404011View not foundThe view ID in the URI doesn't correspond to an existing view in the specified workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Get Workbook Returns information about the specified workbook, including information about views and tags. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. **Version:** Available in API 2.0 and later. Data acceleration and data freshness policy setting update are added in API 3.22 (Tableau Cloud February 2024 / Server 2024.2)._[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** You can get workbok details if you are a user with implicit or explicit Read permissions for the workbook, or are a Tableau Administrator.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:content: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). #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id GET /api/api-version/sites/site-id/workbooks/content-url?key=contentUrl #### URI Parameter Values
api-version The version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-id The ID of the site that contains the workbook.
content-url

The permanent name of the site to sign in to. The content URL appears in the URL path of Tableau content in your browser address bar after the Tableau Server URL.

mySite is the content URL in the following example:

http://<server or cloud URL>/#/site/mySite/explore

#### Request Body None #### Response Code 200 #### cURL Request Example `curl -L -X GET "http://qa-near/api/3.17/sites/a946d998-2ead-4894-bb50-1054a91dcab3/workbooks/simple-highlight?key=contentUrl" -H "X-Tableau-Auth:HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3"` #### Response Body Copy ```                                                                                                                                                                                  ``` Copy ``` {  "workbook": {    "id": "0828bd63-dea5-454f-8f54-30f9a92760ff",    "name": "WB_Election_live",    "description": "",    "contentUrl": "WB_Election_live",    "webpageUrl": "http://MyServer/#/workbooks/4",    "showTabs": "false",    "size": "1",    "createdAt": "2024-01-25T23:42:57Z",    "updatedAt": "2024-01-25T23:42:57Z",    "encryptExtracts": "false",    "defaultViewId": "10f6d099-fe90-41a1-a77b-1512b818d23c",    "project": {      "id": "7eb51f54-bbca-11ee-9262-638afb01250c",      "name": "Default"    },    "location": {      "id": "7eb51f54-bbca-11ee-9262-638afb01250c",      "type": "Project",      "name": "Default"    },    "owner": {      "id": "09d032b6-d17d-444c-afbe-d71c22f7ee31",      "name": "test"    },    "tags": [],    "views": {      "view": {        "id": "fcc36499-fd2d-42af-8e2c-29d1c7893edd",        "name": "Votes",        "contentUrl": "WB_Election_live/sheets/Votes",        "createdAt": "2024-01-25T23:42:57Z",        "updatedAt": "2024-01-25T23:42:57Z",        "viewUrlName": "Votes",        "tags": [],        "dataAccelerationConfig": {          "accelerationEnabled": "true",          "accelerationStatus": "Pending"        }      }    },    "dataFreshnessPolicy": {      "option": "FreshAt",      "freshAtSchedule": {        "time": "08:15:00",        "frequency": "Week",        "timezone": "America/Los_Angeles",        "intervals": {          "interval": {            "weekDay": "MONDAY"          }        }      }    }  }} ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Errors
HTTP statuserror CodeConditionDetails
403403018Read forbiddenA non-administrator user attempted to query the workbook, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook LUID or contentUrl in the URI doesn't correspond to an existing workbook, or the querystring ?key=contentUrl is not capitalized correctly.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Query Workbooks for Site Returns the workbooks on a site. If the user is not an administrator, the method returns just the workbooks that the user has permissions to view. #### URI GET /api/api-version/sites/site-id/workbooks GET /api/api-version/sites/site-id/workbooks?filter=filter-expression GET /api/api-version/sites/site-id/workbooks?sort=sort-expression GET /api/api-version/sites/site-id/workbooks?pageSize=page-size&pageNumber=page-number GET /api/api-version/sites/site-id/workbooks?fields=field-expression #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbooks.
filter-expression(Optional) An expression that lets you specify a subset of workbooks to return. You can filter on predefined fields such as name, tags, and createdAt. You can include multiple filter expressions. For more information, see Filtering and Sorting.
sort-expression(Optional) An expression that lets you specify the order in which workbook information is returned. If you do not specify a sort expression, the sort order of the information that's returned is undefined. For more information, see Filtering and Sorting.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
field-expression(Optional) An expression that lets you specify the set of available fields to return. You can qualify the return values based upon predefined keywords such as _all_ or _default_, and you can specify individual fields for the workbooks or other supported resources. You can include multiple field expressions in a request. For more information, see Using Fields in the REST API.
**Note**: The filter and sort parameters can be combined with each other and with paging parameters and fields parameters using an ampersand (**`&`**). #### Request Body None #### Permissions Users who are not server administrators or site administrators can get workbooks that they have Read (view) permissions for (either explicitly or implicitly). #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:content: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 ``` ... additional tags ... ... additional workbooks ... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Response Attribute Values
accelerationEnabled true if data acceleration is enabled, otherwise false. For more information, see Data Acceleration (Retired). Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.
accelerationStatus The status can be:
  • accelerated: The acceleration job succeeded.
  • failed: The acceleration job failed.
  • inProgress: The acceleration job is running.
  • notUseful: The acceleration job completed but none of the queries in the workbook were supported for acceleration.
  • waiting: The workbook is enabled for acceleration but no background job has been submitted yet to accelerate it.
Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.
#### Version Version 2.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size exceeds upper limitThe page size parameter exceeds the system-wide upper limit of 1000.
403403018Read forbiddenA non-administrator user attempted to query workbooks for the site, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example: Get workbooks without filter `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ...more workbooks ... ``` #### Example: Get workbooks with date/time filter The following example includes a filter to return the workbooks that were updated on 1 May 2016 at 6:00 AM or later and specifies that the results should be sorted by the workbook name. `curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks?filter=updatedAt:gte:2016-05-01T06:00:00Z&sort=name:asc" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` ## Query Workbooks for User Returns the workbooks that the specified user owns in addition to those that the user has Read (view) permissions for. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/users/user-id/workbooks GET /api/api-version/sites/site-id/users/user-id/workbooks?ownedBy=isOwner&pageSize=page-size&pageNumber=page-number #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the user.
user-idThe ID of the user to get workbooks for.
isOwner(Optional) true to return only workbooks that the specified user owns, or false to return all workbooks that the specified user has at least read access to. The default is false.
page-size(Optional) The number of items to return in one response. The minimum is 1. The maximum is 1000. The default is 100. For more information, see Paginating Results.
page-number(Optional) The offset for paging. The default is 1. For more information, see Paginating Results.
#### Request Body None #### Permissions All users can call this method, but the results of the call depend on the user's permissions. Server and site administrators see all workbooks for the specified user. If the isOwner parameter is true, users who are not server or site administrators see the workbooks that they own on the site. If isOwner parameter is false, users who are not server administrators see the workbooks that they have Read (view) permissions for. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` ... additional tags ... ... additional workbooks ... ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400006Invalid page numberThe page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.
400400007Invalid page sizeThe page size parameter is not an integer, or is less than one.
403403014Page size exceeds upper limitThe page size parameter exceeds the system-wide upper limit of 1000.
403403018Read forbiddenA non-administrator user attempted to query workbooks for the user, but the caller doesn't have Read permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002User not foundThe user ID in the URI doesn't correspond to an existing user.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/users/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d/workbooks" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` ## Query Workbook Connections Returns a list of data connections for the specific workbook. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/connections #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to return connection information about.
#### Request Body None #### Permissions Tableau Server users who are not server administrators or site administrators can query a workbook only if they have Read (view) permission for the workbook (either explicitly or implicitly). `queryTaggingEnabled` is returned only for administrator users. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:content: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 ``` HTTP statuserror CodeConditionDetails403403021Read forbiddenA user who is not a server administrator user attempted to query the workbook connections, but the caller doesn't have Read permission.404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.405405000Invalid request methodRequest type was not GET. For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** ``` ``` **Note:** This method returns connection information, including connection type. In some cases, the name of the connection type might not map directly to a name of a connection type that you're familiar with. In those cases, see [Mapping ConnectionType Names](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_connectiontype.htm) for more information. ## Query Workbook Preview Image Returns the thumbnail image as a PNG file for the specified workbook. Usually the image that is returned is for the first sheet in the workbook. **Note**: After you create a resource, the server updates its search index. If you make a query immediately to see a new resource, the query results might not be up to date. #### URI GET /api/api-version/sites/site-id/workbooks/workbook-id/previewImage #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to return the thumbnail image for.
#### Request Body None #### Permissions Users who are not server administrators or site administrators can query a workbook preview image only if they have Read (view) permission for the workbook (either explicitly or implicitly) and also have Read (view) permission for the view that is used as the preview image. If the user doesn't have Read permissions to that view, the preview image for another view might be used. If the user doesn't have Read permissions to any views in the workbook, the user is not allowed to query a workbook query image. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:workbooks:download ``` 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 The workbook's preview image in PNG format (MIME media type `image/png`). #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
403403004Read forbiddenA non-administrator user attempted to query the workbook preview image, but the caller doesn't have Read permission for the workbook.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/previewImage" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" > workbook-preview.png` The response is a graphics file in PNG format. ## Set Custom View as Default for Users Sets the specified custom for as the default view for up to 100 specified users. Success or failure for each user is reported in the response body. **Version:** Available in API 3.21 (Tableau Cloud October 2023 / Server 2023.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:** Only Tableau administrators can set a custom view as the default view for users. _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:views: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). #### URI POST /api/api-version/sites/site-luid/customviews/custom-view-luid/default/users #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body Copy ```          ``` Copy ``` {  "users": {    "user": {      "id": "5c9a81df-7ec0-4752-a057-82cd2bb22c44"    }  }} ``` #### cURL Request Example ``` curl --location 'https://qa-near.tsi.lan/api/3.21/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/3321cb71-6606-4d78-8a0c-e69a7e7d2261/default/users' --header 'Accept: application/xml' --header 'X-Tableau-Auth: X4fzaa75SJqSiCjq6EI9ow|uTR4NKykLGob3VustCzOq1htrchwo0ga|a946d998-2ead-4894-bb50-1054a91dcab3' --header 'Content-Type: text/plain' --data '' ``` #### Response Code 200 #### Response Body Copy ```                    ``` Copy ``` {  "customViewAsUserDefaultResults": {    "customViewAsUserDefaultViewResult": {      "success": "true",      "user": {        "id": "5c9a81df-7ec0-4752-a057-82cd2bb22c44"      }    }  }} ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions.
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Unhide a Recommendation for a View - Deprecated in API 3.19 Unhides a view from being recommended by the server by removing it from the list of views that are dimissed for a user. > [!WARNING] > > Starting in API version 3.19 (Tableau Server 2023.1 / Cloud March 2023), this method is deprecated, will no longer be supported, and may be retired in future releases. If the unhidden view meets the criteria for being recommended, then it will be displayed on the server Home or Recommendation pages. #### URI DELETE /api/api-version/sites/site-id/recommendations/dismissals/?type=view&id=view-luid #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the group.
view-luidThe LUID of the view to be removed from the list of views hidden from recommendation for a user.
#### Request Body None #### Permissions This method can only be called by server administrators and site administrators. #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:recommendation_dismissals: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 #### Version Version 1.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404029Content not foundThe content ID in the URI doesn't correspond to an existing content of the requested type.
404404035Recommendation not foundA hidden recommendation for the given content ID was not found.
405405000Invalid request methodRequest type was not DELETE.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/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/dismissals/?type=view&id=1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"` **Example response:** No response body. Response code is `204`. ## Update Custom View Changes the owner or name of an existing custom view. **Version:** Available in API 3.18 (Tableau Cloud December 2022 / Server 2023.1). _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_ **License:** No additional license required. **Permissions:** Tableau administrators can update the owner and name of a custom view. Other users can update those attributes of any custom view that they own.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope**: tableau:views:update - Scope added in API 3.18 (Tableau Cloud December 2022 / Tableau Server 2023.1). - 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 PUT /api/api-version/sites/site-luid/customviews/custom-view-luid #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
custom-view-luidThe LUID for the custom view being updated.
#### Request Body ``` ``` ``` { "customView": { "name": "new-name", "owner": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a" } } } ``` #### Request Attributes
customView name(Optional) string The new name of the custom view that replaces the existing one.
owner id(Optional) LUID The LUID of the new owner of custom view that replaces the existing one.
#### cURL Request Example `curl -L -X PUT "https://qa-near/api/3.18/sites/a946d998-2ead-4894-bb50-1054a91dcab3/customviews/37d015c6-bc28-4c88-989c-72c0a171f7aa" -H "X-Tableau-Auth: njR9EGn0QSCpbDrUOh0IKg"wamRRyVFFUHTVwFL6OWEyOggxCwWYXuq"a946d998-2ead-4894-bb50-1054a91dcab3" -H "Content-Type: application/xml" --data-raw " "` #### Response Code 200 #### Response Body ``` ``` ``` { "customView": { "id": "37d015c6-bc28-4c88-989c-72c0a171f7aa", "name": "New name 3_2514e471-95ed-4d22-92c0-da648c23891b", "createdAt": "2016-02-03T23:35:09Z", "updatedAt": "2022-10-21T04:41:27Z", "lastAccessedAt": "2022-10-21T04:43:55Z", "shared": "false", "view": { "id": "8e33ff19-a7a4-4aa5-9dd8-a171e2b9c29f", "name": "circle" }, "workbook": { "id": "2fbe87c9-a7d8-45bf-b2b3-877a26ec9af5", "name": "marks and viz types 2" }, "owner": { "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a", "name": "workgroupuser" } } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401002Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403162Unauthorized AccessThe user does not have adminstrator permissions or Read permissions for the custom view..
404404008Resource Not FoundA custom view with the requested LUID could not be found.
405405000Invalid Request MethodRequest type was not GET.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Workbook Modifies an existing workbook, allowing you to change the owner or project that the workbook belongs to and whether the workbook shows views in tabs. Updated workbooks can optionally be marked to appear in the recently viewed list. You can manage [Data Freshness Policy](https://help.tableau.com/current/online/en-us/data_freshness_policy.htm) for a workbook, and enable [View Acceleration](https://help.tableau.com/current/online/en-us/data_acceleration.htm) for views in a workbook. **Version:** Available in API 2.0 (Tableau Cloud and later). Data acceleration and data freshness policy setting update are added in API 3.22 (Tableau Cloud February 2024 / Server 2024.2). _[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 who are Tableau administrators can change a workbook's owner. Users who are not server administrators can update a workbook only if they have **Write** permission for the workbook and for the project. Tableau server and site administrators can change the `dataAccelerationConfig accelerationEnable` setting for a workbook. Workbook owners can change the setting if the [site is configured to enable acceleration by owners](https://help.tableau.com/current/server/en-us/data_acceleration.htm). Both administrators and workbook owners can change dataFreshnessPolicy settings.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:workbooks: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). #### URI PUT /api/api-version/sites/site-id/workbooks/workbook-id PUT /api/api-version/sites/site-id/workbooks/workbook-id?includeViewAccelerationStatus=include-view-acceleration-status-flag #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to update.
include-view-acceleration-status-flagQuery parameter is optional. Boolean: If includeViewAccelerationStatus=true then the list of views and the acceleration status of each view will be returned.
#### Request Body Copy ```                                                                                                                ``` Copy ``` {  "workbook": {    "name": "Finance",    "showTabs": "false",    "recentlyViewed": "false",    "encryptExtracts": "false",    "description": "The finance workbook.",    "project": {      "id": "3d6e8174-8cdf-43ec-94dd-0a1fd3662e47"    },    "owner": {      "id": "ca6b9ee-1d85-465b-abc2-f200ae2443b9"    },    "views": {      "view": {        "id": "22e48174-8cdf-43ec-94dd-0a1fd366gh78"      }    },    "dataAccelerationConfig": {      "accelerationEnabled": "false",      "accelerateNow": "false"    },    "dataFreshnessPolicy": {      "option": "FreshAt",      "freshAtSchedule": {        "frequency": "weekly",        "time": "08:15:00",        "timezone": "America/Los_Angeles",        "intervals": {          "interval": {            "weekDay": "Monday"          }        }      }    }  }} ``` Notes on [Data Freshness Policy](https://help.tableau.com/current/online/en-us/data_freshness_policy.htm) and [View Acceleration](https://help.tableau.com/current/server/en-us/data_acceleration.htm): - Data Freshness Policy and View Acceleration are independent features. - If a policy is set without view acceleration for a workbook, then only [query caching](https://help.tableau.com/current/online/en-us/data_freshness_policy.htm#understand-data-freshness-for-query-caches) for the workbook will be affected by the policy. - If a workbook has a data freshness policy configured, then updating the workbook to turn on view acceleration will not impact the policy unless the update explicitly changes that. - If a workbook has accelerated views enabled, but does not have a data freshness policy explicitly set for it, data will be refreshed on the site default cadence of every 12 hours. - On Tableau Cloud, view acceleration is limited to 12 refreshes per day, per view. If data freshness policy for a workbook is set to refresh data more frequently than every 2 hours, refreshes for a view after the 12th one will not trigger the computation that accelerates that view until the first refresh of the next day. - The preceding example shows the `freshAt` data freshness policy option. The `freshEvery` option is illustrated in the following Attribute Values section. #### Attribute Values
workbook name (Optional) New name for the workbook being updated.
workbook showTabs (Optional) Specify true to have the updated workbook show views in tabs; otherwise, false. The default is false.
workbook recentlyViewed (Optional) Set this value to true to have the updated workbook show in the site's recently viewed list. The default is false. Once the flag is set to true, setting it to false will have no effect. When enough views or workbooks have populated the recently viewed list, the oldest item will fall off the list and its recently-viewed-flag will revert to false.
workbook encryptExtracts (Optional) true to encrypt the extracts or false to not encrypt extracts. For more information, see Extract and Encryption Methods.
workbook description (Optional) Starting in API 3.20, the new description for the updated workbook.
project id (Optional) The LUID of a project to assign the workbook to.
owner id (Optional) The LUID of a user to assign the workbook to as owner.
dataAccelerationConfig accelerationEnable (Optional) Boolean: If true, accelerate the specified view(s). Default is false. Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.
dataAccelerationConfig accelerateNow

(Optional) Boolean: If true, make view acceleration available as soon as possible. Default is false. Tableau's View Acceleration feature and Data Acceleration-related APIs were retired in Tableau Cloud in June 2026 and in Tableau Server version 2026.2.

Note, the view object in the response (visible by using the ?includeViewAccelerationStatus=true query parameter) contains the accelerationStatus attribute, which can have the following values:

  • Off - Accelerate now is not enabled.
  • Pending - Accelerate now is enabled, but backgrounder processes are still running to make the acceleration available.
  • On Acceleration is enabled.
view id (Optional) LUID: The LUID of a view being accelerated. If no views are listed in the request then all views in the workbook will be accelerated.
dataFreshnessPolicy option (Optional) Enum: The data freshness policy mode for scheduling refreshment of the workbook data specified in the request. A valid value is one of:
  • SiteDefault - Use the default scheduling policy: refresh the data every 12 hours).
  • AlwaysLive - Refresh as the data changes.
  • FreshAt - Define a detailed cadence for refreshing the data.
  • FreshEvery- Define an interval between data refreshes.
freshAtSchedule frequency (Optional) Enum: The interval of workbook data refresh. A valid value is one of:
  • Day
  • Week
  • Month
freshAtSchedule time (Optional) Time in HH:MM:SS: The time of day that workbook data will be refreshed, in increment of 15 minutes. Minutes must end in 00, 15, 30, or 45. for instance time="10:30:00".
freshAtSchedule timeZone (Optional) Timezone string in IANA format: The timezone of the fresh at schedule time. For instance, timezone="America/Los_Angeles". If no timezone is provided, then the local timezone of the Tableau server is used."
freshAtSchedule intervals interval A value that specifies the interval between refreshes of view acceleration data. The value you specify here depends on the value specified in freshAtSchedule frequency.

Day

If the schedule frequency is Daily, no interval is specified. Any information specified in the <intervals> element is ignored.

Week

The interval expression is weekDay="weekday", where weekday is Sunday, Monday, Tuesday, Thursday, Friday, or specify multiple <interval> elements to indicate that scheduled jobs should run on multiple days during the week.

Month

The interval expression is monthDay="day", where day is either the day of the month (1, 2, etc.) or LastDay.

freshEverySchedule frequency (Optional) Enum: The time unit used for the cadence of view acceleration data refreshes. The count of the specified unit that occurs between refreshes is determined by freshEverySchedule value. A valid value is one of:
  • Minutes
  • Hours
  • Days
  • Weeks
freshEverySchedule value (Optional) Integer: The quantity of frequency units between view acceleration data refreshes. For instance, to specify a refresh every 4 hours, the dataFreshnessPolicy would look like:
XML JSON
Copy
<dataFreshnessPolicy option="FreshEvery">
  <freshEverySchedule 
  frequency="hours" 
  value="4" />
  </dataFreshnessPolicy>
Copy
"dataFreshnessPolicy": {
  "option": "FreshEvery",
  "freshEverySchedule": {
  "frequency": "hours",
  "value": 4"
  }
}
With the exception of `dataFreshnessPolicy options`, any combination of the elements inside the element is valid. Only the attributes and child elements that are included result in updates to the data source. If no attributes or nested elements are included, no update is made. The `dataFreshnessPolicy option` can only be one of listed options, and the elements of a specified option are required for that option to be updated. If the element is included, the id attribute must be included; other attributes of the element are ignored. If the element is included, the id attribute must be included; other attributes of the element are ignored. #### cURL Example `curl --location --request PUT "https://myServer/api/3.22/sites/d76ee955-ccc7-4333-ab3b-25ad2f8b1aa8/workbooks/c75aaa17-727f-48f8-80d1-1e66c30497c5" \ --header "Content-Type: application/xml" \ --header "X-Tableau-Auth: vZg2soQ2TuiULoJgZ60h_A|JIfSgwAzBQ2QfSVS1PSsHvD9uynKLzWz|d76ee955-ccc7-4333-ab3b-25ad2f8b1aa8" \ --header "Cookie: AWSALBAPP-0=AAAAAAAAAADyQT+tw75WkCZpVc/icDu7+3QFC+j4W5jpddfTbd8p8kxx5cx5slxbi2jSYvaAa0RBfxXvQ3tTjfZGHnt3ORMP5y79bEWR/lBKRMbJpRVYfI4jV32tGCld6NPtpgwYogFxZBo=; AWSALBAPP-1=_remove_; AWSALBAPP-2=_remove_; AWSALBAPP-3=_remove_; hid=uw2a-hap01" \ --data " "` #### Response Code 200 #### Response Body Copy ```                                                                                                                                      ``` Copy ``` {  "workbook": {    "name": "Finance",    "showTabs": "false",    "recentlyViewed": "false",    "encryptExtracts": "false",    "description": "The finance workbook.",    "project": {      "id": "3d6e8174-8cdf-43ec-94dd-0a1fd3662e47"    },    "owner": {      "id": "ca6b9ee-1d85-465b-abc2-f200ae2443b9"    },    "views": {      "view": {        "id": "22e48174-8cdf-43ec-94dd-0a1fd366gh78"      }    },    "dataAccelerationConfig": {      "accelerationEnabled": "false",      "accelerateNow": "false"    },    "dataFreshnessPolicy": {      "option": "FreshAt",      "freshAtSchedule": {        "frequency": "weekly",        "time": "08:15:00",        "timezone": "America/Los_Angeles",        "intervals": {          "interval": {            "day": "Monday"          }        }      }    }  }} ``` The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ). A response for the `dataFreshnessPolicy` segment with the `FreshEvery` option configured for weekly refreshes, would look like:
XML JSON
Copy
<dataFreshnessPolicy option="FreshEvery">
  <freshEverySchedule 
  frequency="Weeks" 
  value="1" />
  </dataFreshnessPolicy>
Copy
"dataFreshnessPolicy": {
  "option": "FreshEvery",
  "freshEverySchedule": {
  "frequency": "Weeks",
  "value": 1"
  }
}
n
#### Version Version 2.0 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
400400036Bad requestView acceleration is enabled, but the workbook loads too quickly to make use of it, or the view has never been accessed by a user.
403403025Project update forbiddenA non-administrator user tried to change the workbook project, but the caller doesn't have Write permission for the target project.
403403027Owner update forbiddenA non-administrator user tried to change the workbook owner.
403403027Update forbiddenA non-administrator user tried to change the workbook, but the caller doesn't have Write permission for the workbook.
403403004Update forbiddenA non-administrative user tried to update the workbook, but does not have permissions to publish the updated workbook to the project.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404002Owner not foundThe owner ID in the request body doesn't correspond to an existing user.
404404005Project not foundThe project ID in the URI doesn't match the project ID provided in the request body.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Workbook Connection Updates the server address, port, authentication type, username, or password for the specified workbook connection. If the workbook contains multiple connections to the same data source type, all the connections are updated. To update specific connections in a workbook containing multiple connections, see [Update Data Source Connections](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connections). **Version:**Available in API 2.0 (Tableau Cloud and later). **License:** No additional license required. **Permissions:** Users who are not server administrators or site administrators can update permissions only for a workbook for which they have the **Write** capability (either explicitly or implicitly). Only users with administrator permissions can enable or disable query tagging.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **Access Scope**: `tableau:workbooks:update` - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/workbooks/workbook-id/connections/connection-id #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to update.
connection-idThe ID of the connection to update.
#### Request Body ``` ``` ``` { "connection": { "serverAddress": "server-address", "serverPort": "port", "authenticationType": "auth-type", "userName": "connection-username", "password": "connection-password", "embedPassword": "embed-password", "queryTaggingEnabled": "query-tagging-enabled" } } ``` #### Attribute Values Any combination of the attributes inside the element is valid. If no attributes are included, no update is made.
serverAddress The new server for the connection.
port The new port for the connection.
authenticationType Added in version 3.27.

*The new authentication type for the connection.

Standard values:

  • auth-user-pass: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a data source or workbook that is currently using the target authentication type, you can query for it using the REST API methods Query Datasource Connections or Query Workbook Connections, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a workbook or data source which is available locally. Look for the value of the authentication attribute of the connection.

userName The new username for the connection.
password The new password for the connection.
embedPassword True to embed the password; otherwise, False.
queryTaggingEnabled

[!WARNING]

Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the queryTaggingEnabled attribute is deprecated, will no longer be supported, and may be retired in future releases.

Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by setting native_api.UserInfoInGeneratedSQLEnabled to true.

For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) or earlier: If true, query tagging is enabled. If false, query tagging is disabled. The default is false.

For more information on query tagging, see Understand Workbook Impact on Your Database Using Query Tagging.

#### cURL Request Example ``` curl --location --request PUT "/api/api-version/sites/site-id/workbooks/workbook-id/connections/connection-id" \ --header "Content-Type: application/xml" \ --header "X-Tableau-Auth;" \ --data "{ 'connection': { 'serverAddress': 'server-address', 'serverPort': 'port', 'authenticationType': 'auth-type', 'userName': 'connection-username', 'password': 'connection-password', 'embedPassword': 'embed-password', 'queryTaggingEnabled': 'query-tagging-enabled' } }" ``` #### Response Code 200 #### Response Body ``` ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403029Update forbiddenA non-administrator user tried to update the workbook connection, but the caller doesn't have Write permission.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404006Workbook not foundThe workbook ID in the URI doesn't correspond to an existing workbook.
404404020Connection not foundThe connection ID in the URI doesn't correspond to an existing connection.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Workbook Connections Updates the server address, port, authentication type, username, or password for one or more connections in a data source. To update all connections in a given data source with the same connection information, see [Update Workbook Connection](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection). **Version**: Available in API 3.27 and later. **License**: No additional license required. **Permissions**: Users who are server administrators or site administrators can change the connection for a data source or enable [query tagging](https://help.tableau.com/current/pro/desktop/en-us/performance_tips.htm). Users who are not server administrators can only update a data source. If they have Write (save) permission for the data source and if they have write permission for the project. **Access Scope**: `tableau:datasources:update` - Access scope introduced in API 3.16 (Tableau Cloud June 2022 / Server 2022.3) For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/workbooks/workbook-id/connections #### Path Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID of the site that contains the data source.
workbook-idThe ID of the workbook to update.
#### Request Body ``` Luid1 Luid2 ``` ``` { "connectionLuids": [ "Luid1", "Luid2" ], "connection": { "serverAddress": "newAddress", "serverPort": "newPort", "authenticationType": "new Auth Type", "userName": "Jane Doe", "password": "xxxxxx", "embedPassword": "false", "queryTaggingEnabled": "false" } } ``` #### Request Attributes Any combination of the attributes inside the element is valid. If no attributes are included, no update is made.
connectionLuids An array of connection LUIDs in the workbook that you are updating.
serverAddress The new server for the connection.
serverPort The new port for the connection
authenticationType

*The new authentication type for the connection.

Standard values:

  • auth-user-pass: username and password

  • oauth

  • auth-keypair: keypair authentication

Connector-specific values:

  • sqlserver: SQL Server username and password

  • Azure AD Password

  • AD Service Principal

  • username-password: Several connectors use this value. For example, SAP HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.

If you are unsure of the value for authenticationType for the target connection, there are two ways to determine the value. First, if you have a data source or workbook that is currently using the target authentication type, you can query for it using the REST API methods Query Datasource Connections or Query Workbook Connections, which returns the authentication type string in the response.

Alternatively, you can inspect the <connection> element in the XML of a workbook or data source which is available locally. Look for the value of the authentication attribute of the connection.

userName The new username for the connection.
password The new password for the connection.
embedPassword True to embed the password; otherwise, False.
queryTaggingEnabled

[!WARNING]

Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the queryTaggingEnabled attribute is deprecated, will no longer be supported, and may be retired in future releases.

Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by setting native_api.UserInfoInGeneratedSQLEnabled to true.

For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If true, query tagging is enabled. If false, query tagging is disabled. The default is false.

For more information on query tagging, see Understand Workbook Impact on Your Database Using Query Tagging.

#### cURL Request Example ``` curl --location --request PUT "/api/api-version/sites/site-id/workbooks/workbook-id/connections" \ --header "Content-Type: application/xml" \ --header "X-Tableau-Auth;" \ --data "{ 'connectionLuids': [ 'Luid1', 'Luid2' ], 'connection': { 'serverAddress': 'newAddress', 'serverPort': 'newPort', 'authenticationType': 'new Auth Type', 'userName': 'Jane Doe', 'password': 'xxxxxx', 'embedPassword': 'false', 'queryTaggingEnabled': 'false' } }" ``` #### Access Scope Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). ``` tableau:workbooks: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 ``` ``` ``` { "connection": { "id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd", "serverAddress": "database.example.com", "serverPort": "12345", "authenticationType": "new Auth Type", "userName": "jajohnson", "queryTaggingEnabled": "false" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad requestThe content of the request body is missing or incomplete, or contains malformed XML.
403403023Update forbiddenA non-administrator user tried to update a data source, but the caller doesn't have Write permission.
403403027Owner update forbiddenA non-administrator user tried to change connection information, but the caller doesn't have Write permission.
403403062Unsupported operationThe data source contains multiple connections, but the URI did not include /connections/connection-id to indicate which connection should be updated.
404404000Site not foundThe site ID in the URI doesn't correspond to an existing site.
404404004Data source not foundThe data source ID in the URI doesn't correspond to an existing data source.
405405000Invalid request methodRequest type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Update Workbook Now Refreshes the specified workbook. This method refreshes the specified workbook, with no need to associate the workbook refresh with a scheduled task. This method is the equivalent of selecting a workbook using the Tableau Server UI, and then selecting **Refresh Extracts** from the menu (also known as a "manual refresh"). **Note:** This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm). #### URI POST /api/api-version/sites/site-id/workbooks/workbook-id/refresh #### Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook to refresh.
#### Request Body As of version 3.28, you can specify an incremental refresh on extracts by updating the request body as follows: ``` ``` #### Permissions Tableau Server users who are not server administrators or site administrators can only refresh workbooks if they own the workbook, or if they are the project leader for the project. #### Required scope for JWT authorization Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17). ``` tableau:tasks:run ``` 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 202 #### Response Body ``` ``` #### Version Version 2.8 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm). #### Errors
HTTP statuserror CodeConditionDetails
400400000Bad RequestThe content of the request body is missing or incomplete, or contains malformed XML.
401401000Unauthorized AccessThe authentication token provided in the request header was invalid or has expired.
403403032Update ForbiddenA non-administrator user attempted to query workbook views, but the caller doesn't have sufficient permissions.
403403004Update forbiddenA non-administrative user tried to update the workbook, but does not have permissions to publish the updated workbook to the project.
404404000Site not foundThe site ID in the URI is unknown.
404404006Resource not foundThe workbook ID in the URI is unknown.
405405000Invalid request methodRequest type was not POST.
409409093Operation already in QueueThe extract refresh job is already in the queue.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Example `curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/workbooks/5de9cc53-b17d-45af-804d-49144b39f29f/refresh" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -H "Content-Type: application/xml" –d @empty-tsrequest.xml"` **Content of empty-tsRequest.xml:** ``` ``` **Example response:** ``` ``` ## Update Workbook Thumbnail Images Updates a workbook's thumbnail images. The method adds a task to the backgrounder queue. Depending upon the length of the queue, the task might not run immediately. The method returns information about the backgrounder job responsible for running the task, including the `job id` that can be used with the [Query Job](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref.htm#query_job) method. **Version**: Available in API 3.27 (Tableau Cloud December 2025 / Server 2025.3) and later. **License**: No additional license required. **Permissions**: Server administrators, site administrators, or workbook owner **Access Scope**: `tableau:tasks:run` - For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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 PUT /api/api-version/sites/site-id/workbooks/workbook-id/refreshThumbnails #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site that contains the workbook.
workbook-idThe ID of the workbook.
#### Request Body None #### cURL Request Example ``` curl -X PUT "https://MY-SERVER/api/3.27/sites/12ab34cd-56ef-78ab-90cd-12ef34ab56cd/workbooks/08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6/refreshThumbnails" -H "X-Tableau-Auth: a1B2c3D4e5F6g7H8i9J0kL|a1B2c3D4e5F6g7H8i9J0kL1m2N3o4P5q|12345678-90ab-4cde-8f01-234567890abc" ``` #### Response Code 202 #### Response Body ``` ``` ``` { "job": { "thumbnailsRefreshJob": { "workbook": { "id": "workbook-id", "name": "workbook-name" } }, "id": "job-id", "mode": "Asynchronous", "type": "RefreshThumbnails", "createdAt": "date-time" } } ``` #### Errors
HTTP statuserror CodeConditionDetails
400400000Generic errorAn unknown error occurred. The content of the request body may be missing or incomplete, or may contain malformed XML.
403403179Permissions errorThe user calling the method isn't a site administrator, server administrator, or owner of the workbook.
404404006Workbook not foundThe workbook LUID is invalid, or the user doesn't have permission to read the workbook.
500500000Internal server errorThe server was unable to create the job.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Upload Workbook Encrypted Keychain Uploads the encrypted version of the embedded credentials. This method will only work if the credentials are encrypted with the latest public key used to link the source Tableau Server with the destination Tableau Cloud or Tableau Server site. Before you use this method, you must create public and private keys for resources with embedded credentials. For more information, see [Migrate Workbooks and Data Sources with Embedded Credentials](https://help.tableau.com/current/server/en-us/cmt-migration_embedded_credentials.htm). **Version:** Available in API 3.23 (Tableau Cloud June 2024/ Tableau Server 2024.2) 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 Tableau Cloud and Tableau Server admins.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_ **JWT Access Scope:** tableau:embedded\_credentials:upload - Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3). - 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 PUT /api/api-version/sites/site-luid/workbooks/workbook-luid/applyKeychain #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-luidThe LUID for the site.
workbook-luidThe LUID of the workbook to download the encrypted keychain from.
#### Request Body ``` BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ``` ``` { "associatedUserLuidMapping": [], "encryptedKeychainList": { "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=" } } ``` #### Request Attributes
associatedUserLuidMapping

(Required) The user IDs from the source site mapped to destination site user IDs.

encryptedKeychainList (Required) List of encrypted keychains from the source Tableau Server.
encryptedKeychain

(Required) Encrypted keychain from the source Tableau Server.

#### cURL Request Example ``` curl --location 'https://example.org/api/3.24/sites/7a2f773d-4a9f-496e-afc6-a60517cb1b86/workbooks/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/applykeychain' \ -X PUT \ --header 'Content-Type: application/xml' \ --header 'X-Tableau-Auth: nbQAstTxTHuBlcMlXZ3QKg|LXn5aiYcffck999kgpOPrQft5JkvRsYg|7a2f773d-4a9f-496e-afc6-a60517cb1b86' \ --data ' BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y= ' ``` #### Response Code 200 #### Response Body None. #### Errors
HTTP status error Code Condition Details
400 400000 Bad Request The content of the request body is missing or incomplete, or contains malformed XML.
401 401002 Unauthorized Access

The authentication token provided in the request header was invalid or has expired.

403 403054 Unauthorized Access A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.
404 404000 Site not found The site ID in the URI doesn't correspond to an existing site.
404 404006 Workbook not found The workbook ID in URI doesn't correspond to an existing workbook.
405 405000 Invalid request method Request type was not PUT.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). ## Validate Uploaded Workbook Validates a Tableau workbook (TWB) file that already exists in temporary storage on Tableau Cloud or Tableau Server. The TWB is validated against the TWB XSD schema and verifies that it can be loaded in Tableau. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Any authenticated user. **Access Scope**: `tableau:workbooks:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). Use this method to validate a TWB file that's already been stored using the file upload REST API ([Initiate File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload) and [Append to File Upload](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload)). Provide the upload session ID as a query parameter to validate the uploaded file. The validation performs both syntactic validation (verifying the TWB conforms to the TWB XSD schema) and semantic validation (verifying the content can be interpreted by Tableau). For more information about the officially supported TWB XSD schema, see the [tableau-document-schemas](https://github.com/tableau/tableau-document-schemas) repository on GitHub. #### URI POST /api/api-version/sites/site-id/workbooks/validateUploadedWorkbook?uploadSessionId=upload-session-id #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
upload-session-idThe upload session ID returned from the Initiate File Upload endpoint.
#### Request Header This method can only return a JSON-formatted response. Set the HTTP `Accept` request header appropriately: `Accept: application/json` #### Request Body None #### cURL Example ``` curl --location --request POST 'https://example.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/validateUploadedWorkbook?uploadSessionId=12345:12ab34cd56ef78ab90cd12ef34ab56cd-0:0' --header 'X-Tableau-Auth: aBcDeFgHiJkLmNoPqRsTuV|1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p|12345678-1234-5678-9abc-def012345678' --header 'Accept: application/json' ``` #### Response Code 200 #### Response Body A validation response that returns a 200 response code, zero validation errors, and zero or more validation warnings indicates successful validation. Warnings are advisory, and won't prevent a workbook from loading in Tableau. Details about the validation warnings are returned in the response body as JSON. ``` { "timestamp": "2026-06-10T14:32:18.456Z", "uploadId": "12345:12ab34cd56ef78ab90cd12ef34ab56cd-0:0", "warnings": [ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } ] } ``` #### Errors
HTTP statuserror CodeConditionDetails
400 Missing uploadSessionId parameterThe required uploadSessionId parameter isn't present in the querystring.
404 Resource not foundThe uploadSessionId parameter couldn't be found.
422 Unprocessable entityThe TWB validation task completed, but detected errors. See the response body for detailed validation information.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Validation errors A validation response that returns zero or more validation errors indicates failed validation. Unlike validation warnings, validation errors _will_ prevent a workbook from loading in Tableau. Details about the validation errors and warnings are returned in the response body as JSON. Example response: { "timestamp": "2026-06-10T14:32:18.456Z", "errors": \[ { "severity": "ERROR", "message": "Missing required closing tag for element", "line": 127, "column": 5, "elementName": "preferences" } \], "warnings": \[ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } \] } ## Validate Workbook Validates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Any authenticated user. **Access Scope**: `tableau:workbooks:read` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). This endpoint validates TWB file content without storing it on Tableau Cloud or Tableau Server. The validation performs both syntactic validation (verifying the TWB conforms to the TWB XSD schema) and semantic validation (verifying the content can be interpreted by Tableau). For more information about the officially supported TWB XSD schema, see the [tableau-document-schemas](https://github.com/tableau/tableau-document-schemas) repository on GitHub. #### URI POST /api/api-version/sites/site-id/workbooks/validateWorkbook #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Header This method can only return a JSON-formatted response. Set the HTTP `Accept` request header appropriately: `Accept: application/json` #### Request Body The request body is the TWB, sent as multipart form data. **Note:** The request body can't be a TWBX (packaged workbook). **Option 1: Use a code library or client that can assemble the request** - Most clients and code libraries can automatically create a multipart request that's appropriate for sending the TWB. In such cases, you only need to provide: - the `name` parameter and its value, `tableau_workbook` - the `filename` parameter and its value, the TWB filename - the TWB file **Option 2: Manually assemble the request** - Manually assembling the request has specific requirements: Set a `Content-Type` request header indicating the body is `multipart/form-data` or `multipart/mixed`, and define the `boundary` string. (A boundary string is a unique string that won't occur in the request body outside of its use as a delimiter.) Example: `Content-Type: multipart/form-data; boundary=12ab34cd-56ef-78ab-90cd-12ef34ab56cd` Build the request body - begin with the boundary string defined in the request header, prepended by "--" ; - add an inline `Content-Disposition` header that indicates `form-data` encoding, sets `name` equal to `tableau_workbook`, and sets `filename` equal to a string ending in `.twb`; - conclude with the boundary string defined in the request header, prepended by "--" and appended by "--". Example: (The placeholder `{workbook-xml}`represents the raw TWB XML.) ``` --12ab34cd-56ef-78ab-90cd-12ef34ab56cd Content-Disposition: form-data; name="tableau_workbook"; filename=superstore.twb {workbook-xml} --12ab34cd-56ef-78ab-90cd-12ef34ab56cd-- ``` For more information on sending the TWB using a multipart request, see the concepts covered in the "Uploading the file in parts" section of [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm#uploading-the-file-in-parts), or search the Internet using terms like **multipart** and **HTTP**. #### cURL Example (The placeholder `{path-to-twb}`represents the local path to the TWB file.) ``` curl --location 'https://example.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/validateWorkbook' --header 'X-Tableau-Auth: aBcDeFgHiJkLmNoPqRsTuV|1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p|12345678-1234-5678-9abc-def012345678' --header 'Accept: application/json' --form 'tableau_workbook=@"{path-to-twb}"' ``` #### Response Code 200 #### Response Body A validation response that returns a 200 response code, zero validation errors, and zero or more validation warnings indicates successful validation. Warnings are advisory, and won't prevent a workbook from loading in Tableau. Details about the validation warnings are returned in the response body as JSON. Example response: ``` { "timestamp": "2026-06-10T14:32:18.456Z", "warnings": [ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } ] } ``` #### Errors
HTTP statuserror CodeConditionDetails
400 Missing required parameterThe required tableau_workbook parameter isn't present in the request.
400 Invalid file type or contentThe file is not a valid TWB file or does not contain TWB XML content, or the "filename" parameter doesn't end with ".twb".
406406000No acceptable responseThis method can only return a JSON response. Use the Accept: application/json header.
422 Unprocessable entityThe TWB validation task completed, but detected errors. See the response body for detailed validation information.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Validation errors A validation response that returns zero or more validation errors indicates failed validation. Unlike validation warnings, validation errors _will_ prevent a workbook from loading in Tableau. Details about the validation errors and warnings are returned in the response body as JSON. Example response: { "timestamp": "2026-06-10T14:32:18.456Z", "errors": \[ { "severity": "ERROR", "message": "Missing required closing tag for element", "line": 127, "column": 5, "elementName": "preferences" } \], "warnings": \[ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } \] } ## Validate Workbook and Upload Validates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau. If validation succeeds, this method stores the TWB in a temporary location on Tableau Cloud or Tableau Server for further use. **Version**: Available in API 3.29 (Tableau Cloud June 2026 / Server 2026.2) and later. **License**: No additional license required. **Permissions**: Any authenticated user. **Access Scope**: `tableau:workbooks:create` For more information, see [Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm), [Permissions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm), [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 [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). The validation performs both syntactic validation (verifying the TWB conforms to the TWB XSD schema) and semantic validation (verifying the content can be interpreted by Tableau). For more information about the officially supported TWB XSD schema, see the [tableau-document-schemas](https://github.com/tableau/tableau-document-schemas) repository on GitHub. #### URI POST /api/api-version/sites/site-id/workbooks/validateWorkbookAndUpload #### URI Parameter Values
api-versionThe version of the API to use, such as 3.29. For more information, see REST API and Resource Versions.
site-idThe ID of the site.
#### Request Header This method can only return a JSON-formatted response. Set the HTTP `Accept` request header appropriately: `Accept: application/json` #### Request Body The request body is the TWB, sent as multipart form data. **Note:** The request body can't be a TWBX (packaged workbook). **Option 1: Use a code library or client that can assemble the request** - Most clients and code libraries can automatically create a multipart request that's appropriate for sending the TWB. In such cases, you only need to provide: - the `name` parameter and its value, `tableau_workbook` - the `filename` parameter and its value, the TWB filename - the TWB file **Option 2: Manually assemble the request** - Manually assembling the request has specific requirements: Set a `Content-Type` request header indicating the body is `multipart/form-data` or `multipart/mixed`, and define the `boundary` string. (A boundary string is a unique string that won't occur in the request body outside of its use as a delimiter.) Example: `Content-Type: multipart/form-data; boundary=12ab34cd-56ef-78ab-90cd-12ef34ab56cd` Build the request body - begin with the boundary string defined in the request header, prepended by "--" ; - add an inline `Content-Disposition` header that indicates `form-data` encoding, sets `name` equal to `tableau_workbook`, and sets `filename` equal to a string ending in `.twb`; - conclude with the boundary string defined in the request header, prepended by "--" and appended by "--". Example: (The placeholder `{workbook-xml}`represents the raw TWB XML.) ``` --12ab34cd-56ef-78ab-90cd-12ef34ab56cd Content-Disposition: form-data; name="tableau_workbook"; filename=superstore.twb {workbook-xml} --12ab34cd-56ef-78ab-90cd-12ef34ab56cd-- ``` For more information on sending the TWB using a multipart request, see the concepts covered in the "Uploading the file in parts" section of [Publishing Resources](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_publish.htm#uploading-the-file-in-parts), or search the Internet using terms like **multipart** and **HTTP**. #### cURL Example (The placeholder `{path-to-twb}`represents the local path to the TWB file.) ``` curl --location 'https://example.com/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/workbooks/validateWorkbookAndUpload' --header 'X-Tableau-Auth: aBcDeFgHiJkLmNoPqRsTuV|1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p|12345678-1234-5678-9abc-def012345678' --header 'Accept: application/json' --form 'tableau_workbook=@"{path-to-twb}"' ``` #### Response Code 200 #### Response Body A validation response that returns a 200 response code, zero validation errors, and zero or more validation warnings indicates successful validation. Warnings are advisory, and won't prevent a workbook from loading in Tableau. Details about the validation warnings are returned in the response body as JSON. ``` { "timestamp": "2026-06-10T14:32:18.456Z", "uploadId": "12345:12ab34cd56ef78ab90cd12ef34ab56cd-0:0", "warnings": [ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } ] } ``` #### Errors
HTTP statuserror CodeConditionDetails
400 Missing required parameterThe required tableau_workbook parameter isn't present in the request.
400 Invalid file type or contentThe file is not a valid TWB file or does not contain TWB XML content, or the "filename" parameter doesn't end with ".twb".
406406000No acceptable responseThis method can only return a JSON response. Use the Accept: application/json header.
422 Unprocessable entityThe TWB validation task completed, but detected errors. See the response body for detailed validation information.
For more information, see [Handling Errors](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_errors.htm). #### Validation errors A validation response that returns zero or more validation errors indicates failed validation. Unlike validation warnings, validation errors _will_ prevent a workbook from loading in Tableau. Details about the validation errors and warnings are returned in the response body as JSON. Example response: { "timestamp": "2026-06-10T14:32:18.456Z", "errors": \[ { "severity": "ERROR", "message": "Missing required closing tag for element", "line": 127, "column": 5, "elementName": "preferences" } \], "warnings": \[ { "severity": "WARNING", "message": "Unknown map source is used", "line": 245, "column": 18, "elementName": "map" } \] } [Skip to main content](#main-content) # REST API XML Schema REST API methods that require data in the body of the request pass the data as an XML block. In addition, many API methods return data in the response using an XML block. The schema for the XML used in requests and response is available in a schema (.xsd) file. When you construct XML for a request, you must make sure that the XML block is well formed and that it conforms to the schema. For many programming frameworks, you can generate code from the .xsd file that maps XML elements and attributes to objects and properties. You can use this code to help you create XML blocks using typed code, and to deserialize and serialize data from REST API requests and responses. ## Getting the schema file You can download the schema as an .xsd file from the following locations: | Version | Schema File | | --- | --- | | Version 3.29 (Tableau Cloud June 2026 / Server 2026.2) | [ts-api\_3\_29.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_29.xsd) | | Version 3.28 (Tableau Cloud February 2026) | [ts-api\_3\_28.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_28.xsd) | | Version 3.27 (Tableau Cloud October 2025 / Server 2025.3) | [ts-api\_3\_27.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_27.xsd) | | Version 3.26 (Tableau Cloud June 2025) | [ts-api\_3\_26.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_26.xsd) | | Version 3.25 (Tableau Cloud March 2025 / Server 2025.1) | [ts-api\_3\_25.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_25.xsd) | | Version 3.24 (Tableau Cloud September 2025) | [ts-api\_3\_24.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_24.xsd) | | Version 3.23 (Tableau Server 2024.2) | [ts-api\_3\_23.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_23.xsd) | | Version 3.22 (Tableau Server 2024.1) | [ts-api\_3\_22.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_22.xsd) | | Version 3.21 (Tableau Server 2023.3) | [ts-api\_3\_21.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_21.xsd) | | Version 3.20 (Tableau Server 2023.2) | [ts-api\_3\_20.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_20.xsd) | | Version 3.19 (Tableau Server 2023.1) | [ts-api\_3\_19.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_19.xsd) | | Version 3.18 (Tableau Cloud updates only) | [ts-api\_3\_18.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_18.xsd) | | Version 3.17 (Tableau Server 2022.3) | [ts-api\_3\_17.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_17.xsd) | | Version 3.16 (Tableau Cloud updates only) | [ts-api\_3\_16.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_16.xsd) | | Version 3.15 (Tableau Server 2022.1) | [ts-api\_3\_15.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_15.xsd) | | Version 3.14 (Tableau Server 2021.4) | [ts-api\_3\_14.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_14.xsd) | | Version 3.13 (Tableau Server 2021.3) | [ts-api\_3\_13.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_13.xsd) | | Version 3.12 (Tableau Server 2021.2) | [ts-api\_3\_12.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_12.xsd) | | Version 3.11 (Tableau Server 2021.1) | [ts-api\_3\_11.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_11.xsd) | | Version 3.10 (Tableau Server 2020.4) | [ts-api\_3\_10.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_10.xsd) | | Version 3.9 (Tableau Server 2020.3) | [ts-api\_3\_9.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_9.xsd) | | Version 3.8 (Tableau Server 2020.2) | [ts-api\_3\_8.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_8.xsd) | | Version 3.7 (Tableau Server 2020.1) | [ts-api\_3\_7.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_7.xsd) | | Version 3.6 (Tableau Server 2019.4) | [ts-api\_3\_6.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_6.xsd) | | Version 3.5 (Tableau Server 2019.3) | [ts-api\_3\_5.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_5.xsd) | | Version 3.4 (Tableau Server 2019.2) | [ts-api\_3\_4.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_4.xsd) | | Version 3.3 (Tableau Server 2019.1) | [ts-api\_3\_3.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_3.xsd) | | Version 3.2 (Tableau Server 2018.3) | [ts-api\_3\_2.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_2.xsd) | | Version 3.1 (Tableau Server 2018.2) | [ts-api\_3\_1.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_1.xsd) | | Version 3.0 (Tableau Server 2018.1) | [ts-api\_3\_0.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_3_0.xsd) | | Version 2.8 (Tableau Server 10.5) | [ts-api\_2\_8.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_8.xsd) | | Version 2.7 (Tableau Server 10.4) | [ts-api\_2\_7.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_7.xsd) | | Version 2.6 (Tableau Server 10.3) | [ts-api\_2\_6.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_6.xsd) | | Version 2.5 (Tableau Server 10.2) | [ts-api\_2\_5.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_5.xsd) | | Version 2.4 (Tableau Server 10.1) | [ts-api\_2\_4.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_4.xsd) | | Version 2.3 (Tableau Server 10.0) | [ts-api\_2\_3.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_3.xsd) | | Version 2.2 (Tableau Server 9.3) | [ts-api-2\_2.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_2.xsd) | | Version 2.1 (Tableau Server 9.2) | [ts-api-2\_1.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_1.xsd) | | Version 2.0.1 (Tableau Server 9.0.1) | [ts-api-2\_0\_1.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_0_1.xsd) | | Version 2.0 (Tableau Server 9.0) | [ts-api-2\_0.xsd](https://help.tableau.com/samples/en-us/rest_api/ts-api_2_0.xsd) | For more information about REST API versions and XML schema versions, see [REST API and Resource Versions](https://help.tableau.com/v0.0/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).