---
schema_version: "1"
id: cefc7db6b4e049b11ee298db308c350ab59f9a096c4d82d0eaa900f7667b62ea
title: Reference-Tableau Server REST API
collection: tableau
version: current
locale: en-us
portal_url: https://docs.salesforce.com/tableau/current/en-us/api/rest_api/REST/rest_api_ref.md
canonical_url: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 53e9d110e4cbaff019baec5c92d2760049477c3018b7c6f94473670da9cdd294
description: Using the Tableau Server REST API, you can manage and change Tableau Server resources programmatically, via HTTP
---
[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/current/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm) and [REST API Example Requests](https://help.tableau.com/current/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

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_addAnalyticsExtensionsConnection">Add analytics extension connection to site</a></td><td>Adds a new analytics extension connection for an external service to a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_deleteAnalyticsExtensionsConnection">Delete analytics extension connection from site</a></td><td>Deletes a specific analytics extension connection for an external service from a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_updateAnalyticsExtensionsServerSettings">Enable or disable analytics extensions on server</a><br><i>- Not available for Tableau Cloud</i></td><td>Enables or disables analytics extensions on a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_getAnalyticsExtensionsConnection">Get analytics extension details</a></td><td>Get the details of a specified analytics extension connection to an external service.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_getSelectedConnectionForWorkbook">Get current analytics extension for workbook</a></td><td>Gets basic details, including connection type and name, of the analytics extension connection to an external service that the specified workbook is currently using.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_getAnalyticsExtensionsServerSettings">Get enabled state of analytics extensions on server</a><br><i>- Not available for Tableau Cloud</i></td><td>Gets the enabled/disabled state of analytics extensions on a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_getAnalyticsExtensionsSiteSettings">Get enabled state of analytics extensions on site</a></td><td>Gets the enabled/disabled state of analytics extensions on a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_getConnectionOptionsForWorkbook">List analytics extension connections of workbook</a></td><td>Lists basic details of each analytics extension connection available for a specified workbook, including connection type and name.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_getAnalyticsExtensionsConnections">List analytics extension connections on site</a></td><td>Lists a site's analytics extension connections for external services.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_deleteConnectionFromWorkbook">Remove current analytics extension connection for workbook</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_updateAnalyticsExtensionsConnection">Update analytics extension connection of site</a></td><td>Updates the details of specified analytics extension connection for an external service to a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_updateWorkbookWithConnection">Update analytics extension for workbook</a></td><td>Updates the analytics extension connection to external service currently used by a workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_analytics_extensions_settings.htm#AnalyticsExtensionsService_updateAnalyticsExtensionsSiteSettings">Update enabled state of analytics extensions on site</a></td><td>Enables or disables analytics extensions on a site.</td></tr></tbody></table>

Ask Data Lens Methods - Retired

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_ask_data_lens.htm#LensService_createLens">Create ask data lens - Retired in API 3.22</a></td><td>Create an ask data lens.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_ask_data_lens.htm#LensService_deleteLens">Delete ask data lens - Retired in API 3.22</a></td><td>Delete an ask data lens.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_ask_data_lens.htm#LensService_getLens">Get ask data lens - Retired in API 3.22</a></td><td>Get the details of the specified ask data lens.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_ask_data_lens.htm#LensService_importLens">Import ask data lens - Retired in API 3.22</a></td><td>Import an existing ask data lens on a server to a site, and optionally transform the metadata of the lens in the process.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_ask_data_lens.htm#LensService_listLenses">List ask data lenses in site - Retired in API 3.22</a></td><td>Returns a list of ask data lenses in a site.</td></tr></tbody></table>

Authentication Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#list_personal_access_tokens">List Personal Access Tokens</a><br><i>- Not available for Tableau Server.</i></td><td>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&nbsp;owner is a member of.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#revoke_administrator_personal_access_tokens">Revoke Administrator Personal Access Tokens</a><br><i>- Not available for Tableau Cloud.</i></td><td>Revokes all <a href="https://help.tableau.com/current/server/en-us/security_personal_access_tokens.htm" rel="noopener noreferrer" target="_blank">personal access tokens</a> (PATs) created by server administrators. This method is not available for Tableau Cloud.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#revoke_personal_access_token">Revoke Personal Access Token</a><br><i>- Not available for Tableau Server.</i></td><td>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&nbsp;owner is a member of.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_in">Sign In</a></td><td>Signs you in as a user on the specified site on Tableau Server or Tableau Cloud.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#sign_out">Sign Out</a></td><td>Signs you out of the current session. This call invalidates the authentication token that is created by a call to <a href="#sign_in"><span class="api-command-ref">Sign In</span></a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#switch_site">Switch Site</a><br><i>- Not available for Tableau Cloud.</i></td><td>Switches you onto another site without having to provide a user name and password again.</td></tr></tbody></table>

Bridge Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#add_domain_to_pool">Add Domain to Pool</a><br><i>- Not available for Tableau Server.</i></td><td>Associates a domain with a specific Bridge pool, allowing Bridge clients from that domain to use the pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#add_projects_to_routing_rule">Add Projects to Routing Rule</a><br><i>- Not available for Tableau Server.</i></td><td>Adds one or more project filtering conditions to an existing allow rule, narrowing the rule so it applies only to the listed projects.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#block_domain">Block Domain</a><br><i>- Not available for Tableau Server.</i></td><td>Blocks a domain from being used with any Bridge pool, preventing Bridge clients from that domain from connecting.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#create_bridge_pool">Create Bridge Pool</a><br><i>- Not available for Tableau Server.</i></td><td>Creates a new Bridge pool with the specified name.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#create_routing_rule">Create Routing Rule</a><br><i>- Not available for Tableau Server.</i></td><td>Creates a Bridge routing rule for a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#delete_bridge_client">Delete Bridge Client</a><br><i>- Not available for Tableau Server.</i></td><td>Permanently removes a Bridge client from the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#delete_bridge_pool">Delete Bridge Pool</a><br><i>- Not available for Tableau Server.</i></td><td>Permanently deletes a Bridge pool and all its associated domain mappings.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#delete_domain">Delete Domain</a><br><i>- Not available for Tableau Server.</i></td><td>Removes a domain mapping from the system.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#delete_routing_rule">Delete Routing Rule</a><br><i>- Not available for Tableau Server.</i></td><td>Permanently deletes a Bridge routing rule identified by its ID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#get_bridge_client">Get Bridge Client</a><br><i>- Not available for Tableau Server.</i></td><td>Retrieves detailed information about a single Bridge client.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#get_domain_mapping">Get Domain Mapping</a><br><i>- Not available for Tableau Server.</i></td><td>Retrieves information about all domain mappings for the site, including pool assignment and status (ALLOWED or BLOCKED).</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#get_routing_rule">Get Routing Rule</a><br><i>- Not available for Tableau Server.</i></td><td>Returns a single Bridge routing rule identified by its ID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#get_routing_rules">Get Routing Rules</a><br><i>- Not available for Tableau Server.</i></td><td>Returns all Bridge routing rules for the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#list_bridge_clients">List Bridge Clients</a><br><i>- Not available for Tableau Server.</i></td><td>Retrieves a list of all Bridge clients for a specific site, with optional filtering by pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#list_bridge_pools">List Bridge Pools</a><br><i>- Not available for Tableau Server.</i></td><td>Retrieves a list of all Bridge pools for the specified site, including pool details and associated domain mappings.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#move_bridge_client">Move Bridge Client</a><br><i>- Not available for Tableau Server.</i></td><td>Moves a Bridge client between pools or to unassigned status.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#remove_projects_from_routing_rule">Remove Projects from Routing Rule</a><br><i>- Not available for Tableau Server.</i></td><td>Removes one or more project filtering conditions from an existing allow rule, broadening the rule so it no longer applies only to those projects.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#update_bridge_pool">Update Bridge Pool</a><br><i>- Not available for Tableau Server.</i></td><td>Updates the display name of an existing Bridge pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#update_domain_among_pools">Update Domain Among Pools</a><br><i>- Not available for Tableau Server.</i></td><td>Moves a domain from its current pool to a different pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#update_domain_name">Update Domain Name</a><br><i>- Not available for Tableau Server.</i></td><td>Updates an existing domain mapping by renaming the domain.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_bridge.htm#update_routing_rule">Update Routing Rule</a><br><i>- Not available for Tableau Server.</i></td><td>Partially updates an existing Bridge routing rule.</td></tr></tbody></table>

Collections Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#add_collection_permissions">Add Collection Permissions</a></td><td>Adds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#addCollectionItems">Add items to a collection</a></td><td>Adds items to a collection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#batchUpdateCollections">Batch update collections</a></td><td>Batch updates collections.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#createCollection">Create a collection</a></td><td>Creates a new collection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#delete_collection_permission">Delete Collection Permission</a></td><td>Removes the specified collection permission for the specified group or user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#deleteCollections">Delete collections</a></td><td>Deletes collections.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#deleteCollections_1">Delete collections</a></td><td>Deletes collections.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#getCollection">Get details of a collection</a></td><td>Gets the details of a collection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#query_collection_permissions">List Collection Permissions</a></td><td>Returns a list of permissions for a specific collection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#getCollections">List collections</a></td><td>Lists collections.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#getCollectionItems">List items in a collection</a></td><td>Lists items in a collection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#removeCollectionItems">Remove items from a collection</a></td><td>Removes items from a collection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_collections.htm#reorderItems">Reorder items in a collection</a></td><td>Reorders items in a collection.</td></tr></tbody></table>

Connected App Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#create_connectedapp">Create Connected App</a></td><td>Create a connected app.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#create_connectedapp_secret">Create Connected App Secret</a></td><td>Generate a secret for a connected app.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#delete_connectedapp">Delete Connected App</a></td><td>Permanently remove a connected app.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#delete_connectedapp_secret">Delete Connected App Secret</a></td><td>Permanently remove a secret associated with a connected app.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#delete_connectedapp_eas">Delete EAS</a></td><td>Delete a registered external authorization server (EAS).</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#get_connectedapp">Get Connected App</a></td><td>Query a connected app by its ID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#get_connectedapp_secret">Get Connected App Secret</a></td><td>Query a connected app secret and the token value using the connected app's ID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#get_connectedapps_eas">List All Registered EAS</a></td><td>Get all external authorization servers (EASs) registered to a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#get_connectedapps">List Connected Apps</a></td><td>Query all connected apps configured on a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#get_connectedapp_eas">List Registered EAS</a></td><td>Get an external authorization server (EAS) registered to a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#create_connectedapp_eas">Register EAS</a></td><td>Create a connected app with OAuth 2.0 trust by registering an external authorization server (EAS) to a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#update_connectedapp">Update Connected App</a></td><td>Update a connected app.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#update_connectedapp_eas">Update EAS</a><br><i>- Not available for Tableau Server.</i></td><td>Update a connected app with OAuth 2.0 trust.</td></tr></tbody></table>

Content Exploration Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_content_exploration.htm#UsageStatsService_BatchGetUsage">Get batch content usage statistics</a><br><i>- Not available for Tableau Server</i></td><td>Gets usage statistics for multiple content items. The batch of can include multiple content types.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_content_exploration.htm#ContentExplorationService_getSearch">Get content search results</a></td><td>Searches across all supported content types for objects relevant to the search expression specified in the querystring of the request URI.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_content_exploration.htm#ContentExploration_getSuggestions">Get Content Suggestions</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_content_exploration.htm#UsageStatsService_GetUsageStats">Get usage statistics for content item</a><br><i>- Not available for Tableau Server</i></td><td>Gets the usage statistics for a Tableau content item, specified by LUID and content type, such as workbook, datasource, or flow.</td></tr></tbody></table>

Custom Domain Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_custom_domain.htm#CustomDomainsService_createSiteCustomDomainSettings">Create custom domain settings</a><br><i>- Not available for Tableau Server</i></td><td>Starts the process of custom domain setup for a Tableau site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_custom_domain.htm#CustomDomainsService_deleteSiteCustomDomainSettings">Delete custom domain settings</a><br><i>- Not available for Tableau Server</i></td><td>Deletes the custom domain setup for a Tableau site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_custom_domain.htm#CustomDomainsService_getSiteCustomDomain">Get Custom Domain Name</a><br><i>- Not available for Tableau Server</i></td><td>Gets the custom domain for a Tableau site, if one is provisioned. For more information about how, see.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_custom_domain.htm#CustomDomainsService_getSiteCustomDomainSettings">Get custom domain settings</a><br><i>- Not available for Tableau Server</i></td><td>Gets the custom domain settings for a Tableau site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_custom_domain.htm#CustomDomainsService_updateSiteCustomDomainSettings">Update custom domain settings</a><br><i>- Not available for Tableau Server</i></td><td>Updates the custom domain setup for a Tableau site.</td></tr></tbody></table>

Dashboard Extensions Settings Methods - Retired

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsServerSettingsService_createDashboardExtensionsSafeListItem">Allow dashboard extension on site - Retired in API 3.21</a></td><td>Adds a dashboard extension to the safe list of the site you are signed into.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsServerSettingsService_createDashboardExtensionsBlockListItem">Block dashboard extension on server - Retired in API 3.21</a><br><i>- Not available for Tableau Cloud</i></td><td>Adds a dashboard extension to the block list of a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsSiteSettingsService_deleteDashboardExtensionsSafeListItem">Disallow dashboard extension on site - Retired in API 3.21</a></td><td>Deletes a specific dashboard extension from the safe list of the site you are signed into.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsSiteSettingsService_getDashboardExtensionsSafeListItem">Get allowed dashboard extension on site - Retired in API 3.21</a></td><td>Gets the details of a specific dashboard extension on the safe list of the site you are signed into.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsServerSettingsService_getDashboardExtensionsBlockListItem">Get blocked dashboard extension on server - Retired in API 3.21</a><br><i>- Not available for Tableau Cloud</i></td><td>Gets the details of a specific dashboard extension on the blocked list of a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsServerSettingsService_getDashboardExtensionsSafeListItems">List allowed dashboard extensions on site - Retired in API 3.21</a></td><td>Lists the dashboard extensions on the safe list of the site you are signed into.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsServerSettingsService_getDashboardExtensionsBlockListItems">List blocked dashboard extensions on server - Retired in API 3.21</a><br><i>- Not available for Tableau Cloud</i></td><td>Lists the dashboard extensions on the blocked list of a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsSiteSettingsService_getDashboardExtensionsSiteSettings">List dashboard extension settings of site - Retired in API 3.21</a></td><td>Lists the dashboard extension settings of the site you are signed into.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsServerSettingsService_getDashboardExtensionsServerSettings">List settings for dashboard extensions on server - Retired in API 3.21</a><br><i>- Not available for Tableau Cloud</i></td><td>Lists the dashboard extension settings of a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsServerSettingsService_deleteDashboardExtensionsBlockListItem">Unblock dashboard extension on server - Retired in API 3.21</a><br><i>- Not available for Tableau Cloud</i></td><td>Deletes a specific extension from the block list of a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsSiteSettingsService_updateDashboardExtensionsSiteSettings">Update dashboard extension settings of site - Retired in API 3.21</a></td><td>Updates the settings for dashboard extensions for the site you are signed into.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsServerSettingsService_updateDashboardExtensionsServerSettings">Update dashboard extensions settings of server - Retired in API 3.21</a><br><i>- Not available for Tableau Cloud</i></td><td>Updates the settings for dashboard extensions of a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_dashboard_extensions_settings.htm#DashboardExtensionsSiteSettingsService_updateDashboardExtensionsSafeListItem">Update settings for allowed dashboard extension on site - Retired in API 3.21</a></td><td>Updates the settings of a specific dashboard extension in the safe list of the site you are signed into.</td></tr></tbody></table>

Data Sources Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#add_tags_to_data_source">Add Tags to Data Source</a></td><td>Adds one or more tags to the specified data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#add_work_copy_elements">Add Work Copy Elements</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#create_work_copy">Create Work Copy</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#delete_data_source">Delete Data Source</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#delete_tag_from_data_source">Delete Tag from Data Source</a></td><td>Deletes a tag from the specified data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#delete_work_copy_elements">Delete Work Copy Elements</a></td><td>Deletes elements from a work copy. Send <code>elementType</code> and <code>name</code> for each element. Other content is ignored. Returns HTTP 200 when every element is deleted. The success body omits the elements that succeeded.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#download_data_source">Download Data Source</a></td><td>Downloads a data source in <code>.tdsx</code> format.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#download_datasource_encrypted_keychain">Download Data Source Encrypted Keychain</a></td><td>Gets an encrypted version of the embedded credentials from the data source. These credentials can only be migrated to the linked destination&nbsp;Tableau Cloud or Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#download_data_source_revision">Download Data Source Revision</a></td><td>Downloads a specific version of a data source prior to the current one in <code>.tdsx</code> format. To down load the current version of a data source use the <a href="#download_data_source">Download Data Source</a> method.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#get_data_source_revisions">Get Data Source Revisions</a></td><td>Returns a list of revision information (history) for the specified data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#publish_data_source">Publish Data Source</a></td><td>Publishes a data source on the specified site, or appends data to an existing data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#publish_work_copy">Publish Work Copy</a></td><td>Publishes a work copy as a data source. Send the published data source <code>name</code> and an optional <code>description</code>. The response returns the new data source LUID. A blank name is rejected.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_source">Query Data Source</a></td><td>Returns information about the specified data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_source_connections">Query Data Source Connections</a></td><td>Returns a list of data connections for the specified data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_sources">Query Data Sources</a></td><td>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 <a href="#query_workbook_connections">Query Workbook Connections</a> method.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#read_data_source_elements">Read Data Source Elements</a></td><td>Reads columns, field descriptions, or table descriptions from a published data source. Set <code>elementType</code> to the kind of element, and optionally set <code>name</code> to read one element.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#read_work_copy_elements">Read Work Copy Elements</a></td><td>Reads columns, field descriptions, or table descriptions from a work copy. Set <code>elementType</code> to the kind of element, and optionally set <code>name</code> to read one element.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#remove_data_source_revision">Remove Data Source Revision</a></td><td>Removes a specific version of a data source from the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_in_hyper_connection">Update Data in Hyper Connection</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_in_hyper_data_source">Update Data in Hyper Data Source</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source">Update Data Source</a></td><td>Updates the owner, project or certification status of the specified data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection">Update Data Source Connection</a></td><td>Updates the server address, port, authentication type, username, or password for the specified data source connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connections">Update Data Source Connections</a></td><td>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_connection" target="_blank">Update Data Source Connection</a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source_now">Update Data Source Now</a></td><td>Runs an extract refresh on the specified data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_work_copy_elements">Update Work Copy Elements</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#upload_datasource_encrypted_keychain">Upload Data Source Encrypted Keychain</a></td><td>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.</td></tr></tbody></table>

Extract and Encryption Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_extract_for_datasource">Create an Extract for a Data Source</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task">Create Cloud Extract Refresh Task</a><br><i>- Not available for Tableau Server.</i></td><td>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.<br><i>For Tableau Server, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_data_source_to_schedule">Add data source to server schedule</a>, <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_workbook_to_schedule">Add workbook to server schedule</a>, and <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_virtual_connection_to_schedule">Add virtual connection to server schedule</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_extracts_for_workbook">Create Extracts for Embedded Data Sources in a Workbook</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#Decrypt_Extracts">Decrypt Extracts in a Site</a></td><td>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 <a href="https://help.tableau.com/current/server/en-us/security_ear.htm" rel="noopener" target="_blank">Extract Encryption at Rest</a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#delete_extract_from_datasource">Delete Extract from Data Source</a></td><td>Delete the extract from a data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#delete_extract_refresh_task">Delete Extract Refresh Task</a></td><td>Deletes the specified extract refresh task on Tableau Server or Tableau Cloud.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#delete_extracts_from_virtual_connection">Delete Extracts from Virtual Connection</a><br><i>- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.</i></td><td>Deletes the extracts from a virtual connection, which changes it from extract to live mode.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#delete_extracts_from_workbook">Delete Extracts of Embedded Data Sources from a Workbook</a></td><td>Delete all extracts of embedded data sources in a workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#Encrypt_Extracts">Encrypt Extracts in a Site</a></td><td>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 <a href="https://help.tableau.com/current/server/en-us/security_ear.htm" rel="noopener" target="_blank">Extract Encryption at Rest</a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#get_extract_refresh_task">Get Extract Refresh Task</a></td><td>Returns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#list_extract_refresh_tasks">List Extract Refresh Tasks in Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#list_extract_refresh_tasks">List Extract Refresh Tasks in Site</a></td><td>Returns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#Reencrypt_Extracts">Reencrypt Extracts in a Site</a></td><td>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 <a href="https://help.tableau.com/current/server/en-us/security_ear.htm" rel="noopener" target="_blank">Extract Encryption at Rest</a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#run_extract_refresh_task">Run Extract Refresh Task</a></td><td>Runs the specified extract refresh task.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#update_cloud_extract_refresh_task">Update Cloud Extract Refresh Task</a><br><i>- Not available for Tableau Server.</i></td><td>Updates an extract refresh task on Tableau Cloud.</td></tr></tbody></table>

Favorites Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#add_data_source_to_favorites">Add Data Source to Favorites</a></td><td>Adds the specified data source to the user's favorites.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#add_flow_to_favorites">Add Flow to Favorites</a></td><td>Adds the specified flow to the user's favorites.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#add_metric_to_favorites">Add Metric to Favorites - Retired in API 3.22</a></td><td>Adds the specified metric to the user's favorites.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#add_project_to_favorites">Add Project to Favorites</a></td><td>Adds the specified project to a user's favorites.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#add_view_to_favorites">Add View to Favorites</a></td><td>Adds the specified view to a user's favorites.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#add_workbook_to_favorites">Add Workbook to Favorites</a></td><td>Adds the specified workbook to a user's favorites.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#delete_data_source_from_favorites">Delete Data Source from Favorites</a></td><td>Deletes the specified data source from the user's favorites. If the specified data source is not a favorite, the operation has no effect.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#ref_delete_flow_from_favorites">Delete Flow from Favorites</a></td><td>Deletes the specified flow from the user's favorites. If the specified flow is not a favorite, the operation has no effect.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#delete_project_from_favorites">Delete Project from Favorites</a></td><td>Deletes the specified project from the user's favorites. If the specified project is not a favorite, the operation has no effect.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#delete_view_from_favorites">Delete View from Favorites</a></td><td>Deletes the specified view from user's favorites. If the specified view is not a favorite, the operation has no effect.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#delete_workbook_from_favorites">Delete Workbook from Favorites</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#get_favorites_for_user">Get Favorites for User</a></td><td>Returns a list of favorite projects, data sources, views, workbooks, and flows for a user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_favorites.htm#update_favorites">Organize Favorites</a></td><td>Move an item to organize a user's favorites.</td></tr></tbody></table>

Flow Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#add_flow_permissions">Add Flow Permissions</a></td><td>Adds permissions to the specified flow for a Tableau Server user or group. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#add_flow_task_to_schedule">Add Flow Task to Server Schedule</a></td><td>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#create_cloud_flow_task">Create Cloud Flow Task</a> method.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#cancel_flow_run">Cancel Flow Run</a></td><td>Cancels a flow run that is in progress.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#create_cloud_flow_task">Create Cloud Flow Task</a><br><i>- Not available for Tableau Server. Available only with a Data Management license.</i></td><td>Creates a flow task on Tableau Cloud, and set its schedule.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#delete_flow">Delete Flow</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#delete_flow_permission">Delete Flow Permission</a></td><td>Deletes the specified permission from the specified flow for a group or user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#download_flow">Download Flow</a></td><td>Downloads a flow in .tfl or .tflx format.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#download_flow_encrypted_keychain">Download Flow Encrypted Keychain</a></td><td>Gets an encrypted version of the embedded credentials in a flow. These credentials can only be migrated to the linked destination&nbsp;Tableau Cloud or Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_run">Get Flow Run</a></td><td>Gets a flow run.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_run_task">Get Flow Run Task</a></td><td>Returns information about the specified flow run task. This method shows you information about the scheduled task for the flow.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_run_tasks">Get Flow Run Tasks</a></td><td>Returns a list of scheduled flow tasks for the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_runs">Get Flow Runs</a></td><td>Get flow runs.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_run_task">Get Linked Task</a><br><i>- Available only with a Data Management license.</i></td><td>Returns information about a specific linked task. This method shows you information about the scheduled linked task.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#get_flow_run_tasks">Get Linked Tasks</a><br><i>- Available only with a Data Management license.</i></td><td>Returns a list of scheduled linked tasks for a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#query_flow_permissions">List Flow Permissions</a></td><td>Returns a list of permissions for the specific flow.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#publish_flow">Publish Flow</a></td><td>Publishes a flow on the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#query_flow">Query Flow</a></td><td>Returns information about the specified flow, including information about the project, owner, and output steps.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#query_flow_connections">Query Flow Connections</a></td><td>Returns a list of data connections for the specific flow.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#Query_Flows_For_Site">Query Flows for a Site</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#query_flows_for_user">Query Flows for User</a></td><td>Returns the flows that the specified user owns in addition to those that the user has Read (view) permissions for.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#run_flow_now">Run Flow Now</a><br><i>- Available only with a Data Management license.</i></td><td>Runs the specified flow.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#run_flow_task">Run Flow Task</a></td><td>Runs the specified flow run task.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#run_linked_task_now">Run Linked Task Now</a><br><i>- Available only with a Data Management license.</i></td><td>Runs the specified linked task.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow">Update Flow</a></td><td>Updates the project and/or owner of the specified flow.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow_connection">Update Flow Connection</a></td><td>Updates the server address, port, username, or password for the specified flow connection. The connection can be an input or an output connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow_connections">Update Flow Connections</a></td><td>Updates the server address, port, username, or password for one or more flow connections. The connection can be an input or an output connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow_owner">Update Flow Owner</a></td><td>Updates a flow's owner.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#upload_flow_encrypted_keychain">Upload Flow Encrypted Keychain</a></td><td>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.</td></tr></tbody></table>

Identity Pools Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#add_user_to_idpool">Add User to Identity Pool</a><br><i>- Not available for Tableau Cloud.</i></td><td>Add a user to a specified identity pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_RegisterIdentityStoreTAG">Configure Identity Store</a><br><i>- Not available for Tableau Cloud</i></td><td>Configure a new local identity store to provision users.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_RegisterAuthConfiguration">Create Authentication Configuration</a><br><i>- Not available for Tableau Cloud</i></td><td>Create an instance of OpenID Connect (OIDC) authentication.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_RegisterIdentityPool">Create Identity Pool</a><br><i>- Not available for Tableau Cloud</i></td><td>Create an identity pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_DeleteAuthConfiguration">Delete Authentication Configuration</a><br><i>- Not available for Tableau Cloud</i></td><td>Delete an authentication instance.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_DeleteIdentityPool">Delete Identity Pool</a><br><i>- Not available for Tableau Cloud</i></td><td>Delete an identity pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_DeleteIdentityStoreTAG">Delete Identity Store</a><br><i>- Not available for Tableau Cloud</i></td><td>Delete an identity store.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_FindIdentityPoolByUuid">Get Identity Pool</a><br><i>- Not available for Tableau Cloud</i></td><td>Get information about an identity pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_ListAuthConfigurations">List Authentication Configurations on Server</a><br><i>- Not available for Tableau Cloud</i></td><td>List information about all authentication instances associated with identity pools.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_ListIdentityPools">List Identity Pools</a><br><i>- Not available for Tableau Cloud</i></td><td>List all identity pools.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_ListIdentityStoresTAG">List Identity Stores</a><br><i>- Not available for Tableau Cloud</i></td><td>List information about all identity store instances used to provision users.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#remove_user_from_idpool">Remove User from Identity Pool</a><br><i>- Not available for Tableau Cloud.</i></td><td>Remove a user from a specified identity pool.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_UpdateAuthConfiguration">Update Authentication Configuration</a><br><i>- Not available for Tableau Cloud</i></td><td>Update an authentication instance.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm#AuthnService_UpdateIdentityPool">Update Identity Pool</a><br><i>- Not available for Tableau Cloud</i></td><td>Update information about an identity pool.</td></tr></tbody></table>

Jobs, Tasks, and Schedules Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_data_source_to_schedule">Add Data Source to Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Adds a task to refresh a data source to an existing server schedule on Tableau Server.<br><i>For Tableau Cloud, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task">Create Cloud Extract Refresh Task</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_virtual_connection_to_schedule">Add Virtual Connection to Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server.<br><i>For Tableau Cloud, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task">Create Cloud Extract Refresh Task</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_workbook_to_schedule">Add Workbook to Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#batch_update_schedule_state">Batch Update Schedule State</a><br><i>- Not available for Tableau Cloud</i></td><td>Updates the state of one or more schedules.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#cancel_job">Cancel Job</a></td><td>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 <a href="#query_jobs">Query Jobs</a> method.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#create_cloud_extract_refresh_task">Create Cloud Extract Refresh Task</a><br><i>- Not available for Tableau Server.</i></td><td>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.<br><i>For Tableau Server, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_data_source_to_schedule">Add data source to server schedule</a>, <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_workbook_to_schedule">Add workbook to server schedule</a>, and <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_virtual_connection_to_schedule">Add virtual connection to server schedule</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#create_schedule">Create Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Creates a new server schedule on Tableau Server.<br><i>For Tableau Cloud, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task">Create Cloud Extract Refresh Task</a> and <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#create_subscription_cloud">Create subscription</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#delete_data_acceleration_task">Delete Data Acceleration Task</a></td><td>Deletes a data acceleration task.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#delete_schedule">Delete Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Deletes the specified schedule on Tableau Server.<br><i>For Tableau Cloud, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#delete_extract_refresh_task">Delete Extract Refresh Task</a> and <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#delete_subscription">Delete Subscription</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#get_data_acceleration_tasks">Get Data Acceleration Tasks in a Site</a></td><td>Returns a list of data acceleration tasks for the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#get_extract_refresh_task">Get Extract Refresh Task</a></td><td>Returns information about a site's scheduled extract refresh task for a data source, workbook, or virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#get-schedule">Get Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Returns detailed information about the specified server schedule on Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#list_extract_refresh_tasks">List Extract Refresh Tasks in Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Returns a list of the extract refresh tasks for a specified server schedule on the specified site on Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#list_extract_refresh_tasks">List Extract Refresh Tasks in Site</a></td><td>Returns a list of extract refresh tasks for the site. Tasks include extract refreshes for data sources, workbooks, and virtual connections.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_schedules">List Server Schedules</a><br><i>- Not available for Tableau Cloud.</i></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job">Query Job</a></td><td>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:.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_jobs">Query Jobs</a></td><td>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 <a href="#query_job">Query Job</a> method. To cancel an active job, pass a job ID returned by this method to the <a href="#cancel_job">Cancel Job</a> method.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#run_extract_refresh_task">Run Extract Refresh Task</a></td><td>Runs the specified extract refresh task.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#update_schedule">Update Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Modifies settings for the specified server schedule, including the name, priority, and frequency details on Tableau Server.<br><i>For Tableau Cloud, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#update_cloud_extract_refresh_task">Update cloud extract refresh task</a> and <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#update_subscription_cloud">Update subscription </a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#update_virtual_connection_now">Update Virtual Connection Now</a><br><i>- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.</i></td><td>Runs an extract refresh on the specified virtual connection.</td></tr></tbody></table>

Metadata Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_dqw">Add Data Quality Warning</a><br><i>- Available only with a Data Management license.</i></td><td>Add a data quality warning to a database, table, column, published data source, flow, virtual connection, or virtual connection table.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_database_perms">Add Database Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Add permissions to a database asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_database_perms_default">Add Default Database Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Adds default permission capabilities to a user or group for table resources in that database.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_dqw_trigger">Add or Update Monitoring Quality Warning on Content</a><br><i>- Available only with a Data Management license.</i></td><td>Create or update one or more monitoring quality warnings.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_table_perms">Add Table Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Add permissions to a table asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_tags_column">Add Tags to Column</a></td><td>Add one or more tags to a column.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_tags_database">Add Tags to Database</a></td><td>Add one or more tags to a database.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_tags_table">Add Tags to Table</a></td><td>Add one or more tags to a table.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_tags_to_virtual_connection">Add Tags to Virtual Connection</a><br><i>- Available only with a Data Management license.</i></td><td>Adds tags to a virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#add_dqw_certification">Batch Add or Update Data Quality Certifications</a><br><i>- Available only with a Data Management license.</i></td><td>Create or update one or more data quality certifications for different content and asset items.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#batch_add_dqws">Batch Add or Update Data Quality Warnings</a><br><i>- Available only with a Data Management license.</i></td><td>Add or update multiple data quality warnings on assets.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#batch_add_tags">Batch Add Tags</a><br><i>- Available only with a Data Management license.</i></td><td>Add multiple tags to items that are different content and asset types.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#batch_delete_dqws">Batch Delete Data Quality Warnings</a><br><i>- Available only with a Data Management license.</i></td><td>Delete multiple data quality warnings from assets.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#batch_delete_tags">Batch Delete Tags</a><br><i>- Available only with a Data Management license.</i></td><td>Delete multiple tags from items that are different content and asset types.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#create_label_category">Create Label Category</a><br><i>- Available only with a Data Management license.</i></td><td>Creates a data label category.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#create_or_update_labelvalue">Create or Update labelValue</a><br><i>- Available only with a Data Management license.</i></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_dqw_certification">Delete Data Quality Certification by ID</a><br><i>- Available only with a Data Management license.</i></td><td>Delete a data quality certification from an asset using the data quality certification ID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_dqw_certifications">Delete Data Quality Certifications by Content</a><br><i>- Available only with a Data Management license.</i></td><td>Delete multiple data quality certifications from assets.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_dqws">Delete Data Quality Warning by Content</a><br><i>- Available only with a Data Management license.</i></td><td>Delete the data quality warnings from an asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_dqw">Delete Data Quality Warning by ID</a><br><i>- Available only with a Data Management license.</i></td><td>Delete a data quality warning from an asset using the data quality warning ID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_database_perms">Delete Database Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Permanently remove the permissions applied to a database asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_database_perms_default">Delete Default Database Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Permanently remove the default permissions on a database asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_label">Delete Label</a><br><i>- Available only with a Data Management license.</i></td><td>Deletes a data label by its LUID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_label_category">Delete Label Category</a><br><i>- Available only with a Data Management license.</i></td><td>Deletes a label category.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_labels_on_assets">Delete Labels</a><br><i>- Available only with a Data Management license.</i></td><td>Deletes the data labels on one or more assets.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_labelvalue">Delete labelValue</a><br><i>- Available only with a Data Management license.</i></td><td>Deletes a label value.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_dqw_trigger">Delete Quality Warning Trigger by ID</a><br><i>- Available only with a Data Management license.</i></td><td>Permanently remove a quality warning trigger using the quality warning trigger ID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_dqw_triggers">Delete Quality Warning Triggers by Content</a><br><i>- Available only with a Data Management license.</i></td><td>Permanently remove all quality warning triggers for one or more data sources or flows, or both.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_table_perms">Delete Table Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Permanently remove the permissions applied to a table asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_tags_database">Delete Tag from Column</a></td><td>Delete a tag from a column.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_tags_database">Delete Tag from Database</a></td><td>Delete a tag from a database.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_tags_database">Delete Tag from Table</a></td><td>Delete a tag from a table.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#delete_tag_from_virtual_connection">Delete Tag from Virtual Connection</a><br><i>- Available only with a Data Management license.</i></td><td>Deletes a tag from a virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_xml_databasestables">Get Databases and Tables from Connection</a></td><td>Query databases and tables from the connection information in the data source (.tds or .tdsx) or workbook (.tws or .twbx) file's XML.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_label">Get Label</a><br><i>- Available only with a Data Management license.</i></td><td>Gets a data label by its LUID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_labels_on_assets">Get Labels</a><br><i>- Available only with a Data Management license.</i></td><td>Displays information about the data labels on one or more assets.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_labelvalue">Get labelValue</a><br><i>- Available only with a Data Management license.</i></td><td>Displays label value properties for a single label value.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#get_metadata_suggestion">Get Metadata Suggestion</a><br><i>- Available only with Tableau+</i></td><td>Gets a suggestion from generative AI about asset metadata.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_database_perms">List Database Permissions</a></td><td>Get information about the permissions on a database asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_database_perms_default">List Default Database Permissions</a></td><td>Get the default permissions applied to the database asset and its children tables.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#list_label_categories_on_site">List Label Categories on Site</a><br><i>- Available only with a Data Management license.</i></td><td>Lists all data label categories on the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#list_labelvalues_on_site">List labelValues on Site</a><br><i>- Available only with a Data Management license.</i></td><td>Lists all label values on the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_table_perms">List Table Permissions</a></td><td>Get information about the permissions on a table asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#move_database">Move Database</a><br><i>- Available only with a Data Management license.</i></td><td>Move one or more databases to a project.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#move_table">Move Table</a><br><i>- Available only with a Data Management license.</i></td><td>Moves one or more tables to a project.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_dqw_triggers">Query All Quality Warning Triggers by Content</a></td><td>Get information about all quality warning triggers for a content item.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_column">Query Column in a Table</a></td><td>Get information about a column in a table asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_columns">Query Columns in a Table</a></td><td>Get information about the columns in a table asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_dqw_certification">Query Data Quality Certification by ID</a></td><td>Get information about a data quality certification.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_dqw_certifications">Query Data Quality Certifications by Content</a></td><td>Get all data quality certifications for content or asset items.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_dqws">Query Data Quality Warning by Content</a><br><i>- Available only with a Data Management license.</i></td><td>Get information about the data quality warning for the database, table, column, published data source, flow, virtual connection, or virtual connection table.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_dqw">Query Data Quality Warning by ID</a></td><td>Get information about a specific data quality warning.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_database">Query Database</a></td><td>Get information about a database asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_databases">Query Databases</a></td><td>Get information about all database assets for a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_dqw_triggers">Query Quality Warning Trigger</a></td><td>Get information about a quality warning trigger.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_table">Query Table</a></td><td>Get information about a table asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#query_tables">Query Tables</a></td><td>Get information about all table assets for a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#remove_column">Remove Column</a><br><i>- Available only with a Data Management license.</i></td><td>Permanently remove the column from a table asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#remove_database">Remove Database</a><br><i>- Available only with a Data Management license.</i></td><td>Permanently remove the database asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#remove_table">Remove Table</a><br><i>- Available only with a Data Management license.</i></td><td>Permanently remove the table asset.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_column">Update Column</a><br><i>- Available only with a Data Management license.</i></td><td>Update the description of the column.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_dqw">Update Data Quality Warning</a><br><i>- Available only with a Data Management license.</i></td><td>Update the warning type, status, and message of a data quality warning.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_database">Update Database</a><br><i>- Available only with a Data Management license.</i></td><td>Update the database description, certify a database, set database permissions, or assign a Tableau Cloud or Server user as the database contact.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_label">Update Label</a><br><i>- Available only with a Data Management license.</i></td><td>Updates a label by its LUID.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_label_category">Update Label Category</a><br><i>- Available only with a Data Management license.</i></td><td>Updates a data label category.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_labels_on_assets">Update Labels</a><br><i>- Available only with a Data Management license.</i></td><td>Creates or updates labels on one or more assets.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_labelvalue">Update labelValue</a><br><i>- Available only with a Data Management license.</i></td><td>Updates a label value.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_dqw_trigger">Update Monitoring Quality Warning</a><br><i>- Available only with a Data Management license.</i></td><td>Update a monitoring quality warning.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metadata.htm#update_table">Update Table</a><br><i>- Available only with a Data Management license.</i></td><td>Update the table description, certify a table, or a assign a user contact to the table asset.</td></tr></tbody></table>

Metrics Methods - Retired

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#delete_metric">Delete Metric - Retired in API 3.22</a></td><td>Deletes a specified metric from a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#get_metric">Get Metric - Retired in API 3.22</a></td><td>Returns the details of the specified metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#get_metric_data">Get Metric Data - Retired in API 3.22</a></td><td>Returns the data for the specified metric as comma separated (CSV) format. The maximum number of rows returned is 10,000.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#list_metrics_for_site">List Metrics for Site - Retired in API 3.22</a></td><td>Returns the metrics configured for a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_metrics.htm#update_metric">Update Metric - Retired in API 3.22</a></td><td>Updates the owner, project, suspended status, or name of the specified metric.</td></tr></tbody></table>

Mobile Settings Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_mobile_settings.htm#get_mobile_security_settings_for_server">Get Mobile Security Settings for Server</a></td><td>Gets the mobile security settings for the server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_mobile_settings.htm#get_mobile_security_settings_for_site">Get Mobile Security Settings for Site</a></td><td>Gets the mobile security settings for the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_mobile_settings.htm#Update_mobile_security_settings_for_site">Update Mobile Security Settings for Site</a></td><td>Updates the mobile security sections for a specified site.</td></tr></tbody></table>

Notifications Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#add_user_to_data-driven_alert">Add User to Data-Driven Alert</a></td><td>Adds a specified user to the recipients list for a data-driven alert.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#create_webhook">Create a Webhook</a></td><td>Creates a new webhook for a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#create_data_driven_alert">Create Data Driven Alert</a><br><i>- Not available for Tableau Server.</i></td><td>Create a data driven alert (DDA) for a view with a single data axis.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#delete_webhook">Delete a Webhook</a></td><td>Deletes the specified webhook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#delete_data-driven_alert">Delete Data-Driven Alert</a></td><td>Deletes the specified data-driven alert from the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#delete_user_from_data-driven_alert">Delete User from Data-Driven Alert</a></td><td>Removes a specified user from the recipients list for a data-driven alert.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#get_webhook">Get a Webhook</a></td><td>Returns information about the specified webhook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#query_data-driven_alert_details">Get Data-Driven Alert</a></td><td>Returns details on a specified data-driven alert, including the recipients of the alert.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#get_user_notification_preferences">Get User Notification Preferences</a></td><td>Returns the notification preferences for the specified site. You can filter by channel and notification type. For more information about notifications, see <a href="https://help.tableau.com/current/pro/desktop/en-us/useracct.htm#change-notification-settings">Manage Your Account Settings</a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#query_data-driven_alerts">List Data-Driven Alerts on Site</a></td><td>Returns a list of data-driven alerts in use on the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#list_webhooks_for_site">List Webhooks</a></td><td>Returns a list of all the webhooks on the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#test_webhook">Test a Webhook</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#update_webhook">Update a Webhook</a></td><td>Modify the properties of an existing webhook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#update_data-driven_alert">Update Data-Driven Alert</a></td><td>Update one or more settings for the specified data-driven alert; including the alert subject, frequency, and owner.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm#update_user_notification_preferences">Update User Notification Preferences</a></td><td>Updates user notifications preferences to enabled or disabled on the specified site. For more information about notifications, see <a href="https://help.tableau.com/current/pro/desktop/en-us/useracct.htm#change-notification-settings">Manage Your Account Settings</a>.</td></tr></tbody></table>

OpenID Connect Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_openid_connect.htm#create_openid_connect_configuration">Create OpenID Connect Configuration</a><br><i>- Not available for Tableau Server.</i></td><td>Create the Tableau Cloud site's OpenID Connect (OIDC) configuration.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_openid_connect.htm#get_openid_connect_configuration">Get OpenID Connect Configuration</a><br><i>- Not available for Tableau Server.</i></td><td>Get details about the Tableau Cloud site's OpenID Connect (OIDC) configuration.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_openid_connect.htm#remove_openid_connect_configuration">Remove OpenID Connect Configuration</a><br><i>- Not available for Tableau Server.</i></td><td>Disable and clear the Tableau Cloud site's OpenID Connect (OIDC) configuration.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_openid_connect.htm#update_openid_connect_configuration">Update OpenID Connect Configuration</a><br><i>- Not available for Tableau Server.</i></td><td>Update the Tableau Cloud site's OpenID Connect (OIDC) configuration.</td></tr></tbody></table>

Permissions Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_ask_data_lens_permissions">Add Ask Data Lens Permissions - Retired in API 3.22</a></td><td>Adds permissions to the specified ask data lens for a user or group. You can specify multiple sets of permissions using one request.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_collection_permissions">Add Collection Permissions</a></td><td>Adds permissions to the specified collection for a user or group. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_data_source_permissions">Add Data Source Permissions</a></td><td>Adds permissions to the specified data source for a user or group. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_default_permissions">Add Default Permissions</a></td><td>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 <a href="https://help.tableau.com/current/server/en-us/permissions.htm#LockProject" rel="noreferrer" target="_blank">locked to the project</a>, then the same is true for all existing child content of the project. For more information, see <a href="https://help.tableau.com/current/server/en-us/permissions.htm" rel="noreferrer" target="_blank">Permissions</a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_project_permissions">Add Project Permissions</a></td><td>Adds permissions to the specified project for a user or group. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_view_permissions">Add View Permissions</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_virtual_connection_permissions">Add Virtual Connection Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_workbook_permissions">Add Workbook Permissions</a></td><td>Adds permissions to the specified workbook for a user or group. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#add_workbook_to_schedule">Add Workbook to Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Adds a task to refresh or accelerate a workbook to an existing schedule on Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_ask_data_lens_permission">Delete Ask Data Lens Permission - Retired in API 3.22</a></td><td>Deletes the specified permissions to the specified ask data lens for a user or group.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_collection_permission">Delete Collection Permission</a></td><td>Removes the specified collection permission for the specified group or user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_data_source_permission">Delete Data Source Permission</a></td><td>Removes the specified data source permission for the specified group or user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_default_permission">Delete Default Permission</a></td><td>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.&nbsp;If permissions are <a href="https://help.tableau.com/current/server/en-us/permissions.htm#LockProject" rel="noreferrer" target="_blank">locked to the project</a>, then the same is true for all existing child content of the project.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_project_permission">Delete Project Permission</a></td><td>Removes the specified project permission for the specified group or user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_view_permission">Delete View Permission</a></td><td>Deletes permission to the specified view (also known as a sheet) for a Tableau Server user or group.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_virtual_connection_permission">Delete Virtual Connection Permission</a><br><i>- Available only with a Data Management license.</i></td><td>Removes the specified virtual connection permission for the specified group or user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#delete_workbook_permission">Delete Workbook Permission</a></td><td>Deletes the specified permission from the specified workbook for a group or user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#list_ask_data_lens_permissionss">List Ask Data Lens Permissions</a></td><td>List all permissions configured for the specified ask data lens that the user has read capability for.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#query_collection_permissions">List Collection Permissions</a></td><td>Returns a list of permissions for a specific collection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#query_data_source_permissions">List Data Source Permissions</a></td><td>Returns a list of permissions for a specific data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#query_default_permissions">List Default Permissions</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#query_project_permissions">List Project Permissions</a></td><td>Returns information about the set of permissions allowed or denied for groups and users in a project.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#query_view_permissions">List View Permissions</a></td><td>Returns a list of permissions for the specific view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#query_virtual_connection_permissions">List Virtual Connection Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Returns a list of permissions for a specific virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#query_workbook_permissions">List Workbook Permissions</a></td><td>Returns a list of permissions for the specific workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#replace_permissions_for_content">Replace Content Permissions</a></td><td>Replaces existing permissions in the specified content. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_permissions.htm#replace_default_permissions_for_content">Replace Project's Default Permissions</a></td><td>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 <a href="https://help.tableau.com/current/server/en-us/permissions.htm#LockProject" rel="noreferrer" target="_blank">locked to the project</a>, then the same is true for all existing child content of the project. For more information, see <a href="https://help.tableau.com/current/server/en-us/permissions.htm" rel="noreferrer" target="_blank">Permissions</a>.</td></tr></tbody></table>

Projects Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_projects.htm#create_project">Create Project</a></td><td>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 <a href="#update_project">Update Project</a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_projects.htm#delete_project">Delete Project</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_projects.htm#query_projects">Query Projects</a></td><td>Returns a list of projects on the specified site, with optional parameters for specifying the paging of large results.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_projects.htm#update_project">Update Project</a></td><td>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.</td></tr></tbody></table>

Publishing Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#append_to_file_upload">Append to File Upload</a></td><td>Uploads a block of data and appends it to the data that is already uploaded.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload">Initiate File Upload</a></td><td>Initiates the upload process for a file. After the upload has been initiated, you call <a href="#append_to_file_upload">Append to File Upload</a> to send individual blocks of the file to the server. When the complete file has been sent to the server, you call <a href="#publish_data_source">Publish Data Source</a>, <a href="#publish_flow">Publish Flow</a>, or <a href="#publish_workbook">Publish Workbook</a> to commit the upload.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#publish_data_source">Publish Data Source</a></td><td>Publishes a data source on the specified site, or appends data to an existing data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#publish_flow">Publish Flow</a></td><td>Publishes a flow on the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#publish_virtual_connection">Publish Virtual Connection</a><br><i>- Available only with a Data Management license.</i></td><td>Publishes a virtual connection on the specified site, either from a packaged virtual connection file (<code>.tvcx</code>) or from a downloaded JSON representation.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#publish_workbook">Publish Workbook</a></td><td>Publishes a workbook on the specified site.</td></tr></tbody></table>

Pulse Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_BatchCreateSubscriptions">Batch create Pulse subscriptions</a><br><i>- Not available for Tableau Server</i></td><td>Creates multiple subscriptions to a metric for specified users and/or groups.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_BatchGetMetricFollowerCounts">Batch get Pulse subscriber counts</a><br><i>- Not available for Tableau Server</i></td><td>Gets the number of unique users subscribed to a set of metrics specified in a comma separated list of metric LUIDs.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_BatchGetSubscriptions">Batch get Pulse subscriptions</a><br><i>- Not available for Tableau Server</i></td><td>Gets a batch of subscriptions, specified in a comma delimited list of subscriptions LUIDs.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_BatchGetDefinitions">Batch list metric definitions (few)</a><br><i>- Not available for Tableau Server</i></td><td>Gets the details of a batch of metric definitions and metrics on a site, specified in a brief comma delimited list of LUIDs.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_BatchGetDefinitionsByPost">Batch list metric definitions (many)</a><br><i>- Not available for Tableau Server</i></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_BatchGetMetrics">Batch list metrics (few)</a><br><i>- Not available for Tableau Server</i></td><td>Gets a batch of metrics from a definition, specified in a comma delimited list.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_BatchGetMetricsByPost">Batch list metrics (many)</a><br><i>- Not available for Tableau Server</i></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_CreateMetric">Create metric</a><br><i>- Not available for Tableau Server</i></td><td>Creates a metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_CreateDefinition">Create metric definition</a><br><i>- Not available for Tableau Server</i></td><td>Creates a metric definition.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_CreateTag">Create metric tag for user</a><br><i>- Not available for Tableau Server</i></td><td>Creates a tag for the specified metric, for the signed in user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_CreateSubscription">Create subscription</a><br><i>- Not available for Tableau Server</i></td><td>Creates a subscription to a specified metric for a specified user or group.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_DeleteMetric">Delete metric</a><br><i>- Not available for Tableau Server</i></td><td>Deletes a metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_DeleteDefinition">Delete metric definition</a><br><i>- Not available for Tableau Server</i></td><td>Deletes a metric definition.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_DeleteTag">Delete metric tag</a><br><i>- Not available for Tableau Server</i></td><td>Deletes the specified metric tag.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_DeleteSubscription">Delete Pulse subscription</a><br><i>- Not available for Tableau Server</i></td><td>Deletes a specified subscription to a metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleBasic">Generate basic insight bundle</a><br><i>- Not available for Tableau Server</i></td><td>Generates a basic insight bundle.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleBreakdown">Generate breakdown insight bundle</a><br><i>- Not available for Tableau Server</i></td><td>Generates a breakdown insight bundle. This provides the BAN and breakdown groups of insights.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleBAN">Generate current metric value insight bundle</a><br><i>- Not available for Tableau Server</i></td><td>Generates a bundle the current aggregated value for each metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleDetail">Generate detail insight bundle</a><br><i>- Not available for Tableau Server</i></td><td>Generates a detail insight bundle.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleExploration">Generate exploration insight bundle</a><br><i>- Not available for Tableau Server</i></td><td>Generates an exploration insight bundle. This provides the BAN, anchor, and followup groups of insights.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#EmbeddingsService_GenerateInsightBrief">Generate insight brief</a><br><i>- Not available for Tableau Server</i></td><td>Generates an insight brief based on a user utterance by gathering insights for the specified metrics. For supplemental information, see.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#ImageService_GenerateMetricCardImage">Generate metric card image</a><br><i>- Not available for Tableau Server</i></td><td>Generates a PNG image of a Pulse metric card with full visual parity to the web UI homepage.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GenerateInsightBundleSpringboard">Generate springboard insight bundle</a><br><i>- Not available for Tableau Server</i></td><td>Generates a springboard insight bundle.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_GetMetric">Get metric</a><br><i>- Not available for Tableau Server</i></td><td>Gets the details of the specified metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_GetDefinition">Get metric definition</a><br><i>- Not available for Tableau Server</i></td><td>Gets a metric definition and optionally metrics it contains.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_GetOrCreateMetric">Get or create metric</a><br><i>- Not available for Tableau Server</i></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_GetSubscription">Get Pulse subscription</a><br><i>- Not available for Tableau Server</i></td><td>Gets a specified subscription to a metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_GetEntitlements">Get site entitlements</a><br><i>- Not available for Tableau Server</i></td><td>Returns entitlements available for a site. If entitlements are True, then Pulse premium features are enabled for the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_GetRecommendedMetrics">Gets recommended metrics</a><br><i>- Not available for Tableau Server</i></td><td>Gets personalized groups of metrics to recommend to a user. Only metric that the user has privileges to view will be returned.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_ListFollowedMetricsGroups">List followed metrics groups</a><br><i>- Not available for Tableau Server</i></td><td>Gets the user's followed metrics. Optionally metrics can be grouped by characteristics like datasource, and sorted.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseInsightsService_GetMeasurementPeriods">List metric definition measurement periods</a><br><i>- Not available for Tableau Server</i></td><td>Gets the measurement periods for the specified metric definition.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_ListDefinitions">List metric definitions</a><br><i>- Not available for Tableau Server</i></td><td>Lists the metric definitions configured for a site or, optionally, the details and definition for a specific metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_ListMetrics">List metrics in definition</a><br><i>- Not available for Tableau Server</i></td><td>Lists the metrics contained in a metric definition.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_GetUserPreferences">List Pulse user preferences</a><br><i>- Not available for Tableau Server</i></td><td>Gets the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#AlertService_ListAlerts">List site alerts</a><br><i>- Not available for Tableau Server</i></td><td>List the alerts for the authorized user user on a specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_ListSubscriptions">List subscriptions</a><br><i>- Not available for Tableau Server</i></td><td>Lists the subscriptions to a specified metric and/or for a specified user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_ListDefinitionTags">Lists all definition tags for the site.</a><br><i>- Not available for Tableau Server</i></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_UpdateMetric">Update metric</a><br><i>- Not available for Tableau Server</i></td><td>Updates the specification of a metric.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#MetricQueryService_UpdateDefinition">Update metric definition</a><br><i>- Not available for Tableau Server</i></td><td>Updates a metric definition.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_pulse.htm#PulseSubscriptionService_UpdateUserPreferences">Update Pulse user preferences</a><br><i>- Not available for Tableau Server</i></td><td>Updates the signed in user's preferences for notifications channels and cadence, and for grouping and sorting followed metrics in REST responses and UI.</td></tr></tbody></table>

Recycle Bin Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_recycle_bin.htm#delete_all_recycle_bin_contents">Delete All Recycle Bin Contents</a></td><td>Permanently deletes all content in a site's Recycle Bin.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_recycle_bin.htm#delete_recycle_bin_content_item">Delete Recycle Bin Content Item</a></td><td>Permanently deletes the specified Recycle Bin content item.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_recycle_bin.htm#get_recycle_bin_content_item">Get Recycle Bin Content Item</a></td><td>Returns information about the specified Recycle Bin content item.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_recycle_bin.htm#list_recycle_bin_content_by_type">List Recycle Bin Content by Type</a></td><td>Gets a list of Recycle Bin content of the specified type.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_recycle_bin.htm#restore_recycle_bin_content_item">Restore Recycle Bin Content Item</a></td><td>Restores the specified content item from the Recycle Bin to a project.</td></tr></tbody></table>

Revisions Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_revisions.htm#download_data_source_revision">Download Data Source Revision</a></td><td>Downloads a specific version of a data source prior to the current one in <code>.tdsx</code> format. To down load the current version of a data source use the <a href="#download_data_source">Download Data Source</a> method.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_revisions.htm#download_workbook_revision">Download Workbook Revision</a><br><i>- Available only if version history is enabled for the specified site.</i></td><td>Downloads a specific version of a workbook in <code>.twb</code> or <code>.twbx</code> format.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_revisions.htm#get_data_source_revisions">Get Data Source Revisions</a></td><td>Returns a list of revision information (history) for the specified data source.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_revisions.htm#get_workbook_revisions">Get Workbook Revisions</a></td><td>Returns a list of revision information (history) for the specified workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_revisions.htm#remove_data_source_revision">Remove Data Source Revision</a></td><td>Removes a specific version of a data source from the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_revisions.htm#remove_workbook_revision">Remove Workbook Revision</a></td><td>Removes a specific version of a workbook from the specified site.</td></tr></tbody></table>

Server Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_server.htm#delete_server_session">Delete Server Session</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_server.htm#get-current-server-session">Get Current Server Session</a></td><td>Returns details of the current session of Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_server.htm#list_server_active_directory_domains">List Server Active Directory Domains</a><br><i>- Not available for Tableau Cloud.</i></td><td>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 <code>local</code>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_server.htm#server_info">Server Info</a></td><td>Returns the version of Tableau Server and the supported version of the REST API.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_server.htm#update_server_active_directory_domain">Update Server Active Directory Domain</a><br><i>- Not available for Tableau Cloud.</i></td><td>Changes the nickname or full domain name of an Active Directory domain on the server. This method is not available on Tableau Cloud.</td></tr></tbody></table>

Site Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#create_site">Create Site</a><br><i>- Not available for Tableau Cloud.</i></td><td>Creates a site on Tableau Server. To make changes to an existing site, call <a href="#update_site">Update Site</a>. This method isn’t available for Tableau Cloud.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#delete_site">Delete Site</a><br><i>- Not available for Tableau Cloud.</i></td><td>Deletes the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#get_data_acceleration_report">Get Data Acceleration Report for a Site</a></td><td>Returns a report about data acceleration for the site. It lets you compare page load times for before and after data acceleration is enabled.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#embedding_settings_for_site">Get Embedding Settings for a Site</a></td><td>Returns the current embedding settings for a specific site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#get_recently_viewed">Get Recently Viewed for Site</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#get_user_personal_space">Get User Personal Space</a></td><td>Gets the details of the Personal Space for the currently authenticated user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site">List Authentication Configurations for Site</a><br><i>- Not available for Tableau Server.</i></td><td>List all authentications configurations on the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#query_site">Query Site</a></td><td>Returns information about the specified site, with the option to return information about the storage space and user count for the site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#query_sites">Query Sites</a><br><i>- Not available for Tableau Cloud.</i></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#query_views_for_site">Query Views for Site</a></td><td>Returns all the views for the specified site, optionally including usage statistics.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#update_embedding_settings_for_site">Update Embedding Settings for Site</a></td><td>Updates the embedding settings for a site. Embedding settings can be used to restrict embedding Tableau views to only certain domains.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#update_site">Update Site</a><br><i>- Not available for Tableau Cloud.</i></td><td>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.</td></tr></tbody></table>

Subscriptions Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#create_subscription">Create Subscription</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#delete_subscription">Delete Subscription</a></td><td>Deletes the specified subscription on Tableau Server or Tableau Cloud.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#get_subscription">Get Subscription</a></td><td>Returns information about the specified subscription.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#list_subscriptions">List Subscriptions</a></td><td>Returns a list of all the subscriptions on the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#update_subscription">Update Subscription</a></td><td>Modifies an existing subscription on Tableau Server. You can change the subject, server schedule, and suspension state for the subscription.</td></tr></tbody></table>

Tableau Extensions Settings Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm#list_tableau_extensions_server_settings">List Tableau extensions server settings</a><br><i>- Not available for Tableau Cloud.</i></td><td>Lists the settings for extensions of a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm#list_tableau_extensions_site_settings">List Tableau extensions site settings</a></td><td>Lists the settings for extensions of a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm#update_tableau_extensions_server_settings">Update Tableau extensions server settings</a><br><i>- Not available for Tableau Cloud.</i></td><td>Updates the settings for extensions of a server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_extensions_settings.htm#update_tableau_extensions_site_settings">Update Tableau extensions site settings</a></td><td>Updates the settings for extensions of a site.</td></tr></tbody></table>

Tableau Knowledge Graph Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#create_semantic_context">Create a semantic context</a><br><i>- Not available for Tableau Server</i></td><td>Create a semantic context node carrying one or more statements.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#delete_semantic_context">Delete a semantic context</a><br><i>- Not available for Tableau Server</i></td><td>Delete a semantic context created and managed in Tableau Knowledge, along with its statements.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#get_node">Get a node by ID</a><br><i>- Not available for Tableau Server</i></td><td>Get a single node by its ID, including its semantic statements and directly connected nodes.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#search_suggestions">Get graph-health suggestions</a><br><i>- Not available for Tableau Server</i></td><td>Get a report on the health of the graph, including a score and suggested improvements.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#get_node_impact">Get the downstream impact of a node</a><br><i>- Not available for Tableau Server</i></td><td>Get the assets that depend on a node, to see the impact if it changes.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#get_lineage">Get the lineage of a node</a><br><i>- Not available for Tableau Server</i></td><td>Get the lineage neighborhood of a node.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#search_edges">List edges around a node</a><br><i>- Not available for Tableau Server</i></td><td>List the edges connected to a node.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#list_graphs">List knowledge graphs</a><br><i>- Not available for Tableau Server</i></td><td>List the knowledge graphs on the caller's Tableau site, each with its ID, name, description, status, and.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#search_sources">List knowledge sources</a><br><i>- Not available for Tableau Server</i></td><td>List the data sources and workbooks connected to the graph.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#search_nodes">Search graph nodes</a><br><i>- Not available for Tableau Server</i></td><td>Search graph nodes using natural-language semantic search.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#search_semantic_contexts">Search semantic contexts</a><br><i>- Not available for Tableau Server</i></td><td>Search semantic contexts across the graph.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#search_node_semantic_contexts">Search semantic contexts attached to a node</a><br><i>- Not available for Tableau Server</i></td><td>Search the semantic contexts attached to a specific node.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_knowledge_graph.htm#update_semantic_context">Update a semantic context</a><br><i>- Not available for Tableau Server</i></td><td>Partially update a semantic context.</td></tr></tbody></table>

Tableau MCP Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_mcp.htm#create_tableau_mcp_settings_for_site">Create Tableau MCP Settings for Site</a></td><td>Replaces the current list of Tableau MCP settings for a given site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_mcp.htm#get_tableau_mcp_settings_for_site">Get Tableau MCP Settings for Site</a></td><td>Gets the list of Tableau MCP settings for a specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_tableau_mcp.htm#update_tableau_mcp_settings_for_site">Update Tableau MCP Settings for Site</a></td><td>Updates the current list of Tableau MCP settings for a specified site.</td></tr></tbody></table>

Users and Groups Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_group_to_group_set">Add Group to Group Set</a></td><td>Adds group to a group set.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_group">Add User to Group</a></td><td>Adds a user to the specified group.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site">Add User to Site</a></td><td>Adds a user to Tableau Server or Tableau and assigns the user to the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_group">Create Group</a></td><td>Creates a group on a Tableau Cloud site or Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_group_set">Create Group Set</a></td><td>Creates a group set with a specified name.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_scim_configuration">Create SCIM Configuration</a><br><i>- Not available for Tableau Server.</i></td><td>Creates the System for Cross-domain Identity Management Configuration (SCIM) configuration on the Tableau Cloud site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#create_scim_token">Create SCIM Token</a></td><td>Generates the System for Cross-domain Identity Management (SCIM) token and secret.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_group">Delete Group</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_group_set">Delete Group Set</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_scim_configuration">Delete SCIM Configuration</a><br><i>- Not available for Tableau Server.</i></td><td>Permanently removes the System for Cross-domain Identity Management (SCIM) configuration from the Tableau Cloud site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_scim_token">Delete SCIM Token</a><br><i>- Not available for Tableau Server.</i></td><td>Permanently removes the System for Cross-domain Identity Management (SCIM) token.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#delete_users_from_site_with_csv">Delete Users from Site with CSV</a></td><td>Creates a job to remove a list of users, specified in a .csv file, from a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#download_user_credentials">Download User Credentials</a></td><td>Gets credentials for a user who is being migrated to another Tableau Cloud or Tableau Server site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#get_group_set">Get Group Set</a></td><td>Returns information about the specified group set including ID, name, and member groups.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#get_groups_for_a_user">Get Groups for a User</a></td><td>Gets a list of groups of which the specified user is a member.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#get_scim_configuration">Get SCIM Configuration</a><br><i>- Not available for Tableau Server.</i></td><td>Gets the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#get_users_in_group">Get Users in Group</a></td><td>Gets a list of users in the specified group.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#get_users_on_site">Get Users on Site</a></td><td>Returns the users associated with the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#import_users_to_site_from_csv">Import Users to Site from CSV</a></td><td>Creates a job to import the users listed in a specified .csv file to a site, and assign their roles and authorization settings.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#list_group_sets">List Group Sets</a></td><td>Lists all group sets matching optional filter and ordered by optional sort expression.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#list_scim_configurations">List SCIM Configurations</a><br><i>- Not available for Tableau Server.</i></td><td>Returns the System for Cross-domain Identity Management Configuration (SCIM) configurations on the Tableau Cloud site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#query_groups">Query Groups</a></td><td>Returns a list of groups on the specified site, with optional parameters for specifying the paging of large results.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#query_user_on_site">Query User On Site</a></td><td>Returns information about the specified user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#remove_group_from_group_set">Remove Group from Group Set</a></td><td>Removes a group from the specified group set.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#remove_user_to_group">Remove User from Group</a></td><td>Removes a user from the specified group.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#remove_user_from_site">Remove User from Site</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_group">Update Group</a></td><td>Updates a group on a Tableau Cloud site or Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_group_set">Update Group Set</a></td><td>Updates a group set name on a Tableau Server or Tableau Cloud site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_scim_configuration">Update SCIM Configuration</a><br><i>- Not available for Tableau Server.</i></td><td>Updates the System for Cross-domain Identity Management (SCIM) configuration on the Tableau Cloud site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user">Update User</a></td><td>Modifies information about the specified user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#upload_user_credentials">Upload User Credentials</a></td><td>Uploads user credentials to a site on a destination Tableau Cloud or Tableau Server.</td></tr></tbody></table>

Virtual Connections Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#add_tags_to_virtual_connection">Add Tags to Virtual Connection</a><br><i>- Available only with a Data Management license.</i></td><td>Adds tags to a virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#add_virtual_connection_permissions">Add Virtual Connection Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Adds permissions to the specified virtual connection for a user or group. You can specify multiple sets of permissions using one call.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#add_virtual_connection_to_schedule">Add Virtual Connection to Server Schedule</a><br><i>- Not available for Tableau Cloud.</i></td><td>Adds a task to refresh a virtual connection to an existing server schedule on Tableau Server.<br><i>For Tableau Cloud, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#create_cloud_extract_refresh_task">Create Cloud Extract Refresh Task</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#create_cloud_extract_refresh_task">Create Cloud Extract Refresh Task</a><br><i>- Not available for Tableau Server.</i></td><td>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.<br><i>For Tableau Server, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_data_source_to_schedule">Add data source to server schedule</a>, <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_workbook_to_schedule">Add workbook to server schedule</a>, and <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#add_virtual_connection_to_schedule">Add virtual connection to server schedule</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#delete_extracts_from_virtual_connection">Delete Extracts from Virtual Connection</a><br><i>- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.</i></td><td>Deletes the extracts from a virtual connection, which changes it from extract to live mode.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#delete_tag_from_virtual_connection">Delete Tag from Virtual Connection</a><br><i>- Available only with a Data Management license.</i></td><td>Deletes a tag from a virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#delete_virtual_connection">Delete Virtual Connection</a><br><i>- Available only with a Data Management license.</i></td><td>Deletes a virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#delete_virtual_connection_permission">Delete Virtual Connection Permission</a><br><i>- Available only with a Data Management license.</i></td><td>Removes the specified virtual connection permission for the specified group or user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection">Download Virtual Connection</a><br><i>- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.</i></td><td>Downloads a virtual connection in <code>.tvcx</code> format.<br><i>To download a JSON representation of a virtual connection instead, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json">Download Virtual Connection as JSON</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json">Download Virtual Connection as JSON</a><br><i>- Available only with a Data Management license.</i></td><td>Downloads a JSON-representation of a virtual connection.<br><i>To download a virtual connection as a <code>.tvcx</code> file, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection">Download Virtual Connection</a>.</i></td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_revision_as_json">Download Virtual Connection Revision as JSON</a><br><i>- Available only with a Data Management license.</i></td><td><a name="Download"></a>Downloads a JSON-representation of an earlier revision of a virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#list_virtual_connection_database_connections">List Virtual Connection Database Connections</a><br><i>- Available only with a Data Management license.</i></td><td>Returns information about database connections in the specified virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#query_virtual_connection_permissions">List Virtual Connection Permissions</a><br><i>- Available only with a Data Management license.</i></td><td>Returns a list of permissions for a specific virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#get_virtual_connection_revisions">List Virtual Connection Revisions</a><br><i>- Available only with a Data Management license.</i></td><td>Lists revisions for a virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#list_virtual_connections">List Virtual Connections</a><br><i>- Available only with a Data Management license.</i></td><td>Returns a list of available virtual connection names and IDs.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#publish_virtual_connection">Publish Virtual Connection</a><br><i>- Available only with a Data Management license.</i></td><td>Publishes a virtual connection on the specified site, either from a packaged virtual connection file (<code>.tvcx</code>) or from a downloaded JSON representation.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#update_virtual_connection">Update Virtual Connection</a><br><i>- Available only with a Data Management license.</i></td><td>Updates a virtual connection's name, owner, project, or certification status.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#update_virtual_connection_database_connections">Update Virtual Connection Database Connections</a><br><i>- Available only with a Data Management license.</i></td><td>Updates the server address, port, username, or password for the specified database connection in a virtual connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#update_virtual_connection_now">Update Virtual Connection Now</a><br><i>- Available with a Data Management, Enterprise, Server+, Cloud+, or Tableau+ Bundle license.</i></td><td>Runs an extract refresh on the specified virtual connection.</td></tr></tbody></table>

Workbooks and Views Methods

<table class="api-error-table"><colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup><tbody><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#add_tags_to_view">Add Tags to View</a></td><td>Adds one or more tags to the specified view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#add_tags_to_workbook">Add Tags to Workbook</a></td><td>Adds one or more tags to the specified workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_custom_view">Delete Custom View</a></td><td>Deletes the specified custom view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_tag_from_view">Delete Tag from View</a></td><td>Deletes a tag from the specified view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_tag_from_workbook">Delete Tag from Workbook</a></td><td>Deletes a tag from the specified workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_view">Delete View</a></td><td>Deletes a view from a workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#delete_workbook">Delete Workbook</a></td><td>Deletes a workbook. When a workbook is deleted, all of its assets are also deleted, including associated views, data connections, and so on.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_view_excel">Download View Crosstab Excel</a></td><td>Downloads an Excel (<code>.xlsx</code>) 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 <code>.xlsx</code> file. Downloads of data from story dashboards are not supported at this time.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_workbook">Download Workbook</a></td><td>Downloads a workbook in <code>.twb</code> or <code>.twbx</code> format.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_workbook_encrypted_keychain">Download Workbook Encrypted Keychain</a></td><td>Gets an encrypted version of the embedded credentials from the workbook. These credentials can only be migrated to the linked destination&nbsp;Tableau Cloud or Tableau Server.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_workbook_pdf">Download Workbook PDF</a></td><td>Downloads a <code>.pdf</code> containing images of the sheets that the user has permission to view in a workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_workbook_powerpoint">Download Workbook PowerPoint</a></td><td>Downloads a PowerPoint (<code>.pptx</code>) file containing slides with images of the sheets that the user has permission to view in a workbook. <span class="api-command-ref">Download Images/PDF</span> permissions must be enabled for the workbook (true by default). If <span class="api-command-ref">Show sheets in tabs</span> is not selected for the workbook, only the default tab will appear in the <code>.pptx</code> file.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#download_workbook_revision">Download Workbook Revision</a><br><i>- Available only if version history is enabled for the specified site.</i></td><td>Downloads a specific version of a workbook in <code>.twb</code> or <code>.twbx</code> format.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_custom_view">Get Custom View</a></td><td>Gets the details of a specified custom view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_custom_view_data">Get Custom View Data</a></td><td>Returns a specified custom view rendered as data in comma separated value (CSV) format.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_custom_view_image">Get Custom View Image</a></td><td>Downloads an image file of the specified custom view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_custom_view_pdf">Get Custom View PDF</a></td><td>Returns a specified custom view rendered as a .pdf file.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_view_recommendations">Get Recommendations for Views - Deprecated in API 3.19</a></td><td>Gets a list of views that are recommended for a user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_view">Get View</a></td><td>Gets the details of a specific view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_view_by_path">Get View by Path</a></td><td>Gets the details of all views in a site with a specified name.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbook">Get Workbook</a></td><td>Returns information about the specified workbook, including information about views and tags.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_workbook_downgrade_info">Get Workbook Downgrade Info</a></td><td>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).</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#get_workbook_revisions">Get Workbook Revisions</a></td><td>Returns a list of revision information (history) for the specified workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#hide_view_recommendation">Hide a Recommendation for a View - Deprecated in API 3.19</a></td><td>Hides a view from being recommended by the server by adding it to a list of views that are dismissed for a user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#list_custom_views">List Custom Views</a></td><td>Gets a list of custom views on a site. The list includes details of each custom view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#list_users_with_custom_view_as_default">List Users with Custom View as Default</a></td><td>Gets the list of users whose default view is the specified custom view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#publish_workbook">Publish Workbook</a></td><td>Publishes a workbook on the specified site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_view_data">Query View Data</a></td><td>Returns a specified view rendered as data in comma separated value (CSV) format.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_view_image">Query View Image</a></td><td>Downloads an image file of the specified view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_view_pdf">Query View PDF</a></td><td>Returns a specified view rendered as a .pdf file.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_view_with_preview">Query View Preview Image</a></td><td>Returns the thumbnail image for the specified view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_views_for_site">Query Views for Site</a></td><td>Returns all the views for the specified site, optionally including usage statistics.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_views_for_workbook">Query Views for Workbook</a></td><td>Returns all the views for the specified workbook, optionally including usage statistics.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbook_connections">Query Workbook Connections</a></td><td>Returns a list of data connections for the specific workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbook_preview_image">Query Workbook Preview Image</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbooks_for_site">Query Workbooks for Site</a></td><td>Returns the workbooks on a site.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbooks_for_user">Query Workbooks for User</a></td><td>Returns the workbooks that the specified user owns in addition to those that the user has <span class="api-command-ref">Read</span> (view) permissions for.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#set_custom_view_as_default_for_users">Set Custom View as Default for Users</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#unhide_view_recommendation">Unhide a Recommendation for a View - Deprecated in API 3.19</a></td><td>Unhides a view from being recommended by the server by removing it from the list of views that are dimissed for a user.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_custom_view">Update Custom View</a></td><td>Changes the owner or name of an existing custom view.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook">Update Workbook</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection">Update Workbook Connection</a></td><td>Updates the server address, port, authentication type, username, or password for the specified workbook connection.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connections">Update Workbook Connections</a></td><td>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_connection" target="_blank">Update Workbook Connection</a>.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_now">Update Workbook Now</a></td><td>Refreshes the specified workbook.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook_thumbnail_images">Update Workbook Thumbnail Images</a></td><td>Updates a workbook's thumbnail images.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#upload_workbook_encrypted_keychain">Upload Workbook Encrypted Keychain</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#validate_uploaded_workbook">Validate Uploaded Workbook</a></td><td>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.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#validate_workbook">Validate Workbook</a></td><td>Validates a Tableau workbook (TWB) file against the TWB XSD schema and verifies that it can be loaded in Tableau.</td></tr><tr><td><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#validate_workbook_and_upload">Validate Workbook and Upload</a></td><td>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.</td></tr></tbody></table>

## 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

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

#### Request Body

                    `<tsRequest>   <permissions>     <lens id="lens-luid" />     <granteeCapabilities>       <user id="user-luid" />       <capabilities>         <capability name="capability-name" mode="capability-mode" />         ... additional capabilities ...       </capabilities>     </granteeCapabilities>     <granteeCapabilities>       <group id="group-luid" />       <capabilities>         <capability name="capability-name" mode="capability-mode" />         ... additional capabilities ...       </capabilities>     </granteeCapabilities>     ... additional grantee capability sets ...   </permissions> </tsRequest>`
        

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">lens-luid</span>
                                            </td>
                                            <td>Required. The LUID of the ask data lens permissions are being configured for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-luid</span>
                                            </td>
                                            <td>Optional <i>(at least one user or group must be specified)</i>. The LUID of the user to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-luid</span>
                                            </td>
                                            <td>Optional. The LUID of the group to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                   The capability to assign. For valid capabilities for a data source project are
                       <span class="api-command-ref">ChangePermissions</span>,
                       <span class="api-command-ref">Delete</span>,
                       <span class="api-command-ref">Move</span>,
                       <span class="api-command-ref">Read</span>,
					   <span class="api-command-ref">Write</span>.
						<p>For more information, see
<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.
				  </p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to allow the capability,
                                    or <span class="api-command-ref">Deny</span> to deny it. This value is case sensitive.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <permissions>
    <lens id="lens-luid"  name ="lens-name" />
    <granteeCapabilities>
      <user id="user-luid" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        <!--    ... additional capabilities ... -->
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-luid" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        <!--   ... additional capabilities ...  -->
      </capabilities>
    </granteeCapabilities>
    <!--   ... additional grantee capability sets ...   -->
  </permissions>
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The specified capability is invalid for a data source. Valid capabilities for a data source are <span class="api-command-ref">ChangePermissions</span>, <span class="api-command-ref">Delete</span>, <span class="api-command-ref">Move</span>, <span class="api-command-ref">Read</span>, and <span class="api-command-ref">Write</span>.</td></tr><tr><td>403</td><td>403004</td><td>No permissions to set permissions.</td><td>A user attempted to add permissions to a data source, but the caller doesn't have permission to set permissions on the data source.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user specified in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404006</td><td>Lens not found</td><td>The specified lens doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group specified in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>A 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 <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <permissions>
    <granteeCapabilities>
      <user id="user-id" />
        <capabilities>
          <capability name="capability-name" mode="capability-mode" />
          <!-- ... additional capabilities ... -->
        </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
        <capabilities>
          <capability name="capability-name" mode="capability-mode" />
          <!-- ... additional capabilities ... -->
        </capabilities>
    </granteeCapabilities>
    <!-- ... additional granteeCapability sets ... -->
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">user-id</span>
                                    </td>
                                    <td>The ID  of the user to add permissions for.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">group-id</span>
                                    </td>
                                    <td>The ID  of the group to add permissions for.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">capability-name</span>
                                    </td>
                                    <td>
                                        <p>The capability to assign. The only valid capability for a collection is <span class="api-command-ref">Read</span>.</p>
                                        <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">capability-mode</span>
                                    </td>
                                    <td><span class="api-command-ref">Allow</span> to allow the capability,
                                    or <span class="api-command-ref">Deny</span> to deny it.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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

```
<tsResponse>
  <permissions>
    <collection id="1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" name="My Collection">
      <owner id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd"/>
    </collection>
    <granteeCapabilities>
      <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"/>
      <capabilities>
        <capability name="Read" mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <user id="#9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
      <capabilities>
        <capability name="Read" mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403004</td>
                                    <td>No permissions to set permissions.</td>
                                    <td>A user attempted to add permissions to a collection, but the caller doesn't have permission to set permissions on the collection.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Resource not found</td>
                                    <td>The site ID in the URI wasn't found.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404002</td>
                                    <td>User not found</td>
                                    <td>The user in the request body wasn't found.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404012</td>
                                    <td>Group not found</td>
                                    <td>The group in the request body wasn't found.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404013</td>
                                    <td>Resource not found</td>
                                    <td>
                                        <p>The capability to remove the permission for. The only valid capability name for a collection is <span class="api-command-ref">Read</span>. The only valid capability mode is <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span>.</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

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

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-id</span>
                                        </td>
                                        <td>The unique ID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-type</span>
                                        </td>
                                        <td>
                            The type of asset that the data quality warning is being attached to. To specify the  type, use:
                            <ul><li><span class="uicontrol">database</span></li><li><span class="uicontrol">table</span></li><li><span class="uicontrol">column</span> <i>- Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)</i></li><li><span class="uicontrol">datasource</span></li><li><span class="uicontrol">flow</span></li><li><span class="uicontrol">virtual connection</span></li><li><span class="uicontrol">virtual connection table</span></li></ul><p>These values are not case sensitive.</p></td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-luid</span>
                                        </td>
                                        <td>
                            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.
                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### Request Body

```
<tsRequest>
  <dataQualityWarning type="type" isActive="state" message="message" isSevere="severity"/>
</tsRequest>
```

#### Attribute Values

Any combination of attributes inside the **<dataQualityWarning>** element is valid, but the data quality warning type is required. If the data quality warning type is not included, an error is thrown.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">type</span>
                                    </td>
                                    <td>
                                        <p>Type of data quality warning to apply to the asset. To specify the type, use one of the following values:</p>
                                        <ul>
                                            <li><span class="uicontrol">DEPRECATED</span>
                                            </li>
                                            <li><span class="uicontrol">WARNING</span>
                                            </li>
                                            <li><span class="uicontrol">STALE</span>
                                            </li>
                                            <li><span class="uicontrol">SENSITIVE_DATA</span>
                                            </li>
                                            <li><span class="uicontrol">MAINTENANCE</span>
                                            </li>
                                        </ul>
                                        <p>These values are case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">state</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Controls whether the data quality warning displays. Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". 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 <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm">Cloud Help</a>.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">message</span>
                                    </td>
                                    <td>
                                        <p>(Optional. Was required in Tableau Server 2023.3 and earlier.)</p>
                                        <p>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/Img/formatting_guide.png" target="_blank">formatting guide</a> that's normally visible as a tooltip in the UI.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">severity</span>
                                    </td>
                                    <td>(Optional) Enables high visibility for the data quality warning when set to "<span class="uicontrol">true</span>". Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm#high_visibility">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm#high_visibility">Cloud Help</a>. </td>
                                </tr>
                            </tbody>
                        </table>

#### 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:**

```
<tsResponse>
   <dataQualityWarning id="1c8ebdfc-270a-4414-812c-3306a1c95e07" userDisplayName="Steve Nguyen"
	contentId="0d7465f2-4989-417e-b88d-f787359edc63" contentType="DATABASE" message="Delayed"
	type="WARNING" isActive="true" createdAt="2020-10-08T00:00:35Z" isSevere="false">
	<site id="a946d998-2ead-4894-bb50-1054a91dcab3"/>
	<owner id="cdfe8548-84c8-418e-9b33-2c0728b1234a"/>
   </dataQualityWarning>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400108</td><td>Generic add data quality warning error</td><td>The data quality warning could not be added for some other reason than those specified in this table.</td></tr><tr><td>400</td><td>400109</td><td>Bad request</td><td>The request body is missing the data quality warning type.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The requested asset could not be found.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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 <project> element, the request is invalid.

#### URI

PUT /api/api-version/sites/site-id/datasources/datasource-id/permissions

#### Parameter Values

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

#### Request Body

```
<tsRequest>
  <permissions>
    <datasource id="datasource-id" />
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">datasource-id</span>
                                            </td>
                                            <td>
                  The <span class="api-command-ref">&lt;datasource&gt;</span> element is not required, but can be included for compatibility
					with earlier versions of the REST API. If the <span class="api-command-ref">&lt;datasource&gt;</span> element is included,
					the <span class="api-placeholder">datasource-id</span> value must match the data source ID in the URI. Any other attributes
					in the <span class="api-command-ref">&lt;datasource&gt;</span> element are ignored.
              </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID (not name) of the user to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID (not name) of the group to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                   The capability to assign. For valid capabilities for a data source project are
					   <span class="api-command-ref">PulseMetricDefine</span>,
                       <span class="api-command-ref">ChangePermissions</span>,
                       <span class="api-command-ref">Connect</span>,
                       <span class="api-command-ref">Delete</span>,
                       <span class="api-command-ref">ExportXml</span>, <strong>ExtractRefresh</strong>,<span class="api-command-ref">Read</span> (view),
						<span class="api-command-ref">Write</span>, and
						<span class="api-command-ref">SaveAs</span>.
						<p>For more information, see
<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.
				  </p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to allow the capability,
                                    or <span class="api-command-ref">Deny</span> to deny it. This value is case sensitive.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse version-and-namespace-settings>
  <permissions>
    <datasource id="datasource-id" />
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The specified capability is invalid for a data source. Valid capabilities for a data source are <span class="api-command-ref">ChangePermissions</span>, <span class="api-command-ref">Connect</span>, <span class="api-command-ref">Delete</span>, <span class="api-command-ref">ExportXml</span>, <span class="api-command-ref">Read</span>, and <span class="api-command-ref">Write</span>.</td></tr><tr><td>403</td><td>403004</td><td>No permissions to set permissions.</td><td>A user attempted to add permissions to a data source, but the caller doesn't have permission to set permissions on the data source.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user specified in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The specified data source doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group specified in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>A 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 <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <favorite label="favorite-label">
    <datasource id="datasource-id" />
  </favorite>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">favorite-label</span></td><td>A label to assign to the favorite. This value is displayed when you search for favorites on the server.</td></tr><tr><td><span class="api-placeholder">datasource-id</span></td><td>The ID of the data source to add as a favorite.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <favorites>
    <favorite label="favorite-label">
     <datasource id="datasource-id" />
    </favorite>
    <favorite label="favorite-label">
     <datasource id="datasource-id" />
    </favorite>
    ... additional favorites ...
  </favorites>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400005</td><td>Invalid label</td><td>The favorite label is empty or consists of only white space characters.</td></tr><tr><td>403</td><td>403004</td><td>Forbidden favorites access</td><td>A 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.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404011</td><td>Data source not found</td><td>The data source ID in the request body doesn't correspond to an existing data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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/current/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

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

#### Request Body

```
<tsRequest>
  <task>
    <extractRefresh>
      <datasource id="datasource-id" />
    </extractRefresh>
  </task>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">datasource-id</span></td><td>The ID of the data source to add to the schedule.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <task>
    <extractRefresh>
      <schedule id="schedule-id" />
      <datasource id="datasource-id" />
    </extractRefresh>
  </task>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403032</td><td>Update Forbidden</td><td>A non-administrator user called this method, but the caller doesn't have sufficient permissions.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI is unknown.</td></tr><tr><td>404</td><td>404004</td><td>Resource not found</td><td>The data source ID in the request body is unknown.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr><tr><td>500</td><td>500000</td><td>Internal Server Error</td><td>The schedule ID in the URI is unknown.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/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:**

```
<tsRequest>
  <task>
    <extractRefresh>
      <datasource id="89a82d78-664f-45a1-8256-d4d2961a070b" />
    </extractRefresh>
  </task>
</tsRequest>
						
```

**Example response:**

```
<tsResponse>
  <task>
    <extractRefresh id="9bf8aea0-e3ca-422e-b7ef-d9c4ba6cca45" priority="50" consecutiveFailedCount="0" type="RefreshExtractTask">
      <schedule id="9a4ebbab-9ec8-487a-9b48-47fa81d6077a" name="Weekday early mornings" state="Active" />
      <datasource id="89a82d78-664f-45a1-8256-d4d2961a070b" />
    </extractRefresh>
  </task>
</tsResponse>
							
```

## 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

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

#### Request Body

```
<tsRequest>
  <permissions>
    <database id="8d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" />
    <granteeCapabilities>
      <user id="user-luid" />
      <capabilities>
        <capability name="ChangePermissions" mode="allow" />
        <!-- ...  additional capabilities ... -->
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-luid" />
 	  <capabilities>
	    <capability name="Read" mode="Allow" />
	    <!-- ...  additional capabilities ... -->
	  </capabilities>
	</granteeCapabilities>
    <!-- ... additional grantee capability sets ...  -->
  </permissions>
</tsRequest>
```

#### 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

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><code>database</code>
                                    </td>
                                    <td>The LUID of the database asset you want to add permissions to.</td>
                                </tr>
                                <tr>
                                    <td><code>user id</code>
                                    </td>
                                    <td>The LUID of the user to add permissions for.</td>
                                </tr>
                                <tr>
                                    <td><code>capability name</code>
                                    </td>
                                    <td>
                                        <p>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:</p>
                                        <ul>
                                            <li><b>Read</b> (view)</li>
                                            <li><b>Write</b> (edit)</li>
                                            <li><b>ChangePermissions</b> (set permissions)</li>
                                            <li><b>ChangeHierarchy</b> (move)</li>
                                        </ul>
                                        <p>These values are case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>capability mode</code>
                                    </td>
                                    <td>
                                        <p>Use one of the following capabilities:</p>
                                        <ul>
                                            <li><b>Allow</b>
                                            </li>
                                            <li><b>Deny</b>
                                            </li>
                                        </ul>
                                        <p>These values are case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>group id</code>
                                    </td>
                                    <td>The LUID of the group to add permissions for.</td>
                                </tr>
                            </tbody>
                        </table>

#### Response Code

200

#### Response Body

```
<tsResponse>
  <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"/>
	  </capabilities>
	</granteeCapabilities>
  </permissions>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Permissions could not be added because support for explicit permissions is available for database assets associated with published data sources only.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The requested database could not be found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="uicontrol">PUT</span>.</td></tr><tr><td>409</td><td>409045</td><td>Database error</td><td>An unknown database asset error occurred.</td></tr><tr><td>409</td><td>409050</td><td>Database update error</td><td>An unknown error occurred and the database asset could not be updated.</td></tr><tr><td>409</td><td>409051</td><td>Database update forbidden</td><td>A user without "write"&nbsp;permissions to the database asset attempted an update.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <permissions>
    <granteeCapabilities>
      <user id="user-luid" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <!-- ... additional capabilities ... -->
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-luid" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <!-- ...  additional capabilities ... -->
      </capabilities>
    </granteeCapabilities>
    <!-- ... additional grantee capability sets ... -->
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-extra-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">user-luid</span>
                                        </td>
                                        <td>The LUID of the user to add default permissions for.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">group-luid</span>
                                        </td>
                                        <td>The LUID of the group to add permissions for.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">capability-name</span>
                                        </td>
                                        <td>
                                            <p>                                     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:                                    </p>
                                            <ul>
                                                <li><b>Read</b> (view)
                                </li>
                                                <li><b>Write</b> (edit)
                                </li>
                                                <li><b>ChangePermissions</b> (set permissions)</li>
                                                <li><b>ChangeHierarchy</b> (move)</li>
                                            </ul>
                                            <p>These values are case sensitive.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">capability-mode</span>
                                        </td>
                                        <td>
                                            <p>Use one of the following capabilities: </p>
                                            <ul>
                                                <li><span class="api-command-ref">Allow</span>
                                                </li>
                                                <li><span class="api-command-ref">Deny</span>
                                                </li>
                                            </ul>
                                            <p>These values are case sensitive.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### 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

```
<tsResponse>
  <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"/>
	  </capabilities>
	</granteeCapabilities>
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to add permissions on the project.</td></tr><tr><td>403</td><td>403114</td><td>Permissions setting forbidden</td><td>Default permissions cannot be added because the database asset is locked.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404003</td><td>Resource not found</td><td>The database LUID&nbsp;in the URI doesn't correspond to a database asset on the site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>A user LUID in the request body as the grantee doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group LUID in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>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 <b>Allow</b> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

## 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/current/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

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

#### Request Body

```
<tsRequest>
  <permissions>
	<granteeCapabilities>
	  <user id="user-luid" />
      <capabilities>
	    <capability name="capability-name" mode="capability-mode" />
	    < !-- ... additional capabilities ... -->
	  </capabilities>
	</granteeCapabilities>
	<granteeCapabilities>
      <group id="group-luid" />
	  <capabilities>
		<capability name="capability-name" mode="capability-mode" />
		< !-- ...  additional capabilities ... -->
	  </capabilities>
	</granteeCapabilities>
    < !-- ... additional grantee capability sets ...  -->
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">user-luid</span>
                                            </td>
                                            <td>The LUID of the user to add default permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-luid</span>
                                            </td>
                                            <td>The LUID of the group to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>The capability to assign. Valid capabilities for a workbook are
					</p><ul><li><span class="api-command-ref">AddComment</span></li><li><span class="api-command-ref">ChangeHierarchy</span></li><li><span class="api-command-ref">ChangePermissions</span></li><li><span class="api-command-ref">Delete</span></li><li><span class="api-command-ref">ExportData</span></li><li><span class="api-command-ref">ExportImage</span></li><li><span class="api-command-ref">ExportXml</span></li><li><span class="api-command-ref">Filter</span></li><li><span class="api-command-ref">Read</span> (view)</li><li><span class="api-command-ref">ShareView</span></li><li><span class="api-command-ref">ViewComments</span></li><li><span class="api-command-ref">ViewUnderlyingData</span></li><li><span class="api-command-ref">WebAuthoring</span></li><li><span class="api-command-ref">Write</span></li><li><span class="api-command-ref">RunExplainData</span></li><li><span class="api-command-ref">CreateRefreshMetrics</span></li></ul><p></p>
                                                <p>Valid capabilities for a data source are
					</p><ul><li><span class="api-command-ref">ChangePermissions</span></li><li><span class="api-command-ref">Connect</span></li><li><span class="api-command-ref">Delete</span></li><li><span class="api-command-ref">ExportXml</span></li><li><span class="api-command-ref">SaveAs</span></li><li><span class="api-command-ref">Read</span> (view)</li><li><span class="api-command-ref">Write</span></li></ul><p></p>
                                                <p>Valid capabilities for a flow are
					</p><ul><li><span class="api-command-ref">ChangeHierarchy</span></li><li><span class="api-command-ref">ChangePermissions</span></li><li><span class="api-command-ref">Delete</span></li><li><span class="api-command-ref">ExportXml</span> (download)</li><li><span class="api-command-ref">Execute</span></li><li><span class="api-command-ref">Read</span> (view)</li><li><span class="api-command-ref">WebAuthoringForFlows</span></li><li><span class="api-command-ref">Write</span></li></ul><p></p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to allow the capability, or <span class="api-command-ref">Deny</span> to deny it. This value is case sensitive.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <permissions>
	<database id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd" name="oracle.test.example.com:1521"/>
	<granteeCapabilities>
	  <user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
	  <capabilities>
		<capability name="Read" mode="Allow"/>
		</capabilities>
	</granteeCapabilities>
  </permissions>
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400009</td>
                                            <td>Invalid capability</td>
                                            <td>                                         The capability in the URI is invalid for a data source.                                       <p>Valid capabilities for a workbook are                                     <span class="api-command-ref">AddComment</span>,                                     <span class="api-command-ref">ChangeHierarchy</span>,                                     <span class="api-command-ref">ChangePermissions</span>,     <span class="api-command-ref">CreateRefreshMetrics</span>,                                <span class="api-command-ref">Delete</span>,                                     <span class="api-command-ref">ExportData</span>,                                     <span class="api-command-ref">ExportImage</span>,                                     <span class="api-command-ref">ExportXml</span>,                                     <span class="api-command-ref">Filter</span>,                                     <span class="api-command-ref">Read</span> (view),        <span class="api-command-ref">RunExplainData</span>,                             <span class="api-command-ref">ShareView</span>,                                     <span class="api-command-ref">ViewComments</span>,                                     <span class="api-command-ref">ViewUnderlyingData</span>,                                     <span class="api-command-ref">WebAuthoring</span>, and                                     <span class="api-command-ref">Write</span>.</p><p>Valid capabilities for a data source are                                     <span class="api-command-ref">ChangePermissions</span>,                                     <span class="api-command-ref">Connect</span>,                                     <span class="api-command-ref">Delete</span>,                                     <span class="api-command-ref">ExportXml</span>,                                     <span class="api-command-ref">Read</span> (view), and                                     <span class="api-command-ref">Write</span>.</p></td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400042</td>
                                            <td>Malformed permissions qualifier</td>
                                            <td>The request body includes a <span class="api-command-ref">&lt;workbook&gt;</span> or <span class="api-command-ref">&lt;datasource&gt;</span> element.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403004</td>
                                            <td>Permissions setting forbidden</td>
                                            <td>A non-administrator user called this method but doesn't have permission to add permissions on the project.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site LUID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404002</td>
                                            <td>User not found</td>
                                            <td>A user LUID in the request body as the grantee doesn't correspond to an existing user.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404005</td>
                                            <td>Project not found</td>
                                            <td>The project LUID in the URI doesn't correspond to an existing project.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404009</td>
                                            <td>Project ID mismatch</td>
                                            <td>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.)</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404012</td>
                                            <td>Group not found</td>
                                            <td>A group LUID in the request body doesn't correspond to an existing group.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404013</td>
                                            <td>Capability not found</td>
                                            <td>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                                         <span sclass="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <bridgeDomain existingDomainName="example.com" newPoolLuid="ebae40a5-d7e4-4214-b3d5-b0715c627b71" />
</tsRequest>
```

```
{
  "bridgeDomain": {
    "existingDomainName": "example.com",
    "newPoolLuid": "ebae40a5-d7e4-4214-b3d5-b0715c627b71"
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">existingDomainName</span></td><td>The domain to add to the pool. Root domains and subdomains are supported.</td></tr><tr><td><span class="api-placeholder">newPoolLuid</span></td><td>The UUID of the Bridge pool to add the domain to. Must be a user-created pool (not a reserved system pool).</td></tr></tbody></table>

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid domain name, invalid pool ID, domain already exists, or pool not found</td><td>Domain must conform to valid format; pool ID must be valid UUID and exist; domain must not already be in this pool.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503904</td><td>Unexpected server error</td><td>An unexpected error occurred while adding the domain.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <permissions>
    <flow id="flow-id" />
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">flow-id</span>
                                            </td>
                                            <td>The flow-id value for the flow you want to add permissions to.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID (not name) of the user to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID (not name) of the group to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
										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:
                                        <ul><li><span class="api-command-ref">ChangeHierarchy</span></li><li><span class="api-command-ref">ChangePermissions</span></li><li><span class="api-command-ref">Delete</span></li><li><span class="api-command-ref">Execute</span></li><li><span class="api-command-ref">ExportXml (Download)</span></li><li><span class="api-command-ref">Read (view)</span></li><li><span class="api-command-ref">WebAuthoringForFlows</span></li><li><span class="api-command-ref">Write</span></li></ul><p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p></td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
    <permissions>
        <flow id="8359f0c5-4b98-4ca4-a7e5-38e4261e88a2" name="Flow1">
            <owner id="8f735728-7484-40d1-89d1-41f09824536b"/>
        </flow>
        <granteeCapabilities>
            <group id="9de5cc1a-5bb8-4c8e-b2cd-b54e736a7b9f"/>
            <capabilities>
                <capability name="Read" mode="Allow"/>
                <capability name="Write" mode="Allow"/>
                <capability name="Delete" mode="Deny"/>
            </capabilities>
        </granteeCapabilities>
        <granteeCapabilities>
            <user id="1f2345678-1234-12d1-12d1-11f234567b"/>
            <capabilities>
                <capability name="Delete" mode="Allow"/>
            </capabilities>
        </granteeCapabilities>
    </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a flow. Valid capabilities for a flow are <span class="api-command-ref">ChangeHierarchy</span>, <span class="api-command-ref">ChangePermissions</span>, <span class="api-command-ref">Delete</span>, <span class="api-command-ref">Execute</span>, <span class="api-command-ref">ExportXml (Download)</span>, <span class="api-command-ref">Read (view)</span>, and <span class="api-command-ref">Write</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to set permissions on the flow.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>A user ID in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group ID in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The 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.</td></tr></tbody></table>

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

## 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/current/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

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

#### Request Body

```
<tsRequest>
  <task>
    <flowRun>
      <flow id="flow-id"/>
	  <flowRunSpec>
	    <flowParameterSpecs>
	      <flowParameterSpec
	        parameterId="parameter-id"
	        overrideValue= "overrideValue"/>
	    <flowParameterSpecs>
	  <flowRunSpec>
     </flowRun>
   </task>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">flow-id</span>
                                            </td>
                                            <td>
                                                <p>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.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">parameter-id</span>
                                            </td>
                                            <td>
                                                <p>The ID of the flow parameter. Use the <a href="#Query" class="xref">List Metrics for Site - Retired in API 3.22</a> 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. </p>
                                                <p class="note"><b>Note:</b> Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/prep/en-us/prep_parameters.htm#run-flows-with-parameters">Run flows with parameters</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">overrideValue</span>
                                            </td>
                                            <td>
                                                <p>The run-time value for the flow parameter. You must specify this if the parameter is required. Use the <a href="#Query" class="xref">List Metrics for Site - Retired in API 3.22</a> 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.</p>
                                                <p class="note"><b>Note:</b> Parameters are options and only relevant for flows that contains parameters and the parameter setting is enabled.</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/prep/en-us/prep_parameters.htm#run-flows-with-parameters">Run flows with parameters</a>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400148</td><td>Invalid parameter override value</td><td>The run-time value provided for the flow parameter is invalid.</td></tr><tr><td>400</td><td>400149</td><td>Missing run-time parameter value.</td><td>The run-time value for a required flow parameters was not provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403098</td><td>Update Forbidden</td><td>A non-administrator user called this method, but the caller doesn't have sufficient permissions.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI is unknown.</td></tr><tr><td>404</td><td>404043</td><td>Flow parameter not found</td><td>The flow parameter information was not provided.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>A user ID in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/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 <flowRunSpec> 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.

```
<tsRequest>
   <task>
     <flowRun>
       <flow id="5ab9cd53-e17f-45gh-804i-4914jk39r29z"/>
	  <flowRunSpec>
	    <flowParameterSpecs>
	      <flowParameterSpec>
	        parameterId="a2fb691b-90fa-4b6e-850e-f16c5afc1f89"
	        overrideValue= "2"/>
	    <flowParameterSpecs>
	  <flowRunSpec>
     </flowRun>
   </task>
</tsRequest
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
    <task>
      <flowRun id="8a78c68e-37ad-4b21-80fc-e67e2ab55279" priority="50" consecutiveFailedCount="0" type="RunFlowTask">
        <schedule id="99e8841e-8527-4d09-89b8-71d9872634df" name="demo" state="Active" priority="50" createdAt="2021-12-09T19:21:09Z" updatedAt="2022-01-19T23:06:56Z" type="Flow" frequency="Hourly" nextRunAt="2022-01-20T00:00:00Z"/>
        <flow id="09942c88-99d5-4669-aa62-07560fc4b201" name="CoffeeChain"/>
          <flowParametersRuns>
            <parameterRuns parameterId="a2fb691b-90fa-4b6e-850e-f16c5afc1f89" name="param 2 required" description=testparameter2" overrideValue = "2"/>
	   <flowParametersRuns>
      </flowRun>
    </task>
</tsResponse>
```

## 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

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

#### Request Body

```
<tsRequest>
  <favorite label="favorite-label">
    <flow id="flow-id" />
  </favorite>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">favorite-label</span></td><td>A label to assign to the favorite. This value is displayed when you search for favorites on the server.</td></tr><tr><td><span class="api-placeholder">flow-id</span></td><td>The ID of the flow to add as a favorite.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <favorites>
    <favorite label="favorite-label">
     <flow id="flow-id" />
    </favorite>
    <favorite label="favorite-label">
     <flow id="flow-id" />
    </favorite>
    ... additional favorites ...
  </favorites>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400005</td><td>Invalid label</td><td>The favorite label is empty or consists of only white space characters.</td></tr><tr><td>403</td><td>403004</td><td>Forbidden favorites access</td><td>A 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.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

None

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group ID in the request body doesn't correspond to an existing group.</td></tr><tr><td>409</td><td>409120</td><td>Group set not found</td><td>The group set ID in the request body doesn't correspond to an existing group.</td></tr></tbody></table>

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

## 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

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

#### Request Body

                    `<tsRequest>   <favorite label="favorite-label">     <metric id="metric-id" />   </favorite> </tsRequest>`
				

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">favorite-label</span></td><td>A label to assign to the favorite. This value is displayed when you search for favorites on the server.</td></tr><tr><td><span class="api-placeholder">metric-id</span></td><td>The ID of the metric to add as a favorite.</td></tr></tbody></table>

#### 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

                    `<tsResponse>   <favorites>     <favorite label="favorite-label">       <metric id="metric-id" />     </favorite>     <favorite label="favorite-label">       <metric id="metric-id" />     </favorite>     ... additional favorites ...   </favorites> </tsResponse>`
				

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400005</td><td>Invalid label</td><td>The favorite label is empty or consists of only white space characters.</td></tr><tr><td>403</td><td>403004</td><td>Forbidden favorites access</td><td>A 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.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404028</td><td>Metric not found</td><td>The metric ID in the URI doesn't correspond to an existing metric.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-id</span>
                                        </td>
                                        <td>The unique ID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-type</span>
                                        </td>
                                        <td>
                                            <p>
                            The type of content the monitoring is being applied to. Use one of the following values:
                            </p>
                                            <ul>
                                                <li><span class="uicontrol">datasource</span>
                                                </li>
                                                <li><span class="uicontrol">flow</span>
                                                </li>
                                            </ul>
                                            <p>These values are not case sensitive.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-luid</span>
                                        </td>
                                        <td>
                                            <p>The LUID of the asset. This is the same as the content ID.</p>
                                            <p>The square brackets are required around the single LUID or comma-separated list of LUIDs.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### Request Body

```
<tsRequest>
  <dataQualityTrigger type="type" active="status" message="message" severe="severity"/>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">type</span>
                                    </td>
                                    <td>
                                        <p>Type of monitoring quality warning. To specify the type, use one of the following values:</p>
                                        <ul>
                                            <li class="api-command-ref">EXTRACT_REFRESH</li>
                                            <li class="api-command-ref">FLOW_RUN</li>
                                        </ul>
                                        <p>These values are not case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">status</span>
                                    </td>
                                    <td>
                                        <p>Monitoring status. Values can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". If set to "<span class="uicontrol">true</span>", the data source is monitored for extract refresh failures or the flow is monitored for flow run failures).</p>
                                        <p>If an extract refresh or flow run failure occurs, the specified data quality warning is attached  to the data source or flow (depending on <span class="api-parameters-table">type</span>). The data quality warning is removed when the extract refresh or flow run is successful.</p>
                                        <p>For more information about monitoring quality warnings, see the monitoring quality warning section of the "Set a Data Quality Warning" topic in the <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-turn-on-a-monitoring-quality-warning">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-turn-on-a-monitoring-quality-warning">Cloud Help</a>.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">message</span>
                                    </td>
                                    <td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/Img/formatting_guide.png" target="_blank">formatting guide</a> that's normally visible as a tooltip in the UI.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">severity</span>
                                    </td>
                                    <td>High visibility status of the data quality warning. Values can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm#high_visibility">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm#high_visibility">Cloud Help</a>.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsResponse>
  <dataQualityTriggerList>
	<dataQualityTrigger id="{trigger-luid}" siteId="{site-luid}"
		userId="{user-luid}" userDisplayName="Joe Nguyen" contentId="{content-luid}"
		contentType="DATASOURCE" message=" This message is specified by the user."
		type="EXTRACT_REFRESH" active="true" createdAt="Wed Sep 22 05:49:52 UTC 2020"
		updatedAt="Wed Sep 22 05:49:52 UTC 2020" severe="false"/>
  </dataQualityTriggerList>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400136</td><td>Generic quality warning trigger error</td><td>The monitoring quality warning could not be added or updated for some other reason than those specified below.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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 <project> element, the request is invalid.

#### URI

PUT /api/api-version/sites/site-id/projects/project-id/permissions

#### Parameter Values

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

#### Request Body

```
<tsRequest>
  <permissions>
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID (not name) of the user to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID (not name) of the group to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><a id="capability_name"></a><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                        The capability to assign permissions to. In Tableau Server 10.0, the valid
                                        capabilities for a project are
                                        <span class="api-command-ref">ProjectLeader</span>,
                                        <span class="api-command-ref">Read</span> (view), and
                                        <span class="api-command-ref">Write</span>.
                                        <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to allow the capability,
                                    or <span class="api-command-ref">Deny</span> to deny it. This value is case sensitive.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <permissions>
    <project id="project-id" name="project-name" />
      <owner id="project-owner-id" />
    </project>
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400009</td>
                                            <td>Invalid capability</td>
                                            <td>
                                                <p>
									The capability specified in the request is not in the <a href="#capability_name">list of valid capability names</a>
									for this method.
								</p>
                                                <p>
									The mode of the capability for <span class="api-command-ref">ProjectLeader</span> cannot be set to
									<span class="api-command-ref">Deny</span>.
								</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403004</td>
                                            <td>Permissions setting forbidden</td>
                                            <td>A non-administrator user called this method but doesn't have permission to add permissions on the project.
                                </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404002</td>
                                            <td>User not found</td>
                                            <td>A user ID in the request body as the grantee doesn't correspond to an existing user.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404005</td>
                                            <td>Project not found</td>
                                            <td>The project ID in the URI doesn't correspond to an existing project.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404009</td>
                                            <td>Project ID mismatch</td>
                                            <td>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.)</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404012</td>
                                            <td>Group not found</td>
                                            <td>A group ID in the request body doesn't correspond to an existing group.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404013</td>
                                            <td>Capability not found</td>
                                            <td>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
                                        <span sclass="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.
                                    </td>
                                        </tr>
                                    </tbody>
                                </table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <favorite label="favorite-label">
    <project id="project-id"/>
  </favorite>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><i>favorite-label</i></td><td>A label to assign to the favorite. This value is displayed when you search for favorites on the server.</td></tr><tr><td><i>project-id</i></td><td>The ID (not name) of the project to add as a favorite.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <favorites>
    <favorite label="favorite1-label">
     <project id="project-id" />
    </favorite>
    <favorite label="favorite2-label">
     <project id="project-id" />
    </favorite>
  </favorites>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400005</td><td>Invalid label</td><td>The favorite label is empty or consists of only white space characters.</td></tr><tr><td>403</td><td>403004</td><td>Access to favorites denied</td><td>A 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.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the request body doesn't correspond to an existing project.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>PUT</b>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/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:**

```
<tsRequest>
  <favorite label="Economic Indicators">
    <project id="1f1e1d1c-2b2a-2f2e-3d3c-3b3a4f4e4d4c" />
  </favorite>
</tsRequest>
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <favorites>
    <favorite label="Economic Indicators">
      <project id="1f1e1d1c2-b2a2-f2e3-d3c3-b3a4f4e4d4c"/>
    </favorite>
  </favorites>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">routing-rule-id</span></td><td>The unique identifier (UUID) of the allow rule to add projects to.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <routingRuleProjects mode="add">
    <project id="11111111-2222-3333-4444-555555555555" />
    <project id="66666666-7777-8888-9999-000000000000" />
  </routingRuleProjects>
</tsRequest>
```

```
{
  "routingRuleProjects": {
    "mode": "add",
    "project": [
      { "id": "11111111-2222-3333-4444-555555555555" },
      { "id": "66666666-7777-8888-9999-000000000000" }
    ]
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">mode</span></td><td>Required. The operation mode; must be <code>add</code> for this method.</td></tr><tr><td><span class="api-placeholder">project</span></td><td>Required. One or more project IDs to add. Each entry requires an <code>id</code>.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

Returns the updated `routingRule` with the added projects reflected in `project`.

```
<tsResponse>
  <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" />
    <project id="66666666-7777-8888-9999-000000000000" name="Sales" isDeleted="false" />
  </routingRule>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>503909</td><td>Validation failed</td><td>Missing or empty project list, invalid project or rule UUID, or projects not found on the site.</td></tr><tr><td>400</td><td>503910</td><td>Invariant violation</td><td>Attempted to add projects to a block rule.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>503923</td><td>Permission denied</td><td>Caller is not a site administrator for the site.</td></tr><tr><td>404</td><td>503915</td><td>Routing rule not found</td><td>No routing rule exists with the given ID on this site.</td></tr><tr><td>409</td><td>503912</td><td>Project already present</td><td>One or more of the projects is already associated with this routing rule.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503921</td><td>Unexpected server error</td><td>An unexpected error occurred while adding projects.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <permissions>
    <table id="table-luid" />
    <granteeCapabilities>
      <user id="user-luid" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <!-- ... additional capabilities ... -->
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-luid" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <!-- ... additional capabilities ... -->
      </capabilities>
    </granteeCapabilities>
    <!-- ... additional grantee capability sets ... -->
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">table-luid</span>
                                    </td>
                                    <td>The LUID for the table asset you want to add permissions to.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">user-luid</span>
                                    </td>
                                    <td>The LUID of the user to add permissions for.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">capability-name</span>
                                    </td>
                                    <td>
                                        <p>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:</p>
                                        <ul>
                                            <li><b>Read</b> (view)</li>
                                            <li><b>Write</b> (edit)</li>
                                            <li><b>ChangePermissions</b> (set permissions)</li>
                                            <li><b>ChangeHierarchy</b> (move)</li>
                                        </ul>
                                        <p>These values are case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">capability-mode</span>
                                    </td>
                                    <td>
                                        <p>Use one of the following capabilities:</p>
                                        <ul>
                                            <li><b>Allow</b>
                                            </li>
                                            <li><b>Deny</b>
                                            </li>
                                        </ul>
                                        <p>These values are case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">group-id</span>
                                    </td>
                                    <td>The LUID of the group to add permissions for.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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:**

```
<tsResponse>
  <permissions>
	<table id="d0fe66ae-1407-4338-8520-9489d7ce959c" name="_WarehouseConfig"/>
	<granteeCapabilities>
	  <user id="6265b714-7533-465d-b6db-6d0be92bfd07"/>
	  <capabilities>
		<capability name="Read" mode="Allow"/>
	  </capabilities>
	</granteeCapabilities>
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Permissions could not be added because support for explicit permissions is available for table assets associated with published data sources only.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>403</td><td>403117</td><td>Database locked</td><td>Permissions for the table asset cannot be deleted because the database asset is locked.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The requested table asset could not be found.</td></tr><tr><td>409</td><td>409052</td><td>Table error</td><td>An unknown table asset error occurred.</td></tr><tr><td>409</td><td>409057</td><td>Table update error</td><td>An unknown error occurred and the table asset could not be updated.</td></tr><tr><td>409</td><td>409058</td><td>Table update forbidden</td><td>A user without "write"&nbsp;permissions to the table asset attempted an update.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <tags>
	<tag label="tag-value1" />
	<tag label="tag-value2" />
  </tags>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">tag-value1</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to the asset.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">tag-value2</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to the asset.</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsResponse>
  <tags>
	<tag label="Noteworthy" />
	<tag label="PII" />
  </tags>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>409</td><td>409062</td><td>Generic column tag error</td><td>The tag or tags could not be added (or deleted) for some other reason than those specified above.</td></tr><tr><td>409</td><td>409066</td><td>Column not found</td><td>The column asset does not exist.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <tags>
    <tag label="tag" />
    ... additional tags ...
  </tags>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">datasource-id</span></td><td>The 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 <span class="api-command-ref">&lt;tags&gt;</span> element is empty, no new tags are added to the data source.</td></tr><tr><td><span class="api-placeholder">tag</span></td><td>The text of the tag.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <tags>
    <tag label="tag"/>
        ... additional new tags ...
        ... existing tags ...
  </tags>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400075</td>
                                            <td>Error adding tags</td>
                                            <td>There was a problem adding tags to the specified data source.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403004</td>
                                            <td>Adding tags forbidden</td>
                                            <td>
                                                <p>
                                            A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if
                                            the <span class="api-command-ref">&lt;tags&gt;</span> element is empty.
                                        </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>
                                                <p>The site ID in the URI is not for an existing site.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404004</td>
                                            <td>Data source not found</td>
                                            <td>The data source ID in URI doesn't correspond to an existing data source.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404009</td>
                                            <td>Data source ID mismatch</td>
                                            <td>The request body contains a data source ID (which is optional) and it doesn't match the ID in the URI.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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:**

```
<tsRequest>
    <tags>
      <tag label="GDP" />
      <tag label="Health" />
    </tags>
</tsRequest>
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <tags>
    <tag label="GDP"/>
    <tag label="Health"/>
    <tag label="Spending"/>
  </tags>
</tsResponse>
```

## 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

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

#### Request Body

```
<tsRequest>
  <tags>
	<tag label="tag-value1" />
	<tag label="tag-value2" />
  </tags>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">tag-value1</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to the asset.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">tag-value2</span>
                                    </td>
                                    <td>Keyword text you want to add to the asset.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsResponse>
  <tags>
	<tag label="Noteworthy" />
	<tag label="PII" />
  </tags>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The database asset does not exist.</td></tr><tr><td>409</td><td>409048</td><td>Generic database tag error</td><td>The tag or tags could not be added (or deleted) for some other reason than those specified above.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <tags>
	<tag label="tag-value1" />
	<tag label="tag-value2" />
  </tags>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">tag-value1</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to the asset.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">tag-value2</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to the asset.</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsResponse>
  <tags>
	<tag label="Noteworthy" />
	<tag label="PII" />
  </tags>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The table asset does not exist.</td></tr><tr><td>409</td><td>409055</td><td>Generic table tag error</td><td>The tag or tags could not be added (or deleted) for some other reason than those specified above.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <tags>
    <tag label="tag" />
    ... additional tags ...
  </tags>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">view-id</span></td><td>The 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 <span class="api-command-ref">&lt;tags&gt;</span> element is empty, no new tags are added to the view.</td></tr><tr><td><span class="api-placeholder">tag</span></td><td>The text of the tag.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <tags>
    <tag label="tag"/>
        ... additional new tags ...
        ... existing tags ...
  </tags>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400076</td>
                                            <td>Error adding tags</td>
                                            <td>There was a problem adding tags to the specified view.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403004</td>
                                            <td>Adding tags forbidden</td>
                                            <td>
                                                <p>
                                            A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if
                                            the <span class="api-command-ref">&lt;tags&gt;</span> element is empty.
                                        </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>
                                                <p>The site ID in the URI is not for an existing site.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404011</td>
                                            <td>View not found</td>
                                            <td>The view ID in URI doesn't correspond to an existing view.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404009</td>
                                            <td>Workbook ID mismatch</td>
                                            <td>The request body contains a view ID (which is optional) and it doesn't match the ID in the URI.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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:**

```
<tsRequest>
    <tags>
      <tag label="GDP" />
      <tag label="Health" />
    </tags>
</tsRequest>
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <tags>
    <tag label="GDP"/>
    <tag label="Health"/>
    <tag label="Spending"/>
  </tags>
</tsResponse>
```

## 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

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

#### Request Body

```
<tsRequest>
  <tags>
    <tag label="tag" />
    <!-- ...additional tag elements... -->
  </tags>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tag</span></td><td>The text of the tag.</td></tr></tbody></table>

#### 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.**

```
<tsRequest>
  <tags>
    <tag label="Office" />
    <!-- ...additional tag elements... -->
  </tags>
</tsRequest>
```

#### Response Code

200

#### Response Body

```
<tsResponse>
  <tags>
    <tag label="tag"/>
    <!-- ...additional tags... -->
  </tags>
</tsResponse>
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400049</td><td>Error adding tags</td><td>There was a problem adding tags to the specified virtual connection.</td></tr><tr><td>403</td><td>403004</td><td>Adding tags forbidden</td><td>The user doesn't have permissions to add tags to the virtual connection.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI is not for an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Virtual connection not found</td><td>The virtual connection ID in URI doesn't correspond to an existing virtual connection.</td></tr><tr><td>404</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <tags>
    <tag label="tag" />
    ... additional tags ...
  </tags>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">workbook-id</span></td><td>The 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 <span class="api-command-ref">&lt;tags&gt;</span> element is empty, no new tags are added to the workbook.</td></tr><tr><td><span class="api-placeholder">tag</span></td><td>The text of the tag.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <tags>
    <tag label="tag"/>
        ... additional new tags ...
        ... existing tags ...
  </tags>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400049</td>
                                            <td>Error adding tags</td>
                                            <td>There was a problem adding tags to the specified workbook.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403004</td>
                                            <td>Adding tags forbidden</td>
                                            <td>
                                                <p>
                                        A non-administrator user called this method but doesn't have permission to add tags. This error is raised even if
                                        the <span class="api-command-ref">&lt;tags&gt;</span> element is empty.
                                    </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>
                                                <p>The site ID in the URI is not for  an existing site.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404006</td>
                                            <td>Workbook not found</td>
                                            <td>The workbook ID in URI doesn't correspond to an existing workbook.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404009</td>
                                            <td>Workbook ID mismatch</td>
                                            <td>The request body contains a workbook ID (which is optional) and it doesn't match the ID in the URI.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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:**

```
<tsRequest>
    <tags>
      <tag label="GDP" />
      <tag label="Health" />
    </tags>
</tsRequest>
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <tags>
    <tag label="GDP"/>
    <tag label="Health"/>
    <tag label="Spending"/>
  </tags>
</tsResponse>
```

## Add User to Data-Driven Alert

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

#### URI

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

#### Parameter Values

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

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

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

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

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

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

#### Request Body

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

#### Response Code

200

#### Response Body

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

#### Errors

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

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

#### Example

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

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

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

**Example response:**

```

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

## 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

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

#### Request Body

**Add a single user to a group**

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

**Bulk add users to a group** (beginning in API 3.21)

```
<tsRequest>
  <users>
	<user id="user-id1" />
	<user id="user-id2" />
	<user id="user-id2" />
  </users>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>
                                                <p>
                                    The ID (not name) of the user to add. You can get the user ID by calling <a href="#get_users_on_site">Get Users on Site</a>.
</p>
                                                <p>Beginning in API 3.21, you can bulk add users to a group by specifying multiple user IDs. </p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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**

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

**Bulk add users to group** (beginning in API 3.21)

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

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group name in the request body doesn't correspond to an existing group.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409011</td><td>User conflict</td><td>The specified user is already a member of the group.</td></tr></tbody></table>

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

#### Example

##### 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:**

```
<tsRequest>
  <users id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" />
</tsRequest>
```

**Example response:**

```
<?xml version="1.0" encoding="UTF-8" ?>
<tsResponse version-and-namespace-settings>
  <user id="59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" name="Adam"
        siteRole="Explorer" />
</tsResponse>
```

##### 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:**

```
<tsRequest>
  <users>
	<user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" />
	<user id="1z4e8n7q-6t8t-8f8e-7d7c-1b1a2f2d2e2d" />
  </users>
</tsRequest>
```

**Example response:**

```
<?xml version="1.0" encoding="UTF-8" ?>
<tsResponse version-and-namespace-settings>
 <users>
  <user id="59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" name="Adam"
        siteRole="Explorer" />
  <user id="11a1a1b1-be3a-4d2d-1e9e-08a7b6b5b5ba" name="Sadako"
		siteRole="Explorer" />
 <users>
</tsResponse>
```

## 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

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

#### Request Body

```
<tsRequest>
   <user
	name="user-name"
	siteRole="site-role"
	id="user-id"
	authSetting="authentication-configuration"
	identityPoolUuid="idpool-uuid"
	identityUuid="identity-uuid" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">user-name</span>
                                            </td>
                                            <td>
                                                <p>
                                    The name of the user to add.
                                </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-role</span>
                                            </td>
                                            <td>
                                                <p>Site role of the user. You can use one of the following values:</p>
                                                <ul>
                                                    <li>Creator</li>
                                                    <li>Explorer</li>
                                                    <li>ExplorerCanPublish</li>
                                                    <li>ServerAdministrator</li>
                                                    <li>SiteAdministratorExplorer</li>
                                                    <li>SiteAdministratorCreator</li>
                                                    <li>Unlicensed</li>
                                                    <li>
							ReadOnly						</li>
                                                    <li>
						Viewer</li>
                                                </ul>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>Required. The ID (not name) of the user to add. You can get the user ID by calling <a href="#get_users_on_site">Get Users on Site</a>.
</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">authentication-configuration</span>
                                            </td>
                                            <td>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#tag/Identity-Pools-Methods/operation/AuthnService_ListAuthConfigurations" target="_blank">List Authentication Configurations</a> endpoint in Tableau REST&nbsp;OpenAPI.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">idpool-uuid</span>
                                            </td>
                                            <td>The ID of the identity pool that you wan to add the user to. You can get the identity pool ID by calling the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#tag/Identity-Pools-Methods/operation/AuthnService_ListIdentityPools" target="_blank">List Identity Pools</a> endpoint in the Tableau REST&nbsp;OpenAPI.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">identity-uuid</span>
                                            </td>
                                            <td>The identifier for the user you want to add. Identifiers are only used for identity matching purposes. For more information about identifiers, see <a href="https://help.tableau.com/current/server-linux/en-us/identity_pools.htm#usernames_identifiers" target="_blank">Usernames and Identifiers in Tableau</a> in  the Tableau Server Help.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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:**

```
<tsResponse>
  <user
	identityPoolUuid="df47cf24-5ed3-11ed-9b6a-0242ac12000"
	id="7ad8f89e-c2a1-44b4-9413-ac8a62286a7a"
	name="Michele Kim" />
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>429</td><td>429001</td><td>User conflict</td><td>The specified user is already a member of the identity pool.</td></tr><tr><td>429</td><td>429002</td><td>Can't add user</td><td>There was a problem and the user couldn't be added to the identity pool.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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:**

```
<tsRequest>
  <user id="7ad8f89e-c2a1-44b4-9413-ac8a62286a7a" />
</tsRequest>
```

**Example response:**

```
<?xml version="1.0" encoding="UTF-8" ?>
<tsResponse version-and-namespace-settings>
  <user identityPoolUuid="7b54b6a8-6095-11ed-9b6a-0242ac120002"
     id="7ad8f89e-c2a1-44b4-9413-ac8a62286a7a" name="Michele Kim" />
</tsResponse>
```

## 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

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

#### Request Body

_(Use the icon in the top right corner to copy the text.)_

```
<tsRequest>
  <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" />
</tsRequest>
```

_(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

<table class="api-parameters-table">
                                    <colgroup><col class="api-parameters-table-col-1-extra-wide">
                                    <col>
                                    </colgroup><tbody>
                                        <tr>
                                            <td><span class="api-placeholder">user-name</span>
                                            </td>
                                            <td>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.
                                <p><b>Tableau Server</b><br>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, <span class="uicontrol">example\Adam</span> or
					<span class="uicontrol">adam@example.com</span>).
                                </p><p class="note"><strong>Note:</strong> Active Directory specifies a user name using two attributes: <code>sAMAccountName</code>
				     and <code>userPrincipalName</code> (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 <span class="api-placeholder">user-name</span>
					is matched against the Active Directory <code>sAMAccountName</code> attribute, which becomes the name that the user signs in to
					Tableau Server with.
					<br><br>Two exceptions are when the name that you provide: is longer than 20 characters; and includes an <code>@</code> character.
					In these cases, Tableau imports the user using the Active Directory UPN. For more information, see
				<a href="https://msdn.microsoft.com/en-us/library/ms677605(v=vs.85).aspx" rel="noopener" target="_blank">User Naming Attributes</a> on
					the MSDN site.
				</p><p><b>Tableau Cloud</b><br>The <span class="api-placeholder">user-name</span> 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.
				</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-role</span>
                                            </td>
                                            <td>The site role to assign to the user. You can assign the following roles:
											<span class="api-command-ref">Creator</span>,
											<span class="api-command-ref">Explorer</span>,
											<span class="api-command-ref">ExplorerCanPublish</span>,
											<span class="api-command-ref">SiteAdministratorExplorer</span>,
											<span class="api-command-ref">SiteAdministratorCreator</span>,
											<span class="api-command-ref">Unlicensed</span>,
											or
										<span class="api-command-ref">Viewer</span>.
                                <p><strong>Note</strong>: You cannot use the REST API to set a user to be a server administrator (<span class="api-command-ref">ServerAdministrator</span> site role).</p></td>
                                        </tr>
                                        <tr>
                                            <td><a name="authsetting"></a><span class="api-placeholder">auth-setting</span>
                                            </td>
                                            <td>(Optional) The authentication method to assign the user.
                                <p><b>Tableau Server</b></p><p>The <span class="api-command-ref">authSetting</span> attribute only applies when updating users on sites with site-specific SAML-enabled settings.</p><p><b>Tableau Cloud</b></p><p>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:</p><ul><li><p><b>For Tableau with MFA (or Tableau) authentication:</b> To assign Tableau with MFA&nbsp;authentication (or Tableau authentication if still available for your site), you can use the <span class="api-command-ref">authSetting</span> or <span class="api-command-ref"><a href="#idpconfigurationid">idpConfigurationId</a></span> attribute, but not both.</p></li><li><p><b>For SAML and OIDC-based authentication:</b></p><ul><li><p><b>For new configurations:</b> To assign SAML&nbsp;or OIDC-based authentication, whose configurations were created during or after January 2025,  you must use the <span class="api-command-ref">idpConfigurationId</span> attribute for assigning user authentication.  Skip to <a href="#idpconfigurationid" class="xref">idp-configuration-id</a>.</p></li><li><p><b>For existing configurations:</b> To assign SAML&nbsp;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 <span class="api-command-ref">authSetting</span> attribute for assigning user authentication. Alternatively, you can use the <span class="api-command-ref"><a href="#idpconfigurationid">idpConfigurationId</a></span> attribute for assigning user authentication. Do not use both.</p></li></ul></li><p><b>Notes:</b></p><ul><li>In cases where both attributes are supported, you can use the <span class="api-command-ref">authSetting</span> attribute or the <span class="api-command-ref">idpConfigurationId</span> attribute, but not both.</li><li>If neither <span class="api-command-ref">authSetting</span> nor <span class="api-command-ref">idpConfigurationId</span> attribute is specified, then <code>TableauIdWithMFA</code> (or in some cases <code>ServerDefault</code> if that option is still available for your site) is the authentication  assigned to the user.</li><li>If you see "Unspecified" as the authentication method for the user in Tableau Cloud or if the user is unable to sign in, use the <span class="api-command-ref">idpConfigurationId</span> attribute instead. For more information, see <a href="https://help.salesforce.com/s/articleView?id=004693708&amp;type=1" target="_blank">When adding users to Tableau Cloud via Rest API, the user's authentication method is listed as "Unspecified" and the user gets error "Remote IdP entity descriptor is not configured" on login attempt</a> knowledge article or skip to <a href="#idpconfigurationid" class="xref">idp-configuration-id</a>.</li></ul></ul><p>You can assign the following values for the <span class="api-command-ref">authSetting</span> attribute:</p><ul><li><code>SAML</code> - The user signs in using the identity provider (IdP) configured for the site.
											For Tableau Cloud configuration, see
											<a href="https://help.tableau.com/current/server/en-us/saml_site_specific.htm" rel="noreferrer" target="_blank">Enable SAML Authentication on a Site</a>.
											For Tableau Server, see
											<a href="https://help.tableau.com/current/server/en-us/saml_site_specific.htm" rel="noreferrer" target="_blank">Configure Site-Specific SAML</a>.
										</li><li><code>OpenID</code> - <i>Tableau Cloud only</i>: The user signs in using Google, Salesforce or OpenID&nbsp;Connect provider credentials.
											<code>OpenID</code> corresponds to Google, Salesforce, or&nbsp;OIDC&nbsp;authentication configuration in Tableau Cloud authentication settings.</li><li><code>TableauIDWithMFA</code> - <i>Tableau Cloud only</i>:&nbsp;The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see <a href="https://help.tableau.com/current/online/en-us/security_auth.htm#mfa_requirement" target="_blank">About multi-factor authentication and Tableau Cloud</a>.</li><li><code>ServerDefault</code> - 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 <code>ServerDefault</code> value corresponds to <span class="api-command-ref">TableauID</span> in authentication
											settings. For Tableau Server, the
											<a href="https://help.tableau.com/current/server/en-us/saml.htm" rel="noreferrer" target="_blank">SAML</a>
											Server help page describes default authentication options.
</li></ul></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">identity-pool-name</span>
                                            </td>
                                            <td>
                              (Optional, Tableau Server only) When identity pools are configured, the name of the identity pool.
                                <p>Starting in API&nbsp;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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm" class="xref">Identity Pools Methods</a>.</p></td>
                                        </tr>
                                        <tr>
                                            <td><a name="idpconfigurationid"></a><span class="api-placeholder">idp-configuration-id</span>
                                            </td>
                                            <td>
                                                <p>(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).</p>
                                                <p>To find the <span class="api-command-ref">idpConfigurationId</span> attribute value, use the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site" class="xref">List Authentication Configurations for Site</a> method.</p>
                                                <p><b>Notes:</b>
                                                </p>
                                                <ul>
                                                    <li>In cases where both attributes are supported, you can use the <span class="api-command-ref">idpConfigurationId</span> attribute or the <span class="api-command-ref">authSetting</span> attribute, but not both. </li>
                                                    <li>If neither <span class="api-command-ref">idpConfigurationId</span> nor <span class="api-command-ref">authSetting</span> attribute is  specified, then <code>TableauIdWithMFA</code> (or in some cases <code>ServerDefault</code> if that option is still available for your site) is the authentication assigned to the user.
</li>
                                                </ul>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">email-address</span>
                                            </td>
                                            <td>(Optional, Tableau Cloud only) The email address where the user can receive notifications. If no value is provided, Tableau Cloud uses the <code>username</code> value to send notifications to.
                                <p>Starting in API 3.26 (July 2025), you can specify an email address that is different from the username.</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">language</span>
                                            </td>
                                            <td>
                                                <p>(Optional, Tableau Cloud only) Language (ISO 639-1) of the user. </p>
                                                <p>Starting in API&nbsp;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 <b>one</b> of the following values: <span class="api-command-ref">de</span>, <span class="api-command-ref">en_GB</span>, <span class="api-command-ref">en</span>, <span class="api-command-ref">es</span>,<span class="api-command-ref"> fr_CA</span>, <span class="api-command-ref">fr</span>, <span class="api-command-ref">it</span>, <span class="api-command-ref">nl</span>, <span class="api-command-ref">pt</span>, <span class="api-command-ref">sv</span>, <span class="api-command-ref">th</span>, <span class="api-command-ref">ja</span>, <span class="api-command-ref">zh</span>, <span class="api-command-ref">zh_TW</span>, or <span class="api-command-ref">ko</span>.</p>
                                                <p><b>Important:</b> The language set using this attribute overrides the default site-wide invitation <a href="https://help.tableau.com/current/server/en-us/sites_add.htm#email_language" target="_blank">email language</a> that the site admin can set.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">locale</span>
                                            </td>
                                            <td>
                                                <p>(Optional, Tableau Cloud only) Locale of the user. </p>
                                                <p>Starting in API&nbsp;3.28 (March 2026), you can set the user's default locale to a supported locale. You can assign <b>one</b> of the following values: <span class="api-command-ref">ar_SA</span>, <span class="api-command-ref">ar_AE</span>, <span class="api-command-ref">ar_BH</span>, <span class="api-command-ref">ar_DZ</span>, <span class="api-command-ref">ar_EG</span>, <span class="api-command-ref">ar_IQ</span>, <span class="api-command-ref">ar_JO</span>, <span class="api-command-ref">ar_KW</span>, <span class="api-command-ref">ar_LB</span>, <span class="api-command-ref">ar_LY</span>, <span class="api-command-ref">ar_MA</span>, <span class="api-command-ref">ar_OM</span>, <span class="api-command-ref">ar_QA</span>, <span class="api-command-ref">ar_SD</span>, <span class="api-command-ref">ar_SY</span>, <span class="api-command-ref">ar_TN</span>, <span class="api-command-ref">ar_YE</span>, <span class="api-command-ref">be_BY</span>, <span class="api-command-ref">bg_BG</span>, <span class="api-command-ref">ca_ES</span>, <span class="api-command-ref">cs_CZ</span>, <span class="api-command-ref">da_DK</span>, <span class="api-command-ref">de_DE</span>, <span class="api-command-ref">de_AT</span>, <span class="api-command-ref">de_CH</span>, <span class="api-command-ref">de_LU</span>, <span class="api-command-ref">el_GR</span>, <span class="api-command-ref">el_CY</span>, <span class="api-command-ref">en_US</span>, <span class="api-command-ref">en_AU</span>, <span class="api-command-ref">en_CA</span>, <span class="api-command-ref">en_GB</span>, <span class="api-command-ref">en_IE</span>, <span class="api-command-ref">en_IN</span>, <span class="api-command-ref">en_MT</span>, <span class="api-command-ref">en_NZ</span>, <span class="api-command-ref">en_PH</span>, <span class="api-command-ref">en_SG</span>, <span class="api-command-ref">en_ZA</span>, <span class="api-command-ref">es_ES</span>, <span class="api-command-ref">es_AR</span>, <span class="api-command-ref">es_BO</span>, <span class="api-command-ref">es_CL</span>, <span class="api-command-ref">es_CO</span>, <span class="api-command-ref">es_CR</span>, <span class="api-command-ref">es_DO</span>, <span class="api-command-ref">es_EC</span>, <span class="api-command-ref">es_GT</span>, <span class="api-command-ref">es_HN</span>, <span class="api-command-ref">es_MX</span>, <span class="api-command-ref">es_NI</span>, <span class="api-command-ref">es_PA</span>, <span class="api-command-ref">es_PE</span>, <span class="api-command-ref">es_PR</span>, <span class="api-command-ref">es_PY</span>, <span class="api-command-ref">es_SV</span>, <span class="api-command-ref">es_US</span>, <span class="api-command-ref">es_UY</span>, <span class="api-command-ref">es_VE</span>, <span class="api-command-ref">et_EE</span>, <span class="api-command-ref">fi_FI</span>, <span class="api-command-ref">fr_FR</span>, <span class="api-command-ref">fr_BE</span>, <span class="api-command-ref">fr_CH</span>, <span class="api-command-ref">fr_LU</span>, <span class="api-command-ref">fr_CA</span>, <span class="api-command-ref">ga_IE</span>, <span class="api-command-ref">he_IL</span>, <span class="api-command-ref">hi_IN</span>, <span class="api-command-ref">hr_HR</span>, <span class="api-command-ref">hu_HU</span>, <span class="api-command-ref">id_ID</span>, <span class="api-command-ref">is_IS</span>, <span class="api-command-ref">it_IT</span>, <span class="api-command-ref">it_CH</span>, <span class="api-command-ref">ja_JP</span>, <span class="api-command-ref">ko_KR</span>, <span class="api-command-ref">lt_LT</span>, <span class="api-command-ref">lv_LV</span>, <span class="api-command-ref">mk_MK</span>, <span class="api-command-ref">ms_MY</span>, <span class="api-command-ref">mt_MT</span>, <span class="api-command-ref">nl_NL</span>, <span class="api-command-ref">nl_BE</span>, <span class="api-command-ref">no_NO</span>, <span class="api-command-ref">pl_PL</span>, <span class="api-command-ref">pt_BR</span>, <span class="api-command-ref">pt_PT</span>, <span class="api-command-ref">ro_RO</span>, <span class="api-command-ref">ru_RU</span>, <span class="api-command-ref">sk_SK</span>, <span class="api-command-ref">sl_SI</span>, <span class="api-command-ref">sq_AL</span>, <span class="api-command-ref">sr_RS</span>, <span class="api-command-ref">sr_BA</span>, <span class="api-command-ref">sr_ME</span>, <span class="api-command-ref">sv_SE</span>, <span class="api-command-ref">th_TH</span>, <span class="api-command-ref">tr_TR</span>, <span class="api-command-ref">uk_UA</span>, <span class="api-command-ref">vi_VN</span>, <span class="api-command-ref">zh_CN</span>, <span class="api-command-ref">zh_HK</span>, <span class="api-command-ref">zh_SG</span>, or <span class="api-command-ref">zh_TW</span>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <user id="user-id"
   name="user-name"
   siteRole="site-role"
   authSetting="auth-setting"
   identityPoolName="identity-pool-name"
   idpConfigurationId="idp-configuration-id"
   email="email-address"
   language="langauge"
   locale="locale" />
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400003</td>
                                            <td>Bad request</td>
                                            <td>The user authentication setting <code>ServerDefault</code> is not supported for you site. Try again using <code>TableauIDWithMFA</code> instead.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400013</td>
                                            <td>Invalid site role</td>
                                            <td>
                                                <p>The value of the <span class="api-command-ref">siteRole</span> attribute must be
											<span class="api-command-ref">Explorer</span>,
											<span class="api-command-ref">ExplorerCanPublish</span>,
											<span class="api-command-ref">SiteAdministratorCreator</span>,
											<span class="api-command-ref">SiteAdministratorExplorer</span>,
											<span class="api-command-ref">Unlicensed</span>,
											or <span class="api-command-ref">Viewer</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400217</td>
                                            <td>Unsupported language</td>
                                            <td>The specified language is not valid or not supported.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400218</td>
                                            <td>Unsupported locale</td>
                                            <td>The specified locale is not valid or not supported.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403193</td>
                                            <td>Forbidden</td>
                                            <td>A non-administrator user called this method or doesn't have permissions to update language for the user. </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403194</td>
                                            <td>Forbidden</td>
                                            <td>A non-administrator user called this method or doesn't have permissions to update locale for the user. </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404002</td>
                                            <td>User not found</td>
                                            <td>
                                    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.
                                </td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409017</td>
                                            <td>User conflict</td>
                                            <td>The specified user already exists on the site.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409005</td>
                                            <td>Guest user conflict</td>
                                            <td>The Tableau Server API doesn't allow adding a user with the guest role to a site.</td>
                                        </tr>
                                        <tr>
                                            <td>500</td>
                                            <td>500109</td>
                                            <td>Internal language error</td>
                                            <td>The language request could not be completed.</td>
                                        </tr>
                                        <tr>
                                            <td>500</td>
                                            <td>500110</td>
                                            <td>Internal locale error</td>
                                            <td>The locale request could not be completed.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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:**

```
<tsRequest>
  <user name="Adam"
    siteRole="Explorer" />
</tsRequest>
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"
    name="Adam"
    siteRole="Explorer"
    authSetting="ServerDefault"  />
</tsResponse>
```

## 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

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

#### Request Body

```
<tsRequest>
  <permissions>
    <view id="view-id" />
	<granteeCapabilities>
	  <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><i>view-id</i>
                                            </td>
                                            <td>The <i>view-id</i> value must match the view ID in the URI.
									</td>
                                        </tr>
                                        <tr>
                                            <td><i>user-id</i>
                                            </td>
                                            <td>The ID (not name) of the user to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><i>group-id</i>
                                            </td>
                                            <td>The ID (not name) of the group to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><i>capability-name</i>
                                            </td>
                                            <td>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
										<b>AddComment</b>, <b>ChangePermissions</b>, <b>Delete</b>, <b>ExportData</b>, <b>ExportImage</b>, <b>ExportXml</b>, <b>Filter</b>, <b>Read</b> (view), <b>ShareView</b>, <b>ViewComments</b>, <b>ViewUnderlyingData</b>, <b>WebAuthoring</b>, and <b>Write</b>.
									<p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p></td>
                                        </tr>
                                        <tr>
                                            <td><i>capability-mode</i>
                                            </td>
                                            <td><b>Allow</b> to allow the capability, or <b>Deny</b> to deny it. This value is case sensitive.
									</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <permissions>
    <view id="view-id" />
      <owner id="owner-id"/>
    </view>
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <capability name="capability-name" mode="capability-mode" />
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <capability name="capability-name" mode="capability-mode" />
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
          </capabilities>
          </granteeCapabilities>
  </permissions>
</tsResponse>
```

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

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a view.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to set permissions on the view.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the URI doesn't correspond to an existing view.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group ID in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The 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 <b>Allow</b> or <b>Deny</b>).</td></tr></tbody></table>

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

#### Example

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

**Example of add-view-permissions.xml:**

```
<tsRequest>
  <permissions>
    <view id="34acb0d7-fa37-43d7-bdde-d6635eb724b5" />
    <granteeCapabilities>
      <user id="8eda27d9-5ad2-42cd-a39a-61bc01a423af" />
      <capabilities>
        <capability name="ExportImage" mode="Allow" />
        <capability name="ChangePermissions" mode="Deny" />
      </capabilities>
    </granteeCapabilities>
  </permissions>
</tsRequest>
```

**Example response:**

```
<tsResponse>
  <permissions>
    <view id="34acb0d7-fa37-43d7-bdde-d6635eb724b5" name="What If Forecast">
      <owner id="8eda27d9-5ad2-42cd-a39a-61bc01a423af"/>
    </view>
    <granteeCapabilities>
      <group id="2aa47cfa-9f2b-11e8-a260-af4a26124661"/>
      <capabilities>
        <capability name="ShareView" mode="Allow"/>
        <capability name="ViewComments" mode="Allow"/>
        <capability name="Filter" mode="Allow"/>
        <capability name="ExportData" mode="Allow"/>
        <capability name="Read" mode="Allow"/>
        <capability name="AddComment" mode="Allow"/>
        <capability name="ViewUnderlyingData" mode="Allow"/>
        <capability name="ExportImage" mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <user id="8eda27d9-5ad2-42cd-a39a-61bc01a423af"/>
      <capabilities>
        <capability name="ExportImage" mode="Allow"/>
        <capability name="ChangePermissions" mode="Deny"/>
      </capabilities>
    </granteeCapabilities>
  </permissions>
</tsResponse>
```

## 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

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

#### Request Body

```
<tsRequest>
  <favorite label="favorite-label">
    <view id="view-id" />
  </favorite>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">favorite-label</span></td><td>A label to assign to the favorite. This value is displayed when you search for favorites on the server.</td></tr><tr><td><span class="api-placeholder">view-id</span></td><td>The ID (not name) of the view to add as a favorite.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <favorites>
    <favorite label="favorite-labe1">
	  <view id="view-id"
	    name="view-name"
    	contentUrl="content-url"
	    createdAt="created-at"
		updatedAt="updated-at"
  		viewUrlName="view-url-name">
		  <workbook id="workbook-luid"/>
		  <project id"project-luid"/>
		  <tags />
	  </view>
	</favorite>
    ... additional favorites ...
  </favorites>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400005</td><td>Invalid label</td><td>The favorite label is empty or consists of only white space characters.</td></tr><tr><td>403</td><td>403004</td><td>Forbidden Favorites access</td><td>A 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.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the request body doesn't correspond to an existing view.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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:**

```
<tsRequest>
  <favorite label="Economic Indicators">
    <view id="1f1e1d1c-2b2a-2f2e-3d3c-3b3a4f4e4d4c" />
  </favorite>
</tsRequest>
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <favorites>
    <favorite label="DC Crimespotting">
	  <view id="08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6" name="Crimes_DC"
		contentUrl="content-url"
		createdAt="created-at"
		updatedAt="updated-at"
		viewUrlName="view-url-name">
		  <workbook id="abb3e4c1-e650-4704-870a-03fb7615136f"/>
		  <project id"3d6e8174-8cdf-43ec-94dd-0a1fd3662e47"/>
		  <tags />
	  </view>
    </favorite>
    <favorite label="Economic Indicators">
      <view id="1f1e1d1c2-b2a2-f2e3-d3c3-b3a4f4e4d4c"/>
    </favorite>
  </favorites>
</tsResponse>
```

## 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

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

#### Request Body

```
<tsRequest>
  <permissions>
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <!--   ...additional capabilities...   -->
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <!--   ...additional capabilities...   -->
      </capabilities>
    </granteeCapabilities>
    <!--   ...additional granteeCapability sets...   -->
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The LUID of the user to add permissions for. A request does not need to include both a user and a group grantee.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The LUID of the group to add permissions for. A request does not need to include both a user and a group grantee.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>
                   The capability to assign. Valid capabilities for a virtual connection are
                       <span class="api-command-ref">Read</span>,
                       <span class="api-command-ref">Connect</span>,
                       <span class="api-command-ref">Overwrite</span>,
                       <span class="api-command-ref">ChangeHierarchy</span>,
					   <span class="api-command-ref">Delete</span>, and
					   <span class="api-command-ref">ChangePermissions</span>.
				  </p>
                                                <p>For more information, see
<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to allow the capability,
                                    or <span class="api-command-ref">Deny</span> to deny it.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <permissions>
    <virtualConnection id="virtualconnection-id"
      name="virtual-connection-name">
      <owner id="user-id"/>
    </virtualConnection>
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <!--   ... additional capabilities ...   -->
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        <!--   ... additional capabilities ...   -->
      </capabilities>
    </granteeCapabilities>
    <!--   ... additional granteeCapability sets ...   -->
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The specified capability is invalid for a virtual connection. Valid capabilities for a virtual connection are <span class="api-command-ref">Read</span>, <span class="api-command-ref">Connect</span>, <span class="api-command-ref">Overwrite</span>, <span class="api-command-ref">ChangeHierarchy</span>, <span class="api-command-ref">Delete</span>, and <span class="api-command-ref">ChangePermissions</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>The user tried to change permissions for a virtual connection but doesn't have the permission to change them.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user specified in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group specified in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not assigned</td><td>The capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).</td></tr><tr><td>404</td><td>404014</td><td>Capability not found</td><td>A 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 <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr><tr><td>400</td><td>409004</td><td>Invalid LUID</td><td>The virtual connection LUID in the URI was not found.</td></tr></tbody></table>

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

#### Example

`curl --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 '<tsRequest> <permissions> <granteeCapabilities> <user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" /> <capabilities> <capability name="read" mode="allow" /> </capabilities> </granteeCapabilities> </permissions> </tsRequest>'`

## 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/current/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

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

#### Request Body

```
<tsRequest>
  <task>
    <extractRefresh transactionLevel="transaction-level" incremental="incremental-flag">
      <virtualConnection id="virtualconnection-id" />
      <startingItemIds>
        <startingItemId>starting-item-id</startingItemId>
        <!-- . . . more <startingItemId> elements . . . -->
      </startingItemIds>
    </extractRefresh>
  </task>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">transaction-level</span>
                                    </td>
                                    <td>
                                        <p>Optional. <span class="uicontrol">DATABASE</span> or <span class="uicontrol">TABLE</span>. Default is <span class="uicontrol">DATABASE</span>.</p>
                                        <ul>
                                            <li>If set to <span class="uicontrol">DATABASE</span>: If any table extract refresh fails, none of the extracts are updated.</li>
                                            <li>If set to <span class="uicontrol">TABLE</span>: If a table extract fails, only that table's extract isn't updated.</li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">incremental-flag</span>
                                    </td>
                                    <td>
                                        <p>Optional, boolean. Default is <span class="uicontrol">false</span>.</p>
                                        <ul>
                                            <li>If set to <span class="uicontrol">false</span>, do a full refresh. Fully refresh all extracts including those configured for incremental extract.</li>
                                            <li>If set to <span class="uicontrol">true</span>, do an incremental refresh. Add new rows to incremental extracts. Full refresh other extracts.</li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnection-id</span>
                                    </td>
                                    <td>
							The LUID of the virtual connection to add to the schedule.
						</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">starting-item-id</span>
                                    </td>
                                    <td>The LUID of an extract table in the virtual connection. You may have more than one <code>&lt;startingItemId&gt;</code> element inside of a <code>&lt;startingItemIds&gt;</code> element.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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 '<tsRequest><task><extractRefresh><virtualConnection id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd" /></extractRefresh></task></tsRequest>'
```

#### Response Code

200

#### Response Body

```
<tsResponse>
  <task>
    <extractRefresh id="9dd16fd7-8bbc-4c0d-9f75-9c7330a29396"
      priority="50"
      consecutiveFailedCount="0"
      type="ExtractServiceFullRefreshExtractTask"
      transactionLevel="DATABASE">
      <schedule id="c09d0586-80b3-4bb4-a1fa-508436243792"
        name="Weekday early mornings"
        state="Active"
        priority="50"
        createdAt="2026-07-15T12:28:01Z"
        updatedAt="2026-07-17T07:11:19Z"
        type="Extract"
        frequency="Weekly"
        nextRunAt="2026-07-20T04:00:00Z"/>
      <virtualConnection id="e3ebe049-8f94-4501-8fb0-faba6ccbbc85"/>
      <startingItemIds>
        <startingItemId>3577de68-2779-4962-b13d-3265ec98a4cb</startingItemId>
      </startingItemIds>
    </extractRefresh>
  </task>
</tsResponse>
```

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1" style="width: 56px;">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad Request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>

                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400223</td>
                                    <td>Virtual connection table not found.</td>
                                    <td>A LUID in <code>startingItemIds</code> is not an extract-eligible table on the virtual connection.</td>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400225</td>
                                    <td>Duplicate virtual connection table.</td>
                                    <td><code>startingItemIds</code> contains the same table LUID more than once.</td>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>404049</td>
                                    <td>No virtual connection specified.</td>
                                    <td>The request body must include a virtual connection in the <code>extractRefresh</code> element.</td>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>409004</td>
                                    <td>Invalid parameter.</td>
                                    <td><code>startingItemIds</code> contains a value that is not a valid LUID.</td>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>409090</td>
                                    <td>No extract-eligible tables.</td>
                                    <td>The virtual connection has no active revision, or none of its tables are configured for extract refresh.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403078</td>
                                    <td>Unable to create the task.</td>
                                    <td>
                                        <p>One of the following applies:</p>
                                        <ul>
                                            <li>The user is not a system or site administrator and does not own the virtual connection.</li>
                                            <li>The virtual connection already has a refresh scheduled on this schedule.</li>
                                            <li>The virtual connection is in a personal space.</li>
                                            <li>The extract refresh operation is not allowed for the virtual connection.</li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>

                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404023</td>
                                    <td>Schedule not found.</td>
                                    <td>Check the schedule LUID.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404049</td>
                                    <td>Virtual connection not found.</td>
                                    <td>Check the virtual connection LUID.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Method not allowed.</td>
                                    <td>Request type must be PUT.</td>
                                </tr>
                            </tbody>
                        </table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (<code>authUser.getSiteLuid()</code>).</td></tr><tr><td><span class="api-placeholder">workcopy-luid</span></td><td>The LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching <code>[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}</code>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <tdsElementList>
    <elementType>FieldDescription</elementType>
    <name>Sales</name>
    <description>Total sales amount.</description>
  </tdsElementList>
  <tdsElementList>
    <elementType>TableDescription</elementType>
    <name>Orders</name>
    <description>Order line items.</description>
  </tdsElementList>
</tsRequest>
```

```
{
  "tdsElementList": [
    {
      "elementType": "FieldDescription",
      "name": "Sales",
      "description": "Total sales amount."
    },
    {
      "elementType": "TableDescription",
      "name": "Orders",
      "description": "Order line items."
    }
  ]
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsElementList[]</span></td><td>Required. Elements to add. Must contain at least one element. An empty or missing list is HTTP 400 with error code <code>400008</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].elementType</span></td><td>Optional. Element type sent to the TDS service. For this operation, use <code>FieldDescription</code> or <code>TableDescription</code>. Any other value is forwarded and reported as a per-element failure.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].name</span></td><td>Required. Element name.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column</span></td><td>Not applicable to this method. The add converter has no <code>Column</code> branch, so a <code>column</code> payload on an add element is not copied and the element is reported as a per-element failure.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].description</span></td><td>Required for this method. Description text for a <code>FieldDescription</code> or <code>TableDescription</code> element. When <code>description</code> is null, the field is left unset so the TDS service can report a per-element failure instead of HTTP 500.</td></tr></tbody></table>

#### 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.

```
<tsResponse/>
```

```
{}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsElementResult[]</span></td><td>Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].elementType</span></td><td>Required. Element type of the failed element, copied from the request.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].name</span></td><td>Required. Name of the failed element, copied from the request.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status</span></td><td>Required. Failure status for this element.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status.code</span></td><td>Required (within <code>status</code>). The translated HTTP status for this element (200, 400, 401, 403, 404, 409, 500, or 503). Not a Tableau 6-digit error sub-code.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status.message</span></td><td>Optional. Error message from the TDS service.</td></tr></tbody></table>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Missing tdsElementList</td><td><code>tdsElementList</code> is missing or empty. The list is required and must contain at least one element.</td></tr><tr><td>400</td><td></td><td>Invalid work copy LUID</td><td>The work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).</td></tr><tr><td>400</td><td></td><td>Per-element invalid argument</td><td>One or more elements were rejected as invalid. The body lists only the failed elements, and each <code>status.code</code> is the HTTP status 400.</td></tr><tr><td>400</td><td></td><td>Unmapped per-element gRPC status</td><td>The TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>401</td><td></td><td>Per-element unauthenticated</td><td>The TDS service rejected an element as unauthenticated. The body lists only the failed elements.</td></tr><tr><td>403</td><td>403004</td><td>Data Management Bundle not licensed</td><td>On Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.</td></tr><tr><td>403</td><td>403004</td><td>Unable to resolve tenant</td><td>On Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.</td></tr><tr><td>403</td><td>403004</td><td>No cloud entitlements</td><td>On Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td>403004</td><td>Subscription not entitled</td><td>On Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td></td><td>Per-element permission denied</td><td>The TDS service rejected an element because permission was denied. The body lists only the failed elements.</td></tr><tr><td>404</td><td></td><td>Per-element not found</td><td>One 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.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The HTTP method is not supported for this resource.</td></tr><tr><td>409</td><td></td><td>Per-element already exists</td><td>One or more elements already exist. The body lists only the failed elements.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td></td><td>Per-element internal error</td><td>The TDS service failed while editing an element. The body lists only the failed elements.</td></tr><tr><td>503</td><td></td><td>Per-element unavailable</td><td>The TDS service was unavailable while editing an element. The body lists only the failed elements.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <permissions>
    <workbook id="workbook-id" />
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability-name" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">workbook-id</span>
                                            </td>
                                            <td>
            The <span class="api-command-ref">&lt;workbook&gt;</span> element is not required, but can be included for compatibility with earlier versions of
            the REST API. If the <span class="api-command-ref">&lt;workbook&gt;</span> element is included, the <span class="api-placeholder">workbook-id</span>
            value must match the workbook ID in the URI. Any other attributes in the <span class="api-command-ref">&lt;workbook&gt;</span> element are ignored.
               </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID (not name) of the user to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID (not name) of the group to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>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
                     <span class="api-command-ref">AddComment</span>,
                     <span class="api-command-ref">ChangeHierarchy</span>,
                     <span class="api-command-ref">ChangePermissions</span>,
					 <span class="api-command-ref">CreateRefreshMetrics</span>,
                     <span class="api-command-ref">Delete</span>,
                     <span class="api-command-ref">ExportData</span>,
                     <span class="api-command-ref">ExportImage</span>,
                     <span class="api-command-ref">ExportXml</span>, <strong>ExtractRefresh</strong>,
                     <span class="api-command-ref">Filter</span>,
                     <span class="api-command-ref">Read</span> (view),
					 <span class="api-command-ref">RunExplainData</span>,
                     <span class="api-command-ref">ShareView</span>,
                     <span class="api-command-ref">ViewComments</span>,
                     <span class="api-command-ref">ViewUnderlyingData</span>,
                     <span class="api-command-ref">WebAuthoring</span>, and
				 	 <span class="api-command-ref">Write</span>.
				</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to allow the capability,
                                    or <span class="api-command-ref">Deny</span> to deny it. This value is case sensitive.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <permissions>
    <workbook id="workbook-id" />
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are <span class="api-command-ref">AddComment</span>, <span class="api-command-ref">ChangeHierarchy</span>, <span class="api-command-ref">ChangePermissions</span>, <span class="api-command-ref">CreateRefreshMetrics</span>, <span class="api-command-ref">Delete</span>, <span class="api-command-ref">ExportData</span>, <span class="api-command-ref">ExportImage</span>, <span class="api-command-ref">ExportXml</span>, <span class="api-command-ref">Filter</span>, <span class="api-command-ref">Read</span> (view), <span class="api-command-ref">RunExplainData</span>, <span class="api-command-ref">ShareView</span>, <span class="api-command-ref">ViewComments</span>, <span class="api-command-ref">ViewUnderlyingData</span>, <span class="api-command-ref">WebAuthoring</span>, and <span class="api-command-ref">Write</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to set permissions on the workbook.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>A user ID in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group ID in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <favorite label="favorite-label">
    <workbook id="workbook-id" />
  </favorite>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">favorite-label</span></td><td>A 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.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID (not name) of the workbook to add as a favorite.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <favorites>
      <favorite label="favorite-label">
        <workbook id="workbook-id" />
      </favorite>
      <favorite label="favorite">
        <view id="view-id" />
      </favorite>
      ... additional favorites ...
  </favorites>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400005</td>
                                            <td>Invalid label</td>
                                            <td>
                                                <p>The favorite label is empty or consists of only white space characters.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403004</td>
                                            <td>Access to Favorites forbidden</td>
                                            <td>
                                                <p>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.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404002</td>
                                            <td>User not found</td>
                                            <td>The user ID in the URI doesn't correspond to an existing user.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404006</td>
                                            <td>Workbook not found</td>
                                            <td>The workbook ID in the request body doesn't correspond to an existing workbook.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

## 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/current/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

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

#### Request Body

```
<tsRequest>
  <task>
    <extractRefresh>
      <workbook id="workbook-id" />
    </extractRefresh>
  </task>
  <task>
    <dataAcceleration>
      <workbook id="workbook-id" />
    </dataAcceleration>
  </task>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook to add to the schedule.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <task>
    <extractRefresh id="extractRefresh-id" type="extractRefresh-type">
      <schedule id="schedule-id" />
      <workbook id="workbook-id" />
    </extractRefresh>
  </task>
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403032</td><td>Update Forbidden</td><td>A non-administrator user called this method, but the caller doesn't have sufficient permissions.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI is unknown.</td></tr><tr><td>404</td><td>404006</td><td>Resource not found</td><td>The workbook ID in the request body is unknown.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr><tr><td>500</td><td>500000</td><td>Internal Server Error</td><td>The schedule ID in the URI is unknown.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/ 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:**

```
<tsRequest>
  <task>
    <extractRefresh>
      <workbook id="5de9cc53-b17d-45af-804d-49144b39f29f" />
    </extractRefresh>
  </task>
</tsRequest>
```

**Example response:**

```
<tsResponse>
  <task>
    <extractRefresh id="9bf8aea0-e3ca-422e-b7ef-d9c4ba6cca45" priority="50" consecutiveFailedCount="0" type="RefreshExtractTask">
      <schedule id="9a4ebbab-9ec8-487a-9b48-47fa81d6077a" name="Weekday early mornings" state="Active" />
      <workbook id="5de9cc53-b17d-45af-804d-49144b39f29f" />
    </extractRefresh>
  </task>
</tsResponse>
```

## 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/current/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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site to upload the file to.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">upload-session-id</span>
                                            </td>
                                            <td>The ID of the upload session. You get this value when you start an upload session using <a href="#initiate_file_upload"><span class="api-command-ref">Initiate File Upload</span></a>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">sequence-id</span>
                                                </p>
                                            </td>
                                            <td>
                                                <p>(Optional) A long integer that you choose, indicative of the block's order in the complete sequence.</p>
                                                <p>After you append all the blocks and call the <a href="#publish_data_source">Publish Data Source</a>, <a href="#publish_flow">Publish Flow</a>, or
        <a href="#publish_workbook">Publish Workbook</a> method, the <strong class="api-command-ref">sequenceID</strong> is used to order the blocks, low <span class="api-command-ref">sequenceID</span> to high <span class="api-command-ref">sequenceID</span>, and the combined blocks are written as the file. Therefore, the <span class="api-command-ref">sequenceID</span> should be incremented for each block (though it doesn't have to incremented by 1).</p>
                                                <p>If you don't include <strong class="api-command-ref">sequenceID</strong> 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 <strong class="api-command-ref">sequenceID</strong> isn't used.</p>
                                                <p class="note">Note: The <span class="api-command-ref">sequenceID</span> 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.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/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

```
<tsResponse>
  <fileUpload uploadSessionId=upload-session-id
              fileSize=size-of-file-in-megabytes-after-append />
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400016</td><td>File size too large</td><td>The attached file exceeds the configured maximum attachment size for a single append call. The maximum allowable size will be reported in the error response.</td></tr><tr><td>400</td><td>400019</td><td>Malformed request body</td><td>The XML content in the MIME multipart request is not empty.</td></tr><tr><td>400</td><td>400020</td><td>Missing file data</td><td>There is no attachment in the request with the file data to be appended to the upload.</td></tr><tr><td>403</td><td>403007</td><td>Not a publisher</td><td>A non-administrator user attempted to initiate a file upload, but the caller doesn't have publishing rights on the site.</td></tr><tr><td>403</td><td>403016</td><td>Upload failure</td><td>The file could not be uploaded for some other reason than those specified earlier.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404015</td><td>File upload not found</td><td>The file upload ID in the URI doesn't correspond to an existing file upload.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <contentList>
	<content contentType="content" id="database-id" />
	<content contentType="content" id="table-id" />
	<content contentType="content" id="datasource-id" />
	<content contentType="content" id="virtualconnection-id" />
	<content contentType="content" id="virtualconnectiontable-id" />
  </contentList>
  <dataQualityIndicator type="type" message="message"
	active="state" elevated="severity" />
</tsRequest>
```

#### Attribute Values

Any combination of attributes inside the **<dataQualityIndicator>** element is valid, however **type** and **message** attributes are required.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">content</span>
                                    </td>
                                    <td>
                                        <p>The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:</p>
                                        <ul>
                                            <li><span class="api-label">database</span>
                                            </li>
                                            <li><span class="api-label">table</span>
                                            </li>
                                            <li><span class="api-label">datasource</span>
                                            </li>
                                            <li><span class="api-label">virtualconnection</span>
                                            </li>
                                            <li><span class="api-label">virtualconnectiontable</span>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">database-id</span>
                                    </td>
                                    <td>The unique ID of the database asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">table-id</span>
                                    </td>
                                    <td>The unique ID of the table asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-id</span>
                                    </td>
                                    <td>The unique ID of the data source content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnection-id</span>
                                    </td>
                                    <td>The unique ID of the virtual connection asset.
					</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnectiontable-id</span>
                                    </td>
                                    <td>The unique ID of the virtual connection table asset.
					</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">type</span>
                                    </td>
                                    <td>
                                        <p>Use the following value to apply a data quality certification:&nbsp;<span class="uicontrol">CERTIFIED</span>.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">message</span>
                                    </td>
                                    <td>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/Img/formatting_guide.png" target="_blank">formatting guide</a> that's normally visible as a tooltip in the UI.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">state</span>
                                    </td>
                                    <td>(Optional) Controls whether the data quality certification displays. Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". 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 <a href="https://help.tableau.com/current/server/en-us/datasource_certified.htm">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/datasource_certified.htm">Cloud Help</a>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">severity</span>
                                    </td>
                                    <td>(Optional) Enables high visibility for when the data quality certification is set to "<span class="uicontrol">true</span>". Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". If the severity is not specified, the data quality certification is set to "false." This setting is available only through the REST API.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsRequest>
  <dataQualityIndicatorList>
	<dataQualityIndicator id="8f58aa47-7313-4504-8537-52d869552e18"
	    userDisplayName="Mark Nguyen" contentId="7cfd2ac8-a934-4aa8-bf24-96bff08a019c" contentType="DATABASE" message="Marketing approved" type="CERTIFIED" active="true" createdAt="2021-09-26T21:34:46Z" updatedAt="2021-09-26T21:34:46Z" elevated="true">
	  <site id="1e4b3aa0-b48a-4b8e-9bdf-74b7596b9f0a" />
	  <owner id="adcc51d7-8558-4099-9f87-dc1a1615d297" />
	</dataQualityIndicator>
	<dataQualityIndicator id="c8f0b332-a1c1-48f1-b650-86f342ab937f"
	    userDisplayName="Mark Nguyen" contentId="f6dcfd24-7c65-40f4-a3f3-c29f91b7731e" contentType="DATASOURCE" message="Marketing approved" type="CERTIFIED" active="true" createdAt="2021-09-26T21:34:46Z" updatedAt="2021-09-26T21:34:46Z" elevated="true">
	  <site id="1e4b3aa0-b48a-4b8e-9bdf-74b7596b9f0a" />
	  <owner id="adcc51d7-8558-4099-9f87-dc1a1615d297" />
	<dataQualityIndicator>
  </dataQualityIndicatorList>
</tsRequest>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400108</td><td>Generic data quality certification error</td><td>The data quality certification could not be added for some reason other than those specified in this table.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The content does not exist.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <contentList>
	<content contentType="content" id="database-id" />
	<content contentType="content" id="table-id" />
	<content contentType="content" id="column-id" />
	<content contentType="content" id="datasource-id" />
	<content contentType="content" id="flow-id" />
	<content contentType="content" id="virtualconnection-id" />
	<content contentType="content" id="virtualconnectiontable-id" />
  </contentList>
  <dataQualityWarning type="type" message="message" isActive="state" isSevere="severity" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">content</span>
                                    </td>
                                    <td>
                                        <p>The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:</p>
                                        <ul>
                                            <li><span class="api-label">database</span>
                                            </li>
                                            <li><span class="api-label">table</span>
                                            </li>
                                            <li><span class="api-label">column</span> <i>- Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)</i></li>
                                            <li><span class="api-label">datasource</span>
                                            </li>
                                            <li><span class="api-label">flow</span>
                                            </li>
                                            <li><span class="api-label">virtualconnection</span>
                                            </li>
                                            <li><span class="api-label">virtualconnectiontable</span>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">database-id</span>
                                    </td>
                                    <td>The unique ID of the database asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">table-id</span>
                                    </td>
                                    <td>The unique ID of the table asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">column-id</span>
                                    </td>
                                    <td>The unique ID of the column asset.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-id</span>
                                    </td>
                                    <td>The unique ID of the data source content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">flow-id</span>
                                    </td>
                                    <td>The unique ID of the flow content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnection-id</span>
                                    </td>
                                    <td>The unique ID of the virtual connection.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnectiontable-id</span>
                                    </td>
                                    <td>The unique ID of the virtual connection table.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">type</span>
                                    </td>
                                    <td>
                                        <p>The type of data quality warning to apply to the content or asset. To specify type, use one of the following values:</p>
                                        <ul>
                                            <li><span class="uicontrol">DEPRECATED</span>
                                            </li>
                                            <li><span class="uicontrol">WARNING</span>
                                            </li>
                                            <li><span class="uicontrol">STALE</span>
                                            </li>
                                            <li><span class="uicontrol">SENSITIVE_DATA</span>
                                            </li>
                                            <li><span class="uicontrol">MAINTENANCE</span>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">message</span>
                                    </td>
                                    <td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/Img/formatting_guide.png" target="_blank">formatting guide</a> that's normally visible as a tooltip in the UI.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">state</span>
                                    </td>
                                    <td>(Optional) Controls whether the data quality warning displays. Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". 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 <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm">Cloud Help</a>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">severity</span>
                                    </td>
                                    <td>(Optional) Enables high visibility for when the data quality warning is set to "<span class="uicontrol">true</span>". Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm#high_visibility">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm#high_visibility">Cloud Help</a>. </td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsRequest>
  <dataQualityWarningList>
	<dataQualityWarning id="8f58aa47-7313-4504-8537-52d869552e18" userDisplayName="Mark Nguyen" contentId="7cfd2ac8-a934-4aa8-bf24-96bff08a019c" contentType="DATABASE" message="Contact admin with questions" type="WARNING" isActive="true" createdAt="2021-06-26T21:34:46Z" updatedAt="2021-06-26T21:34:46Z" isSevere="true">
	  <site id="1e4b3aa0-b48a-4b8e-9bdf-74b7596b9f0a" />
	  <owner id="adcc51d7-8558-4099-9f87-dc1a1615d297" />
	</dataQualityWarning>
	<dataQualityWarning id="c8f0b332-a1c1-48f1-b650-86f342ab937f" userDisplayName="Mark Nguyen" contentId="f6dcfd24-7c65-40f4-a3f3-c29f91b7731e" contentType="DATASOURCE" message="Contact admin with questions" type="WARNING" isActive="true" createdAt="2021-06-26T21:34:46Z" updatedAt="2021-06-26T21:34:46Z" isSevere="true">
	  <site id="1e4b3aa0-b48a-4b8e-9bdf-74b7596b9f0a" />
	  <owner id="adcc51d7-8558-4099-9f87-dc1a1615d297" />
	<dataQualityWarning>
  </dataQualityWarningList>
</tsRequest>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400109</td><td>Bad request</td><td>The content of the request body (content type, content id, or dataQualityWarning attributes) is missing, incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400108</td><td>Generic add data quality warning error</td><td>The data quality warning could not be added for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The content does not exist.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <tagBatch>
	<tags>
	   <tag label="tag-value1"></tag>
	   <tag label="tag-value2"></tag>
	</tags>
	<contents>
	   <content id="database-id"></content>
	   <content id="table-id"></content>
	   <content id="column-id"></content>
	   <content id="datasource-id"></content>
	   <content id="workbook-id"></content>
	   <content id="flow-id"></content>
	</contents>
  </tagBatch>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">tag-value1</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to item.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">tag-value2</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to item.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">database-id</span>
                                    </td>
                                    <td>The unique ID of the database asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">table-id</span>
                                    </td>
                                    <td>The unique ID of the table asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">column-id</span>
                                    </td>
                                    <td>The unique ID of the column asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-id</span>
                                    </td>
                                    <td>The unique ID of the data source content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">workbook-id</span>
                                    </td>
                                    <td>The unique ID of the workbook content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">flow-id</span>
                                    </td>
                                    <td>The unique ID of the flow content.
</td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsRequest>
  <tagBatch>
	<tags>
	   <tag label="PII"></tag>
	   <tag label="Noteworthy"></tag>
	</tags>
	<contents>
	   <content id="21cade8c-d4eb-4fef-bd4a-bdb9d8b09b7d" contentType="Database"></content>
	   <content id="a0314be1-afd4-4a4f-ab85-d75dac661c41" contentType="Table"></content>
	   <content id="8fec4046-e054-476d-a6d0-e808b0d5448b" contentType="Column"></content>
	   <content id="c8c3a0be-3ac8-4de7-8bd6-f912900a1ccd" contentType="Datasource"></content>
	   <content id="ec2b7845-d627-430e-b99c-8543ed50b25c" contentType="Workbook"></content>
	   <content id="c4a560eb-c8a6-48c6-86f4-c9d5e518d027" contentType="Flow"></content>
	</contents>
  </tagBatch>
</tsRequest>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The content does not exist.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The database asset does not exist.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The table asset does not exist.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr><tr><td>409</td><td>409066</td><td>Column not found</td><td>The column asset does not exist.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <contentList>
	<content contentType="content" id="database-id" />
	<content contentType="content" id="table-id" />
	<content contentType="content" id="column-id" />
	<content contentType="content" id="datasource-id" />
	<content contentType="content" id="flow-id" />
	<content contentType="content" id="virtualconnection-id" />
	<content contentType="content" id="virtualconnectiontable-id" />
  </contentList>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">content</span>
                                    </td>
                                    <td>
                                        <p>The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:</p>
                                        <ul>
                                            <li><span class="api-label">database</span>
                                            </li>
                                            <li><span class="api-label">table</span>
                                            </li>
                                            <li><span class="api-label">column</span> <i>- Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)</i></li>
                                            <li><span class="api-label">datasource</span>
                                            </li>
                                            <li><span class="api-label">flow</span>
                                            </li>
                                            <li><span class="api-label">virtualconnection</span>
                                            </li>
                                            <li><span class="api-label">virtualconnectiontable</span>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">database-id</span>
                                    </td>
                                    <td>The unique ID of the database asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">table-id</span>
                                    </td>
                                    <td>The unique ID of the table asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">column-id</span>
                                    </td>
                                    <td>The unique ID of the column asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-id</span>
                                    </td>
                                    <td>The unique ID of the data source content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">flow-id</span>
                                    </td>
                                    <td>The unique ID of the flow content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnection-id</span>
                                    </td>
                                    <td>The unique ID of the virtual connection.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnectiontable-id</span>
                                    </td>
                                    <td>The unique ID of the virtual connection table.</td>
                                </tr>
                            </tbody>
                        </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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The content does not exist.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The database asset does not exist.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The table asset does not exist.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <tagBatch>
	<tags>
	   <tag label="tag-value1"></tag>
	   <tag label="tag-value2"></tag>
	</tags>
	<contents>
	   <content id="database-id"></content>
	   <content id="table-id"></content>
	   <content id="column-id"></content>
	   <content id="datasource-id"></content>
	   <content id="workbook-id"></content>
	   <content id="flow-id"></content>
	</contents>
  </tagBatch>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">tag-value1</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to item.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">tag-value2</span>
                                    </td>
                                    <td>
                                        <p>Keyword text you want to add to item.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">database-id</span>
                                    </td>
                                    <td>The unique ID of the database asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">table-id</span>
                                    </td>
                                    <td>The unique ID of the table asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">column-id</span>
                                    </td>
                                    <td>The unique ID of the column asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-id</span>
                                    </td>
                                    <td>The unique ID of the data source content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">workbook-id</span>
                                    </td>
                                    <td>The unique ID of the workbook content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">flow-id</span>
                                    </td>
                                    <td>The unique ID of the flow content.
</td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsRequest>
  <tagBatch>
	<tags>
	   <tag label="PII"></tag>
	   <tag label="Noteworthy"></tag>
	</tags>
	<contents>
	   <content id="database-id"></content>
	   <content id="table-id"></content>
	   <content id="column-id"></content>
	   <content id="datasource-id"></content>
	   <content id="workbook-id"></content>
	   <content id="flow-id"></content>
	</contents>
  </tagBatch>
</tsRequest>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The content does not exist.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The database asset does not exist.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The table asset does not exist.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr><tr><td>409</td><td>409066</td><td>Column not found</td><td>The column asset does not exist.</td></tr></tbody></table>

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.
						</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">state-enum</span>
                                        </td>
                                        <td><i>Required, enum.</i> Either <code>active</code> or <code>suspended</code>. The state for the schedule(s).</td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <p><span class="api-placeholder">update-all-flag</span>
                                            </p>
                                        </td>
                                        <td>
                                            <p><i>Optional, boolean.</i> If <code>true</code>, then the list of schedule IDs in the request body is ignored, and the operation affects all schedules on the Tableau Server.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

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

```
<tsRequest>
  <scheduleLuids>
    <scheduleLuid>schedule-id</scheduleLuid>
    <!-- ... additional scheduleLuid elements ... -->
  </scheduleLuids>
</tsRequest>
```

{
  "scheduleLuids": {
    "scheduleLuid": \[
      "schedule-id"
    \]
  }
}

#### Request Attributes

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td>
                                            <p><span class="api-placeholder">schedule-id</span>
                                            </p>
                                        </td>
                                        <td>
                                            <p>The LUID of the schedule. You can include multiple <span class="api-placeholder">schedule-id</span>s using additional <code>&lt;scheduleLuid&gt;</code> elements (in XML) or by comma-separating multiple <span class="api-placeholder">schedule-id</span>s (in JSON).</p>
                                            <p><strong>Note</strong>: If the <code>updateAll</code> URI parameter is included, <span class="api-placeholder">schedule-id</span>s in the request body are ignored.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### 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:**

```
<tsRequest>
    <scheduleLuids>
        <scheduleLuid>12ab34cd-56ef-78ab-90cd-12ef34ab56cd</scheduleLuid>
        <scheduleLuid>08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6</scheduleLuid>
    </scheduleLuids>
</tsRequest>
```

#### Response Code

200

#### Response Body

The response body is a list of schedules that were updated with the call.

```
<tsResponse>
  <scheduleLuids>
    <scheduleLuid>schedule-id</scheduleLuid>
    <!-- ... additional scheduleLuid elements ... -->
  </scheduleLuids>
</tsResponse>
```

```
{
  "scheduleLuids": {
    "scheduleLuid": [
      "schedule-id"
    ]
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Generic error</td><td>An unknown error occurred. The content of the request body may be missing or incomplete, or may contain malformed XML.</td></tr><tr><td>403</td><td>403188</td><td>Permissions error</td><td>User calling the method isn't a server administrator.</td></tr><tr><td>403</td><td>403189</td><td>Invalid LUID</td><td>One or more of the schedule LUIDs isn't a valid LUID.</td></tr><tr><td>404</td><td>404023</td><td>LUID not found</td><td>One or more of the schedule LUIDs isn't found.</td></tr><tr><td>405</td><td>405000</td><td>Availability error</td><td>This method only exists on Tableau Server. Tableau Cloud isn't supported.</td></tr><tr><td>409</td><td>409004</td><td>Parameter error</td><td>The state parameter is absent or not recognized; or the updateAll parameter was absent or false and no schedule LUIDs were provided.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <bridgeDomain existingDomainName="example.com" isBlocked="true" />
</tsRequest>
```

```
{
  "bridgeDomain": {
    "existingDomainName": "example.com",
    "isBlocked": true
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">existingDomainName</span></td><td>Required. The domain to block or unblock.</td></tr><tr><td><span class="api-placeholder">isBlocked</span></td><td>Set to <code>true</code> to block the domain; set to <code>false</code> to unblock (remove from blocked list).</td></tr></tbody></table>

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid domain name or missing isBlocked</td><td>Domain must conform to valid format; isBlocked parameter is required.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503905</td><td>Unexpected server error</td><td>An unexpected error occurred while blocking the domain.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403135</td><td>Flow run already complete</td><td>The flow run is already complete so it could not be canceled.</td></tr><tr><td>403</td><td>403137</td><td>User does not have permissions to cancel flow run</td><td>In 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.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404036</td><td>Flow run not found</td><td>The flow run ID in the URI doesn't correspond to an existing flow run.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403032</td><td>Update forbidden</td><td>A non-administrator user tried to cancel a job.</td></tr><tr><td>403</td><td>403091</td><td>Can not cancel job, because it's already complete.</td><td>The job ID provided is for a job that has already succeeded or failed.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>PUT</b>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/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/<site-id>/webhooks

#### Parameter Values

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

#### Request Body

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

#### Attribute Values

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

#### Permissions

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

#### Access Scope

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

```
tableau:webhooks:create
```

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

#### Response Code

201

#### Response Body

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

#### Response Headers

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID of the site.</td></tr><tr><td><span class="api-placeholder">datasource-id</span></td><td>The LUID of the datasource.</td></tr><tr><td><span class="api-placeholder">encryption-flag</span></td><td>If <code>true</code>, then Tableau will attempt to encrypt the created extracts. If <code>false</code>, or no <code>encrypt</code> 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 <code>encrypt</code> equals <code>true</code> and encryption is disabled in the site or workbook.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <job id="job-id" mode="Asynchronous" type="CreateExtract" createdAt="date-time">
    <extractCreationJob>
	  <datasource id="datasource-id" name="datasource-name" />
  </extractCreationJob>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409070</td><td>Invalid request method</td><td>The data source cannot be extracted because it is file based or in another unsupported form.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/datasources/abcd7c6d-5e4f-3a2b-1c0d-9e8f7a6b1234/createExtract" -X POST -H "X-Tableau-Auth: oIcGYxkXSBCLLVm91mfITg|jCQSkWoIbUQVwTcH8WUTWD5nCoOf53LE"`

**Response body:**

```
<tsResponse>
  <job id="df410925-feae-481d-bf84-2f37bdf7ce69" mode="Asynchronous" type="CreateExtract" createdAt="2019-11-05T00:06:57Z">
    <extractCreationJob>
        <datasource id="e35ec79d-9526-44f1-9a67-7a8b63d265df" name="MY_DATASOURCE_NAME"/>
      <jobLuid>df410925-feae-481d-bf84-2f37bdf7ce69</jobLuid>
    </extractCreationJob>
  </job>
</tsResponse>
```

## 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

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

#### Request Body

```
<tsRequest>
  <edgePool>
    <pool name="Production Pool" />
  </edgePool>
</tsRequest>
```

```
{
  "edgePool": {
    "pool": {
      "name": "Production Pool"
    }
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">name</span></td><td>Required. Display name for the pool, 1–80 characters. Must be unique within the site.</td></tr></tbody></table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004 / 400929</td><td>Missing, empty, invalid, or duplicate pool name</td><td>Pool name required, 1–80 characters; must be unique on the site.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503900</td><td>Unexpected server error</td><td>An unexpected error occurred while creating the pool.</td></tr></tbody></table>

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

## Create 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/current/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/current/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/current/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

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

#### Request Body

```
<tsRequest>
  <extractRefresh type="FullRefresh">
    <workbook id="54321fd-6365-44d5-925b-644e5281b605" />
  </extractRefresh>
  <schedule frequency="Daily">
    <frequencyDetails start="18:30:00" end="23:30:00">
      <intervals>
        <interval hours="4"/>
        <interval weekDay="Sunday"/>
        <interval weekDay="Wednesday"/>
      </intervals>
    </frequencyDetails>
  </schedule>
</tsRequest>
```

```
{
  "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.

<table class="api-parameters-table">
                            <colgroup>
                                <col width="30%">
                                <col width="70%">
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><code>extractRefresh type</code>
                                    </td>
                                    <td>The type of extract refresh being scheduled. Valid values include:
						<ul><li><code>FullRefresh</code></li><li><code>IncrementalExtract</code></li></ul></td>
                                </tr>
                                <tr>
                                    <td><code>extractRefresh transactionLevel</code>
                                    </td>
                                    <td>
                                        <p><i>(Optional) :</i> Only used with a virtual connection.</p>
                                        <p>Optional. <span class="uicontrol">DATABASE</span> or <span class="uicontrol">TABLE</span>. Default is <span class="uicontrol">DATABASE</span>.</p>
                                        <ul>
                                            <li>If set to <span class="uicontrol">DATABASE</span>: If any table extract refresh fails, none of the extracts are updated.</li>
                                            <li>If set to <span class="uicontrol">TABLE</span>: If a table extract fails, only that table's extract isn't updated.</li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>workbook id</code> <br> or <code>datasource id</code> <br> or <code>virtualConnection id</code></td>
                                    <td>The LUID of the workbook, data source, or virtual connection that is the target of the custom schedule.</td>
                                </tr>
                                <tr>
                                    <td><code>startingItemId</code>
                                    </td>
                                    <td>
                                        <p>Only used with a virtual connection, when <code>extractRefresh type</code> is <code>FullRefresh</code></p>
                                        <p>The LUID of an extract table in the virtual connection. You may have more than one <code>&lt;startingItemId&gt;</code> element inside of a <code>&lt;startingItemIds&gt;</code> element. See Virtual Connection Example.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>tableLuid</code>
                                    </td>
                                    <td>
                                        <p>Only used with a virtual connection, when <code>extractRefresh type</code> is <code>IncrementalExtract</code></p>
                                        <p>The LUID of an extract table in the virtual connection. You may have more than one <code>&lt;tableLiud&gt;</code> element inside of a <code>&lt;tableLiuds&gt;</code> element. See Virtual Connection Example.</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table> <table class="api-parameters-table">
                            <colgroup>
                                <col width="30%">
                                <col width="70%">
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><code>schedule frequency</code>
                                    </td>
                                    <td><i>(Required to create subscription) enumeration:</i> The scheduled frequency for triggering the task. Valid values include:
							<ul><li>Hourly</li><li>Daily</li><li>Weekly</li><li>Monthly</li></ul></td>
                                </tr>
                                <tr>
                                    <td><code>frequencyDetails start</code>
                                    </td>
                                    <td><i>(Required to create subscription) time:</i> If the schedule frequency is <code>Daily, Weekly, or Monthly</code>, then <code>start</code>
						is the time of day on which scheduled jobs should run. If the frequency is <code>Hourly</code>, then <code>start</code> is the beginning of the
								time range during which jobs should be started. The valid format is <code>HH:MM:SS</code>.
					</td>
                                </tr>
                                <tr>
                                    <td><code>frequencyDetails end</code>
                                    </td>
                                    <td>
                                        <p><i>(Required to create subscription) time:</i> If the schedule frequency is <code>Hourly</code>, or <code>Daily</code> with an interval of
							<code>hours</code> less than <code>24</code>, then <code>end</code> is the time of day on which scheduled jobs should stop being run.
							The valid format is <code>HH:MM:SS</code>. 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 <code>frequencyDetail</code> would be:
</p><pre><code>&lt;frequencyDetail start="20:45:00" end="21:45:00"&gt;
  . . .
&lt;/frequencyDetail&gt;</code></pre>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>interval <i>{interval type}</i></code>
                                    </td>
                                    <td><i>(Required to create subscription) string:</i> Defines when and how often a scheduled job executes within the time parameters set in the <code>start</code> and <code>end</code>
							 values of the <code>frequencyDetails</code> of the <code>schedule</code>. The type and valid values for
							an interval expression depend on the declared <code>frequency</code> of the <code>schedule</code> as follows:<br><br><table><colgroup><col width="20%"><col width="80%"></colgroup><tbody><tr align="left"><th><b>Frequency</b></th><th><b>Valid interval values</b></th></tr><tr><td><code>Hourly</code></td><td> The value of an interval for an <code>Hourly</code> schedule can be only one of either:
							<ul><li><code>hours="1"</code>
									The number of hours between jobs. <code>1</code> is the only valid value.</li><li><code>minutes="60"</code>
									 The number of minutes between jobs. <code>60</code> is the only valid value.</li><li><code>weekDay="<i>weekday"</i></code> The weekday(s) the job will be run on.
									Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
								 	Thursday, Friday, and Saturday</code>. <br><br>
									For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
									use an interval like:
											<pre><code>&lt;intervals&gt;
  &lt;interval hours="1"/&gt;
  &lt;interval weekDay="Sunday"/&gt;
  &lt;interval weekDay="Wednesday"/&gt;
&lt;intervals&gt;</code></pre></li></ul><br></td></tr><tr><td><code>Daily</code></td><td>
									The value of <code>Daily</code> can have multiple <code>weekday</code> elements, but only one <code>hours</code> declaration.
										An <code>hours</code> interval is required.
									<ul><li><code>hours="<i>interval</i>"</code> The interval between execution of jobs on the weekday(s) specified.
											Valid values are <code>2, 4, 6, 8, 12, or 24</code>. Note that if the <code><i>interval</i></code> value of a daily schedule
												is less than <code>24</code>, a <code>frequencyDetail end</code> time must be supplied. </li><li><code>weekDay="<i>weekday</i>"</code> The weekday(s) the job will be run on.
											Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
										 	Thursday, Friday, or Saturday</code>. <br><br>
											For example, to schedule to run a job every 4 hours	on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
											use an interval like:<br><pre><code>&lt;intervals&gt;
  &lt;interval hours="4"/&gt;
  &lt;interval weekDay="Sunday"/&gt;
  &lt;interval weekDay="Wednesday"/&gt;
&lt;intervals&gt;</code></pre></li></ul></td></tr><tr><td><code>Weekly</code></td><td><code>weekDay="<i>weekday</i>"</code>
												The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are:
											<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.</code></td></tr><tr><td><code>Monthly</code></td><td> <p>The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:</p><p>Specify the day(s) using the number of the day in the month;
											</p><ul><li><code>monthDay="<i>day</i>"</code> The number of the day of the month. Valid values are the whole numbers
												<code>1</code> to <code>31</code> or <code>LastDay</code>. If you specify <code>monthDay</code> by day number
												then you can use multiple <code>interval</code> instances to choose for the job to
												run on multiple days in the month. If you use <code>LastDay</code> then only one instance of <code>interval</code>
												can be used in the schedule to specify the last day of the month.</li></ul><p></p><p>Specify the day by describing which occurrence of a weekday within the month.
										</p><ul><li><code>monthDay="<i>occurrence_of_weekday</i>" Weekday="<i>weekday</i>"</code>
													The occurrence of the specified weekday within the month when a job should be run.
													Valid values for <code><i>occurrencee_of_weekday</i></code> are	<code>First, Second, Third, Fourth, Fifth, or LastDay</code>.
													Valid values for <code><i>weekday</i></code> are
													<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday</code>.
													If the value is <code>lastDay</code> then the job will run on
													the last occurrence of the specified weekday in the month.<br><br>
													For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:<br><pre><code>&lt;interval monthDay="Third" weekDay="Thursday"/&gt;</code></pre></li></ul><p></p></td></tr></tbody></table></td>
                                </tr>
                            </tbody>
                        </table>

#### 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 `<extractRefresh>` 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:_

```
<extractRefresh type="IncrementalRefresh" transactionLevel="TABLE">
  <virtualConnection id="33a16da9-e96b-4190-83ed-c85192683052" />
  <tableLuids>
    <tableLuid>b4e39d59-19c3-4380-8ea4-9bfa4ed8fb84</tableLuid>
    <!-- . . . more <tableLuid> elements . . . -->
  </tableLuids>
</extractRefresh>
```

#### 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 "<tsRequest> <extractRefresh type='FullRefresh'> <workbook id='0057ccac-872a-11e5-bb51-f763326b1350' /> </extractRefresh> <schedule frequency='Daily'> <frequencyDetails start='18:30:00' end='23:00:00'> <intervals> <interval hours='4'/> </intervals> <intervals> <interval weekDay='Sunday'/> </intervals> <intervals> <interval weekDay='Wednesday'/> </intervals> </frequencyDetails> </schedule> </tsRequest>"`

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`.

```
<tsResponse>
  <extractRefresh
    id="13237fd-6365-44d5-925b-644e5281b605"
    consecutiveFailedCount="0"
    type="IncrementalRefresh" >
      <datasource id="0057ccac-872a-11e5-bb51-f763326b1350" />
  </extractRefresh>
  <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"/>
          <interval weekDay="Sunday"/>
          <interval weekDay="Wednesday"/>
        </intervals>
      </frequencyDetails>
  </schedule>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400225</td><td>Duplicate starting item</td><td><code>startingItemIds</code> contains a duplicate table LUID.</td></tr><tr><td>409</td><td>409090</td><td>Extract operation not allowed</td><td>The virtual connection has no extract-configured tables; all tables are live.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>404</td><td>404026</td><td>Task not found</td><td>The task for the extract refresh could not be found.</td></tr><tr><td>409</td><td>409004</td><td>invalid parameter value</td><td>The request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between <code>start</code> and <code>end</code> times are not increments of one hour, this error will result.</td></tr></tbody></table>

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

## Create 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

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

#### Request Body

```
<tsRequest>
  <task>
    <flowRun>
      <flow id="dd3cd2e7-2ede-49c6-945f-e7b2a2f25541"/>
    </flowRun>
  </task>
  <schedule frequency="Daily">
    <frequencyDetails start="12:30:00" end="23:30:00">
      <intervals>
        <interval hours="4"/>
        <interval weekDay="Monday"/>
        <interval weekDay="Wednesday"/>
      </intervals>
    </frequencyDetails>
  </schedule>
</tsRequest>
```

```
{
  "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

<table class="api-parameters-table"><colgroup><col width="30%"> <col width="70%"></colgroup><tbody><tr><td><code>flow.id</code></td><td>(Required)The LUID of the flow the task is being scheduled for.</td></tr></tbody></table>

<table class="api-parameters-table">
                                    <colgroup>
                                        <col width="30%">
                                        <col width="70%">
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>schedule frequency</code>
                                            </td>
                                            <td><i>(Required to create subscription) enumeration:</i> The scheduled frequency for triggering the task. Valid values include:
							<ul><li>Hourly</li><li>Daily</li><li>Weekly</li><li>Monthly</li></ul></td>
                                        </tr>
                                        <tr>
                                            <td><code>frequencyDetails start</code>
                                            </td>
                                            <td><i>(Required to create subscription) time:</i> If the schedule frequency is <code>Daily, Weekly, or Monthly</code>, then <code>start</code>
						is the time of day on which scheduled jobs should run. If the frequency is <code>Hourly</code>, then <code>start</code> is the beginning of the
								time range during which jobs should be started. The valid format is <code>HH:MM:SS</code>.
					</td>
                                        </tr>
                                        <tr>
                                            <td><code>frequencyDetails end</code>
                                            </td>
                                            <td>
                                                <p><i>(Required to create subscription) time:</i> If the schedule frequency is <code>Hourly</code>, or <code>Daily</code> with an interval of
							<code>hours</code> less than <code>24</code>, then <code>end</code> is the time of day on which scheduled jobs should stop being run.
							The valid format is <code>HH:MM:SS</code>. 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 <code>frequencyDetail</code> would be:
</p><pre><code>&lt;frequencyDetail start="20:45:00" end="21:45:00"&gt;
  . . .
&lt;/frequencyDetail&gt;</code></pre>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>interval <i>{interval type}</i></code>
                                            </td>
                                            <td><i>(Required to create subscription) string:</i> Defines when and how often a scheduled job executes within the time parameters set in the <code>start</code> and <code>end</code>
							 values of the <code>frequencyDetails</code> of the <code>schedule</code>. The type and valid values for
							an interval expression depend on the declared <code>frequency</code> of the <code>schedule</code> as follows:<br><br><table><colgroup><col width="20%"><col width="80%"></colgroup><tbody><tr align="left"><th><b>Frequency</b></th><th><b>Valid interval values</b></th></tr><tr><td><code>Hourly</code></td><td> The value of an interval for an <code>Hourly</code> schedule can be only one of either:
							<ul><li><code>hours="1"</code>
									The number of hours between jobs. <code>1</code> is the only valid value.</li><li><code>minutes="60"</code>
									 The number of minutes between jobs. <code>60</code> is the only valid value.</li><li><code>weekDay="<i>weekday"</i></code> The weekday(s) the job will be run on.
									Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
								 	Thursday, Friday, and Saturday</code>. <br><br>
									For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
									use an interval like:
											<pre><code>&lt;intervals&gt;
  &lt;interval hours="1"/&gt;
  &lt;interval weekDay="Sunday"/&gt;
  &lt;interval weekDay="Wednesday"/&gt;
&lt;intervals&gt;</code></pre></li></ul><br></td></tr><tr><td><code>Daily</code></td><td>
									The value of <code>Daily</code> can have multiple <code>weekday</code> elements, but only one <code>hours</code> declaration.
										An <code>hours</code> interval is required.
									<ul><li><code>hours="<i>interval</i>"</code> The interval between execution of jobs on the weekday(s) specified.
											Valid values are <code>2, 4, 6, 8, 12, or 24</code>. Note that if the <code><i>interval</i></code> value of a daily schedule
												is less than <code>24</code>, a <code>frequencyDetail end</code> time must be supplied. </li><li><code>weekDay="<i>weekday</i>"</code> The weekday(s) the job will be run on.
											Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
										 	Thursday, Friday, or Saturday</code>. <br><br>
											For example, to schedule to run a job every 4 hours	on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
											use an interval like:<br><pre><code>&lt;intervals&gt;
  &lt;interval hours="4"/&gt;
  &lt;interval weekDay="Sunday"/&gt;
  &lt;interval weekDay="Wednesday"/&gt;
&lt;intervals&gt;</code></pre></li></ul></td></tr><tr><td><code>Weekly</code></td><td><code>weekDay="<i>weekday</i>"</code>
												The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are:
											<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.</code></td></tr><tr><td><code>Monthly</code></td><td> <p>The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:</p><p>Specify the day(s) using the number of the day in the month;
											</p><ul><li><code>monthDay="<i>day</i>"</code> The number of the day of the month. Valid values are the whole numbers
												<code>1</code> to <code>31</code> or <code>LastDay</code>. If you specify <code>monthDay</code> by day number
												then you can use multiple <code>interval</code> instances to choose for the job to
												run on multiple days in the month. If you use <code>LastDay</code> then only one instance of <code>interval</code>
												can be used in the schedule to specify the last day of the month.</li></ul><p></p><p>Specify the day by describing which occurrence of a weekday within the month.
										</p><ul><li><code>monthDay="<i>occurrence_of_weekday</i>" Weekday="<i>weekday</i>"</code>
													The occurrence of the specified weekday within the month when a job should be run.
													Valid values for <code><i>occurrencee_of_weekday</i></code> are	<code>First, Second, Third, Fourth, Fifth, or LastDay</code>.
													Valid values for <code><i>weekday</i></code> are
													<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday</code>.
													If the value is <code>lastDay</code> then the job will run on
													the last occurrence of the specified weekday in the month.<br><br>
													For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:<br><pre><code>&lt;interval monthDay="Third" weekDay="Thursday"/&gt;</code></pre></li></ul><p></p></td></tr></tbody></table></td>
                                        </tr>
                                    </tbody>
                                </table>

#### cURL Request Example

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

#### Response Code

200

#### Response Body

```
<tsResponse>
  <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"/>
              </parameter>
            </parameters>
        </flow>
        <flowRunSpec flowId="dd3cd2e7-2ede-49c6-945f-e7b2a2f25541">
        <flowOutputSteps>
          <flowOutputStep id="485c8b5f-5647-466c-b549-e38410b7c7c8"
            name="Output"/>
        </flowOutputSteps>
        <flowParameterSpecs/>
      </flowRunSpec>
    </flowRun>
  </task>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr></tbody></table>

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

## Create 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

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

#### Request Body

Tableau Cloud and Tableau Server using API 3.23 or later

```
<tsRequest>
  <connectedApplication
		name="name"
		enabled="enabled"
		domainSafelist="domainSafelist"
		unrestrictedEmbedding="unrestrictedEmbedding">
				<projectIds>
					<projectId>project_id</projectId>
					<projectId>project_id</projectId>
					<projectId>project_id</projectId>
				</projectIds>
  </connectedApplication>
</tsRequest>
```

Tableau Server (or Tableau Cloud) using API 3.21 or earlier

```
<tsRequest>
  <connectedApplication
		name="name"
		enabled="enabled"
		projectId="project_id"
		domainSafelist="domainSafelist"
	unrestrictedEmbedding="unrestrictedEmbedding" />
</tsRequest>
```

#### Attribute Values

Any combination of attributes inside the <connectedApplication> element is valid, however name is required.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">name</span>
                                    </td>
                                    <td>
                        Name of the connected app.
                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">enabled</span>
                                    </td>
                                    <td>
                        (Optional) Controls whether the connected app is enabled or not. Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". If the state is not specified, the connected app is set to "false" and not enabled by default. </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">project_id</span>
                                    </td>
                                    <td>
                                        <p>(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 <a href="#query_projects">Query Projects</a>. You can specify one project, multiple projects, all projects on a site.</p>
                                        <ul>
                                            <li>
                                                <p><b>Single project:</b> </p>
                                                <ul>
                                                    <li>
                                                        <p>For Tableau Cloud (using API&nbsp;3.22 or later) and Tableau Server (using&nbsp;API&nbsp;3.23 or later), to scope the connected app's access to one project, the recommended workflow is to specify the <span class="api-command-ref">projectIds</span> and <span class="api-command-ref">projectId</span> attributes and projectId value. </p>
                                                    </li>
                                                    <li>
                                                        <p>For Tableau Server (or Tableau Cloud) using&nbsp;API 3.21 or earlier, specify the <span class="api-command-ref">projectId</span> parameter and its value.</p>
                                                    </li>
                                                </ul>
                                            </li>
                                            <li>
                                                <p><b>Multiple projects:</b> Beginning with API&nbsp;3.22 (February 2024) for Tableau Cloud and&nbsp;API 3.23 for Tableau Server, you can specify the <span class="api-command-ref">projectIds</span> attribute and projectId values  to scope the connected app's access to multiple projects.</p>
                                            </li>
                                            <li>
                                                <p><b>All projects:</b> </p>
                                                <ul>
                                                    <li>
                                                        <p>For Tableau Cloud (using API&nbsp;3.22 or later) and Tableau Server (using API&nbsp;3.23 or later), to scope the connected app's access to all projects on a site, omit the <code>projectIds</code> attribute from the request. </p>
                                                    </li>
                                                    <li>
                                                        <p>For Tableau Server (or Tableau Cloud) using&nbsp;API 3.21 or earlier, to scope the connected app's access to all projects on a site, omit the <code>projectId</code> attribute from the request. </p>
                                                    </li>
                                                </ul>
                                                <p><b>Note:</b> Specifying "all projects" in an update request for a connected app is handled differently. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#project_update" target="_blank">update project</a>.</p>
                                            </li>
                                        </ul>
                                        <p><b>Note:</b>&nbsp;The stand-alone <span class="uicontrol">projectId</span> attribute will be retired in a future release so we recommend using <span class="api-command-ref">projectIds</span> attribute instead.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">domainSafelist</span>
                                    </td>
                                    <td>
                                        <p>(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 <a href="https://help.tableau.com/current/server-linux/en-us/connected_apps.htm#domain_rules" target="_blank">Domain allowlist rules</a> in the Tableau Server Help or <a href="https://help.tableau.com/current/online/en-us/connected_apps.htm#domain_rules" target="_blank">Domain allowlist rules</a> in the Tableau Cloud Help. </p>
                                        <p><b>Important:</b> We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow.</p>
                                        <p>For example: <code>https://tableau.com https://myco.com:552 marketing.example.com</code></p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">unrestrictedEmbedding</span>
                                    </td>
                                    <td>(Optional, embedding workflows only) Controls whether the connected app can be hosted on all domains. If "<span class="uicontrol">true</span>" value is specified, the connected app can be hosted on all domains. If  "<span class="uicontrol">false</span>" value is specified, the connected app can only be hosted on the domains specified in the <code>&lt;domainSafelist&gt;</code> attribute.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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:**

```
<tsResponse>
  <connectedApplication>
	<name>ConnectedApp_MyCo</name>
	<enabled>true</enabled>
	<clientId>ac95d175-c844-4779-9d58-415e01fe7dab</clientId>
	<projectIds>
		<projectId>1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e</projectId>
		<projectId>1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e</projectId>
	</projectIds>
	<createdAt>2021-08-10T18:46:30Z</createdAt>
	<unrestrictedEmbedding>true</unrestrictedEmbedding>
  </connectedApplication>
</tsResponse>
```

**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/current/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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400109</td><td>Bad request</td><td>The request body can't be empty.</td></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404041</td><td>Connected app not found</td><td>The requested connected app could not be found.</td></tr></tbody></table>

## 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

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

#### 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 `<value>`.

**Example response:**

```
<tsResponse>
  <connectedApplicationSecret>
	<value>TO7/wkW+45U001IBtyNbtyIMYQ/GBM0XlRXqsgYqPlY=</value>
	<id>7ecc5c7c-d923-4ffd-917b-cab1bd89f03b</id>
	<createdAt>2021-08-10T18:48:40Z</createdAt>
  </connectedApplicationSecret>
</tsResponse>
```

#### Version

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

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

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2" style="width: 87px;">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400143</td>
                                    <td>Generic connected app error</td>
                                    <td>The connected app could not be deleted for some other reason than those specified in this table.</td>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400144</td>
                                    <td>Secret limit exceeded</td>
                                    <td>
                                        <p>The connected app has already  reached its two secret maximum.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403000</td>
                                    <td>Admin permissions required</td>
                                    <td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td>
                                </tr>
                                <tr>
                                    <td>404  </td>
                                    <td>404000</td>
                                    <td>Resource not found </td>
                                    <td>The  site ID in the URI doesn't correspond to an existing  site.  </td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404041</td>
                                    <td>Connected app not found</td>
                                    <td>The requested connected app could not be found.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404042</td>
                                    <td>Secret not found</td>
                                    <td>The requested secret for the connected app could not be found.</td>
                                </tr>
                            </tbody>
                        </table>

## 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

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

#### Request Body

Copy

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

Copy

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

#### Request Attributes

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

#### cURL Request Example

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

#### Response Code

200

#### Response Body

Copy

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

Copy

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

#### Errors

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

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

## Create 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID of the site.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The LUID of the workbook.</td></tr><tr><td><span class="api-placeholder">encryption-flag</span></td><td>If <code>true</code>, then Tableau will attempt to encrypt the created extracts. If <code>false</code>, or no <code>encrypt</code> 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 <code>encrypt</code> equals <code>true</code> and encryption is disabled in the site or workbook.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <datasources includeAll="extract-all-datasources-flag">
	<datasource id="datasource-id" />
  </datasources>
</tsRequest>
```

#### Request Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">datasource-id</span></td><td>LUID of the embedded data source to be extracted.</td></tr><tr><td><span class="api-placeholder">extract-all-datasources-flag</span></td><td>Boolean. If <code>true</code>, then all data sources in the workbook will have an extract created for them. If <code>false</code>, then a data source must be supplied in the request.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <job id="job-id" mode="Asynchronous" type="CreateExtract" createdAt="date-time">
    <extractCreationJob>
      <workbook id="workbook-id" name="workbook-name" />
	</extractCreationJob>
  </job>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409070</td><td>Invalid request method</td><td>The data source cannot be extracted because it is file based or in another unsupported form.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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`

```
<tsResponse>
  <datasources includeAll="false" />
    <datasource id="6b4cf715-c90b-49d6-be85-920a47bae433" />
  </datasources>
</tsRequest>
```

**Response body:**

```
<tsResponse>
  <job id="df410925-feae-481d-bf84-2f37bdf7ce69" mode="Asynchronous" type="CreateExtract" createdAt="2019-11-05T00:06:57Z">
	<extractCreationJob>
	  <workbook id="e35ec79d-9526-44f1-9a67-7a8b63d265df" name="MY_WORKBOOK_NAME"/>
	  <jobLuid>df410925-feae-481d-bf84-2f37bdf7ce69</jobLuid>
    </extractCreationJob>
  </job>
</tsResponse>
```

## 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 <job> 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site to create the group in.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">asJob-value</span>
                                            </td>
                                            <td>
                                        A Boolean value that is used if you are importing from Active Directory. If you set this to <span class="api-command-ref">false</span> (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.
                                        <p>
                                        If you set this to <span class="api-command-ref">true</span>, the process runs asynchronously. In that case,
                                        Tableau Server starts a job to perform the import and returns the job ID in the <span class="api-command-ref">Location</span> header.
                                        You can check the status of the import job by calling <a href="#query_job"><span class="api-command-ref">Query Job</span></a>.
                                    </p><p class="note"><strong>Note</strong>: This parameter has no effect if the server is configured to use local authentication.</p><p>This attribute is available for Tableau Server only.</p></td>
                                        </tr>
                                    </tbody>
                                </table>

#### Request Body

**Creating a local group**

```
<tsRequest>
  <group name="new-tableau-server-group-name"
   minimumSiteRole="minimum-site-role"
   externalUserEnabled="on-demand-access"/>
</tsRequest>
```

**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)

```
<tsRequest>
  <group name="active-directory-group-name" >
    <import source="ActiveDirectory"
      domainName="active-directory-domain-name"
      grantLicenseMode="license-mode"
      siteRole="minimum-site-role"/>
  </group>
</tsRequest>
```

**Notes:**

- When the request is to create a group with grantLicenseMode, a siteRole value should also be supplied.

- When the request body contains an <import> 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 <import> element must be set to `ActiveDirectory`. If Tableau Server or Tableau Cloud site is configured to use local authentication, including an <import> 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col style="width:32%;">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">new-tableau-server-group-name</span>
                                            </td>
                                            <td>
                                    The name for the new group.
                                </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">active-directory-group-name</span>
                                            </td>
                                            <td>
                                                <p>The name of the Active Directory group to import.</p>
                                                <p>This attribute is available for Tableau Server only.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">active-directory-domain-name</span>
                                            </td>
                                            <td>
                                                <p>The domain of the Active Directory group to import.</p>
                                                <p>This attribute is available for Tableau Server only.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">minimum-site-role</span>
                                            </td>
                                            <td>
                                                <p>Required if an <span class="api-placeholder">import</span> element or <span class="api-placeholder">grantLicenseMode</span>
									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.
								</p>
                                                <p>
									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.
								</p>
                                                <p>
									Site roles that can be assigned, listed from the one enabling the least capabilities to
									the most, are as follows.</p>
                                                <ol>
                                                    <li value="1"><span class="api-command-ref">Unlicensed</span>
                                                        <br>
                                                    </li>
                                                    <li value="2"><span class="api-command-ref">Viewer</span>
                                                        <br>
                                                    </li>
                                                    <li value="3"><span class="api-command-ref">Explorer</span>
                                                        <br>
                                                    </li>
                                                    <li value="4"><span class="api-command-ref">ExplorerCanPublish</span>
                                                        <br>
                                                    </li>
                                                    <li value="5"><span class="api-command-ref">Creator</span>
                                                        <br>
                                                    </li>
                                                    <li value="6"><span class="api-command-ref">SiteAdministratorExplorer</span>
                                                    </li>
                                                    <li value="7"><span class="api-command-ref">SiteAdministratorCreator</span>
                                                        <br>
                                                    </li>
                                                </ol>
                                                <p class="note"><strong>Note</strong>: You cannot use the REST API to set a user to be a Tableau Server administrator
								(<span class="api-command-ref">ServerAdministrator</span> site role).</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">license-mode</span>
                                            </td>
                                            <td>
                                                <p>
									The mode for automatically applying licenses for group members. When the mode is
									<span class="api-command-ref">onLogin</span>, a license is granted for each group member when they log in to a site.
								</p>
                                                <p>
									For local groups, the mode can be either <span class="api-command-ref">onLogin</span> or unset. If the attribute is omitted,
									the default mode is unset, which results in no licenses being granted automatically to group members.
								</p>
                                                <p>
									For groups that import an Active Directory domain, the mode can be either <span class="api-command-ref">onSync</span>
									or <span class="api-command-ref">onLogin</span>.
								</p>
                                                <p>
									The minimum role granted to users through <span class="api-placeholder">grantLicenseMode</span> is specified in the
									<span class="api-placeholder">siteRole</span> attribute. If that role has less permissions than an existing role
									assigned to the user, then the user's permissions remain unchanged.
								</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><a name="oda"></a><span class="api-placeholder">on-demand-access</span>
                                            </td>
                                            <td>
                                                <p>Optional. A boolean value that is used to enable on-demand access for embedded Tableau content when the Tableau Cloud site is licensed with <a href="https://help.tableau.com/current/online/en-us/license_product_keys.htm#embedded-analytics" target="_blank">Embedded Analytics</a> usage-based model or <a href="https://help.tableau.com/current/online/en-us/license_product_keys.htm#capacity" target="_blank">capacity-based model</a> with Cloud+ or Tableau+ edition. </p>
                                                <p>Set to <span class="api-command-ref">true</span> to enable the capability for the group or set to <span class="api-command-ref">false</span> to disable the capability for the group.  For more information about on-demand access, see <a href="https://help.tableau.com/current/api/embedding_api/en-us/docs/embedding_api_user_attributes.html#on-demand-access-for-users" target="_blank">On-demand access for users</a> in the Tableau Embedding API v3 Help.</p>
                                                <p>This attribute is available for Tableau Cloud only starting from API version 3.21 (October 2023).
</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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:**

```
<tsResponse>
  <group id="new-group-id"
	name="group-name"
	minimumSiteRole="minimum-site-role"
	externalUserEnabled="true" />
	<import domainName="local" siteRole="default-site-role" grantLicenseMode="license-mode" />
  </group>
</tsResponse>
```

**Creating a group and importing from Active Directory immediately (Tableau Server only):**

```
<tsResponse>
  <group id="new-group-id"
    name="group-name">
	  <import domainName="active-directory-domain-name”
        siteRole="default-site-role"
	 grantLicenseMode="onLogin" />
  </group>
</tsResponse>
```

**Importing as a background process:**

```
<tsResponse>
  <job id="job-id" mode="Asynchronous" type="GroupImport"
    progress="0" createdAt="time-job-created" />
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400013</td>
                                            <td>Invalid site role</td>
                                            <td>
                                                <p>The value of the <span class="api-command-ref">minimumSiteRole</span> or <span class="api-command-ref">siteRole</span> attribute must be
									<span class="api-command-ref">Creator</span>,
									<span class="api-command-ref">Explorer</span>,
									<span class="api-command-ref">ExplorerCanPublish</span>,
									<span class="api-command-ref">SiteAdministratorCreator</span>,
									<span class="api-command-ref">SiteAdministratorExplorer</span>,
									<span class="api-command-ref">Unlicensed</span>,
									or <span class="api-command-ref">Viewer</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400019</td>
                                            <td>Malformed import element</td>
                                            <td>
                                When the <span class="api-command-ref">&lt;import&gt;</span> element is present in the request body, the following attributes must be specified:
                                <span class="api-command-ref">source</span> with the value <span class="api-command-ref">ActiveDirectory</span>;
								<span class="api-command-ref">domainName</span>;
								and  <span class="api-command-ref">siteRole</span>
								If any of these is missing, the element is malformed.
                             </td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400984</td>
                                            <td>Not licensed</td>
                                            <td>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+. </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403011</td>
                                            <td>Active Directory is not configured</td>
                                            <td>The <span class="api-command-ref">&lt;import&gt;</span> element is present, but Tableau Server is configured for local authentication.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404016</td>
                                            <td>Domain not found</td>
                                            <td>
                                    The request body includes an <span class="api-command-ref">&lt;import&gt;</span> element, but the specified domain name doesn't exist
                                    in Active Directory.
                                </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404017</td>
                                            <td>Active Directory group not found</td>
                                            <td>
                                    The request body includes an <span class="api-command-ref">&lt;import&gt;</span> element, but no group exists in
                                    Active Directory that matches the specified group name.
                                </td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409009</td>
                                            <td>Group name conflict</td>
                                            <td>The group name in the request already belongs to the specified site.  For the purpose of uniqueness checks, group names are case-insensitive.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### Example: 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:**

```
<tsRequest>
  <group name="marketing-group" externalUserEnabled="true" />
</tsRequest>
```

**Response header:**

`Location: /api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d5-e6f7-a8b9-c0d1-e2f3a4b5c6d`

**Response body:**

```
<tsResponse version-and-namespace-settings>
  <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" name="marketing-group" externalUserEnabled="true"/>
</tsResponse>
```

#### 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:**

```
<tsRequest>
  <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" name="marketing-group">
    <import domainName="MY-DOMAIN" siteRole="Viewer" grantLicenseMode="onLogin" />
  </group>
</tsRequest>
```

**Response header:**

`Location: /api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/1a2b3c4d5-e6f7-a8b9-c0d1-e2f3a4b5c6d`

**Response body:**

```
<tsResponse version-and-namespace-settings>
  <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" name="marketing-group">
	  <import domainName="MY-DOMAIN" siteRole="Viewer" grantLicenseMode="onLogin" />
  </group>
</tsResponse>
```

## 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

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

#### Request Body

Copy

```
<tsRequest>  <groupSet name="newGroupSet" /></tsRequest
```

Copy

```
{  "groupSet": {    "@name": "marketing-group"  }}
```

#### Request Attributes

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><code>name</code>
                                        </td>
                                        <td>
                                            <p>
								(Required) Name of the new group set.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### 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 "<tsRequest> <groupSet name='marketing-group' /> </tsRequest>"`

#### Response Code

201, for creating a group set.

#### Response Body

Copy

```
<tsRequest>  <groupSet id="4123e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6234"     name="marketing-group"     groupCount="0" /></tsRequest>
```

Copy

```
{  "groupSet": {    "id": "4123e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6234",    "name": "marketing-group",    "groupCount": "0"  }}
```

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400013</td>
                                            <td>Invalid site role</td>
                                            <td>
                                                <p>The value of the <span class="api-command-ref">minimumSiteRole</span> or <span class="api-command-ref">siteRole</span> attribute must be
<span class="api-command-ref">SiteAdministratorCreator</span> or
									<span class="api-command-ref">SiteAdministratorExplorer</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>The request type wasn’t <span class="api-command-ref">POST</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409121</td>
                                            <td>Group set name conflict</td>
                                            <td>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.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

## Create 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/current/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

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

#### Request Body

```
<tsRequest>
  <labelCategory name="label-category-name"
    description="label-category-description" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">label-category-name</span>
                                    </td>
                                    <td>
                                        <p>The label category name.</p>
                                        <p>Required. Must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-category-description</span>
                                    </td>
                                    <td>
                                        <p>The label category description.</p>
                                        <p>Required. Must be 1-500 characters in length.</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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

```
<tsResponse>
  <labelCategory name="label-category-name"
    description="label-category-description"/>
</tsResponse>
```

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400189</td>
                                    <td>Generic create label categories error</td>
                                    <td>An unknown error occurred.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403004</td>
                                    <td>Operation on resource unauthorized</td>
                                    <td>You must be an administrator to create, update, or delete label values.</td>
                                </tr>
                                <tr>
                                    <td>409</td>
                                    <td>409004</td>
                                    <td>Invalid parameter</td>
                                    <td>
                                        <ul>
                                            <li>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.)</li>
                                            <li>The category name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label categories names.</li>
                                            <li>The category description must be 1-500 characters in length.
</li>
                                        </ul>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

## 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

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

#### Request Body

Copy

```
<tsRequest>  <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" /></tsRequest>
```

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

<table class="api-parameters-table" style="margin-left: 0;margin-right: auto;">
                                <colgroup><col class="api-parameters-table-col-1">
                                <col>
                                </colgroup><tbody>
                                    <tr>
                                        <td><code>idpConfigurationName</code>
                                        </td>
                                        <td>
                                            <p>(Required) The name of the configuration. </p>
                                            <p>Starting in API&nbsp;3.24, you can create and enable multiple authentication configurations. For more information, see <a href="https://help.tableau.com/current/online/en-us/security_auth.htm#multiple_idp" target="_blank">Authentication</a> in the Tableau Cloud Help.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>enabled</code>
                                        </td>
                                        <td>(Required) Controls whether the configuration is enabled or not. Value can be "<span class="api-command-ref">true</span>" or "<span class="api-command-ref">false</span>". For example "true".</td>
                                    </tr>
                                    <tr>
                                        <td><code>clientId</code>
                                        </td>
                                        <td>(Required) The client ID&nbsp;from your IdP. For example, "0oa111usf1gpUkVUt0h1".</td>
                                    </tr>
                                    <tr>
                                        <td><code>clientSecret</code>
                                        </td>
                                        <td>(Required) The client secret from your IdP.</td>
                                    </tr>
                                    <tr>
                                        <td><code>authorizationEndpoint</code>
                                        </td>
                                        <td>(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 (<code>authorization_endpoint</code>) from the details that are returned. For example, "https://myidp.com/oauth2/v1/authorize".</td>
                                    </tr>
                                    <tr>
                                        <td><code>tokenEndpoint</code>
                                        </td>
                                        <td>(Required) Use the token endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the token endpoint (<code>token_endpoint</code>) from the details that are returned. For example, "https://myidp.com/oauth2/v1/token". </td>
                                    </tr>
                                    <tr>
                                        <td><code>userinfoEndpoint</code>
                                        </td>
                                        <td>(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 (<code>userinfo_endpoint</code>) from the details that are returned. For example, "https://myidp.com/oauth2/v1/userinfo".</td>
                                    </tr>
                                    <tr>
                                        <td><code>jwksUri</code>
                                        </td>
                                        <td>(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 (<code>jwks_uri</code>) from the details that are returned. For example, "https://myidp.com/oauth2/v1/keys".</td>
                                    </tr>
                                    <tr>
                                        <td><code>endSessionEndpoint</code>
                                        </td>
                                        <td>(Optional) If single logout (SLO) is enabled for the site, which is done through Tableau Cloud site UI, you can specify the configuration URL&nbsp;or the end session endpoint from your IdP. For example, "https://myidp.com/oauth2/v1/logout".</td>
                                    </tr>
                                    <tr>
                                        <td><code>allowEmbeddedAuthentication</code>
                                        </td>
                                        <td>(Optional) Controls how users authenticate when accessing embedded views. Value can be "<span class="api-command-ref">true</span>"&nbsp;or "<span class="api-command-ref">false</span>". 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.</td>
                                    </tr>
                                    <tr>
                                        <td><code>customScope</code>
                                        </td>
                                        <td>(Optional) Specifies a custom scope user-related value that you can use to query the IdP. For example, "openid, email, profile".</td>
                                    </tr>
                                    <tr>
                                        <td><code>prompt</code>
                                        </td>
                                        <td>(Optional) Specifies whether the user is prompted for re-authentication and consent. For example, "login, consent".</td>
                                    </tr>
                                    <tr>
                                        <td><code>clientAuthentication</code>
                                        </td>
                                        <td>(Optional) Token endpoint authentication method. Value can be "<span class="api-command-ref">client_secret_basic</span>" or "<span class="api-command-ref">client_secret_post</span>". Default value is "client_secret_basic". </td>
                                    </tr>
                                    <tr>
                                        <td><code>essentialAcrValues</code>
                                        </td>
                                        <td>(Optional) List of essential Authentication Context Reference Class values used for authentication. For example, "phr".</td>
                                    </tr>
                                    <tr>
                                        <td><code>voluntaryAcrValues</code>
                                        </td>
                                        <td>(Optional) List of voluntary Authentication Context Reference Class values used for authentication.</td>
                                    </tr>
                                    <tr>
                                        <td><code>emailMapping</code>
                                        </td>
                                        <td>(Optional) Claim for retrieving email from the OIDC token. Default value is "email".</td>
                                    </tr>
                                    <tr>
                                        <td><code>firstNameMapping</code>
                                        </td>
                                        <td>(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 <code>useFullName</code> attribute is set to "false".</td>
                                    </tr>
                                    <tr>
                                        <td><code>lastNameMapping</code>
                                        </td>
                                        <td>(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 <code>useFullName</code> attribute is set to "false".</td>
                                    </tr>
                                    <tr>
                                        <td><code>fullNameMapping</code>
                                        </td>
                                        <td>(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 <code>useFullName</code> attribute is set to "true".</td>
                                    </tr>
                                    <tr>
                                        <td><code>useFullName</code>
                                        </td>
                                        <td>(Optional) Controls what is used as the display name. Value can be "<span class="api-command-ref">true</span>" or "<span class="api-command-ref">false</span>". Default value is "false", which uses first name <code>(firstNameMapping</code> attribute) and last name (<code>lastNameMapping</code> attribute)&nbsp;as the user display name. When set to "true", full name (<code>fullNameMapping</code> attribute) is used as the user display name.</td>
                                    </tr>
                                </tbody>
                            </table>

#### 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

```
<tsRequest>  <siteOIDCConfiguration    idpConfigurationName="idpConfigurationName"    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" /></tsRequest>
```

#### Response Code

200

#### Response Body

Copy

```
<tsResponse>  <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="&lt;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" /></tsResponse>
```

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":"&lt;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 `&lt;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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr></tbody></table>

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

## Create 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/current/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

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

#### Request Body

```
<tsRequest>
   <labelValue name="label-value-name"
     category="label-value-category"
     description="label-value-description" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">label-value-name</span>
                                    </td>
                                    <td>
                                        <p>The label value name.</p>
                                        <p>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.</p>
                                        <p>Required. Must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, must be 1-24 characters long.)</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-value-category</span>
                                    </td>
                                    <td>
                                        <p>The label value category.</p>
                                        <p>Required. If you're updating an existing label value, this must match the existing category for that label value.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-value-description</span>
                                    </td>
                                    <td>
                                        <p>The label value description.</p>
                                        <p>Required, but does not need to be different than the existing description. Must be 1-500 characters in length.</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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

```
<tsResponse>
  <labelValue name="label-value-name"
    category="label-value-category"
    description="label-value-description"
    internal="true-or-false"
    elevatedDefault="true-or-false"
    builtIn="true-or-false">
    <site id="site-luid"/>
  </labelValue>
</tsResponse>
```

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>401 </td>
                                    <td>4000173</td>
                                    <td>Generic create label values error</td>
                                    <td>An unknown error occurred.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403004</td>
                                    <td>Operation on resource unauthorized</td>
                                    <td>You must be a site or server administrator to create or update label values.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403157</td>
                                    <td>Bad request</td>
                                    <td>You may see this error if you try to create or update a label in the <span class="uicontrol">certification</span> category.</td>
                                </tr>
                                <tr>
                                    <td>409</td>
                                    <td>409004</td>
                                    <td>Invalid parameter</td>
                                    <td>
                                        <ul>
                                            <li>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.)</li>
                                            <li>The name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label value names.</li>
                                            <li>The category must match an existing category.</li>
                                            <li>You can't change the category on an existing label value.</li>
                                            <li>The description can't be empty or over 500 characters.

</li>
                                        </ul>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site to create the project in.</td></tr><tr><td><span class="api-placeholder">publish-value</span></td><td>(Optional) A Boolean value that specifies whether to publish the sample workbooks provided by Tableau to the project. When the <span class="api-placeholder">publish-value</span> is not specified in the request, or the <code>publishSamples</code> parameter is missing, no samples will be published. To publish the sample workbooks, set <code>publishSamples</code> parameter to <code class="api-command-ref">true</code>. This option is equivalent to the <span class="api-command-ref">tabcmd</span> command-line utility option, <code>publishsamples</code>. For more information, see <a href="https://help.tableau.com/current/server/en-us/tabcmd_cmd.htm" target="_blank">tabcmd</a>.</td></tr></tbody></table>

#### Request Body

Copy

```
<tsRequest>  <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"/>  </project></tsRequest>
```

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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col style="width:32%;">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>project name</code>
                                            </td>
                                            <td>(Required) The new name for the project.</td>
                                        </tr>
                                        <tr>
                                            <td><code>project description</code>
                                            </td>
                                            <td>(Optional) The new description for the project.</td>
                                        </tr>
                                        <tr>
                                            <td><code>project parentProjectId</code>
                                            </td>
                                            <td>
                                                <p>(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.</p>
                                                <p>To create a project as a stand alone or at the top of a project hierarchy, omit the <b>parentProjectId</b> attribute.</p>
                                                <p>For information about how permissions are evaluated in project hierarchies, see
								    <a href="https://help.tableau.com/current/server/en-us/permissions_projects.htm">Project Permissions States and Defaults</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>project contentPermissions</code>
                                            </td>
                                            <td>
                                                <p>(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
								<span class="api-command-ref">contentPermission</span> in the response body from a request to create, update, or query a project.</p>
                                                <ul>
                                                    <li><span class="api-command-ref">LockedToProject</span> to lock permissions so that users cannot overwrite
									the default permissions set for the project</li>
                                                    <li><span class="api-command-ref">ManagedByOwner</span> to allow users to manage permissions for content
									that they own</li>
                                                    <li><span class="api-command-ref">LockedToProjectWithoutNested</span> to lock the permissions of a parent
									project, but not those of its child projects.</li>
                                                </ul>
                                                <p>The default is <span class="api-command-ref">ManagedByOwner</span>. For more information, see
									<a href="https://help.tableau.com/current/server/en-us/permissions.htm#lock-content-permissions" target="_blank">Lock Content Permissions</a>.
								</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>owner id</code>
                                            </td>
                                            <td>The LUID of the user that owns the project.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<tsRequest> <project parentProjectId='ab2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5ee0' name='new-name' description='new-description' contentPermissions='ManagedByOwner' /> </tsRequest>"`

#### Response Code

201

#### Response Body

Copy

```
<tsResponse>  <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"/>  </project></tsResponse>
```

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

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400008</td>
                                            <td>Bad request</td>
                                            <td>The request cannot set content permissions to <span class="api-command-ref">LockedToProjectWithoutNested</span> for a REST API version lower than 3.8.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403008</td>
                                            <td>Insufficient storage on site</td>
                                            <td>The samples could not be published because there is not enough storage space remaining on the server to accommodate the samples. </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>
                                                <p>The site ID in the URI doesn't correspond to an existing site.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409006</td>
                                            <td>Project name conflict</td>
                                            <td>
                                    The project name in the request already belongs to the
                                    specified site. For the purpose of uniqueness checks, project names are case-insensitive.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

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

## Create 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

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

#### Request Body

```
<tsRequest>
  <routingRule domain="example.com" isBlocked="false" poolId="ebae40a5-d7e4-4214-b3d5-b0715c627b71">
    <project id="11111111-2222-3333-4444-555555555555" />
    <project id="66666666-7777-8888-9999-000000000000" />
  </routingRule>
</tsRequest>
```

```
{
  "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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">domain</span></td><td>Required. The domain the rule matches, for example <code>example.com</code>. Both root domains and subdomains are supported.</td></tr><tr><td><span class="api-placeholder">isBlocked</span></td><td>Required. <code>true</code> creates a block rule; <code>false</code> creates an allow rule. The request is rejected if this attribute is omitted.</td></tr><tr><td><span class="api-placeholder">poolId</span></td><td>Required for allow rules (<code>isBlocked=false</code>). The UUID of the target Bridge pool. Must be omitted for block rules.</td></tr><tr><td><span class="api-placeholder">project</span></td><td>Optional. One or more project IDs that scope an allow rule to specific projects. Each entry requires an <code>id</code>. Must be omitted for block rules.</td></tr></tbody></table>

#### 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.

```
<tsResponse>
  <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" />
  </routingRule>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>503909</td><td>Validation failed</td><td>Missing <code>routingRule</code>, missing <code>isBlocked</code>, blank or invalid domain, blank or invalid <code>poolId</code>, <code>poolId</code> missing for an allow rule, invalid UUID, or invalid, empty, or not-found projects.</td></tr><tr><td>400</td><td>503910</td><td>Invariant violation</td><td><code>poolId</code> or <code>project</code> supplied for a block rule.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>503923</td><td>Permission denied</td><td>Caller is not a site administrator for the site.</td></tr><tr><td>409</td><td>503911</td><td>Duplicate routing rule</td><td>A routing rule already exists for this domain and project scope.</td></tr><tr><td>409</td><td>503931</td><td>Domain already blocked</td><td>The domain is already blocked by an existing block rule.</td></tr><tr><td>409</td><td>503932</td><td>Domain-only rule exists</td><td>A domain-only (unscoped) allow rule already exists for this domain; at most one is allowed.</td></tr><tr><td>409</td><td>503933</td><td>Blocked domain has allow rules</td><td>The domain being blocked still has allow rules; remove them before blocking the domain.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503916</td><td>Unexpected server error</td><td>An unexpected error occurred while creating the rule.</td></tr></tbody></table>

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

## Create 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

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

#### Request Body

```
<tsRequest>
  <scimConfiguration>
    <name>SCIM Contractors</name>
    <idpConfigurationId>d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658</idpConfigurationId>
  </scimConfiguration>
</tsRequest>
```

```
{
"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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">name</span>
                                        </td>
                                        <td>(Required) Name of the SCIM&nbsp;configuration.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">idpConfigurationId</span>
                                        </td>
                                        <td>
                                            <p>(Required) Authentication configuration to associate with the SCIM&nbsp;configuration.
</p>
                                            <p>Starting in API 3.26, you can have  multiple SCIM&nbsp;configurations. Include the <span class="api-command-ref">idpConfigurationId</span> to identify which SAML&nbsp;authentication configuration to associate with this SCIM&nbsp;configuration. To get the <span class="api-command-ref">idpConfigurationId</span>, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site" class="xref">List Authentication Configurations for Site</a>.</p>
                                            <p>Starting in API&nbsp;3.28, you can associate OIDC or Google authentication with SCIM.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### Response Code

201

#### Response Body

```
<tsResponse>
  <scimConfiguration>
    <id>065693d8-436a-4738-a8f1-375953a2a888</id>
    <idpConfigurationId>95dcdf3b-30eb-42ae-b938-7ffca3e11fdc</idpConfigurationId>
    <isApiTokenActive>false</isApiTokenActive>
    <isOwner>true</isOwner>
    <name>SCIM Contractors</name>
    <createdAt>Tue Apr 01 06:31:47 UTC 2025</createdAt>
  </scimConfiguration>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, contains malformed XML, or the <code>idpConfigurationId</code> is not valid.</td></tr><tr><td>400</td><td>400008</td><td>Bad Request</td><td>The content of the request body is missing the SCIM configuration name, contains unsupported attributes, or the <code>idpConfigurationId</code> is missing.</td></tr><tr><td>400</td><td>400802</td><td>Bad Request</td><td>The maximum number of 20 SCIM configurations for the site has been reached.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header is invalid or has expired.</td></tr></tbody></table>

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

## Create 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

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

#### 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

```
<tsResponse>
  <id>065693d8-436a-4738-a8f1-375953a2a888</id>
  <clientName>SCIM_CLIENT_API_TOKEN:d3b782da-0787-44ca-8585-6fd48dbfc658</clientName>
  <secret>hqh8YEoYQ1enO9t9Z3h1xA==:X_jndRxNXuWKIXIUbvSGEvysnnSK6B7pt62GiWd8Vuw=</secret>
</tsResponse>
```

```
{
  "apiToken": {
    "id": "065693d8-436a-4738-a8f1-375953a2a888",
    "clientName": "SCIM_CLIENT_API_TOKEN:d3b782da-0787-44ca-8585-6fd48dbfc658",
    "secret": "hqh8YEoYQ1enO9t9Z3h1xA==:X_jndRxNXuWKIXIUbvSGEvysnnSK6B7pt62GiWd8Vuw="
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400802</td><td>Bad Request</td><td>The SCIM&nbsp;configuration is already associated with a SCIM&nbsp;token. To generate a new token for the SCIM configuration, first delete the associated SCIM&nbsp;token and try again.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header is invalid or has expired.</td></tr><tr><td>403</td><td>403182</td><td>Forbidden</td><td>A SCIM token can only be generated by the user who created the SCIM&nbsp;configuration.</td></tr><tr><td>404</td><td>404057</td><td>Resource Not Found</td><td>The SCIM&nbsp;configuration ID is not valid.</td></tr></tbody></table>

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

## Create Server Schedule

Creates a new server schedule on Tableau Server.  
_For Tableau Cloud, see [Create Cloud Extract Refresh Task](https://help.tableau.com/current/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/current/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

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

#### Request Body

```
<tsRequest>
  <schedule name="schedule-name"
	priority="schedule-priority"
	type="schedule-type"
	frequency="schedule-frequency"
	executionOrder="schedule-execution-order">
	  <frequencyDetails start="start-time" end="end-time">
	    <intervals>
	      <interval interval-expression />
	    </intervals>
 	  </frequencyDetails>
  </schedule>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">schedule-name</span>
                                            </td>
                                            <td>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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">schedule-priority</span>
                                            </td>
                                            <td>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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">schedule-type</span>
                                            </td>
                                            <td><code>Flow</code> to create a flow schedule, <code>Extract</code> to create an extract refresh schedule,
			      <code>Subscription</code> to create a subscription schedule, or <code>DataAcceleration</code> to create a
				  data acceleration schedule.
								<i>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.</i></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">schedule-execution-order</span>
                                            </td>
                                            <td><code>Parallel</code> to allow jobs associated with this schedule to run at the same time, or                                           <code>Serial</code> to require the jobs to run one after the other.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">schedule-frequency</span>
                                            </td>
                                            <td>
                                                <p>This represents the granularity of the schedule.  </p>
                                                <ul>
                                                    <li>
                                                        <p><code>Hourly</code>. 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. </p>
                                                    </li>
                                                    <li><code>Daily</code>. Jobs can be scheduled to run once per day.</li>
                                                    <li><code>Weekly</code>. Jobs can be scheduled to run one or more times per week.</li>
                                                    <li><code>Monthly</code>. Jobs can be scheduled to run once per month on a specific day.</li>
                                                </ul>
                                                <p>The value you provide for <span class="api-placeholder">schedule-frequency</span> determines whether you must include an <span class="api-placeholder">end-time</span> value, and what                                     is required in the contents of the <span class="api-command-ref">&lt;intervals&gt;</span> element. <br></p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">start-time</span>
                                            </td>
                                            <td>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 <code>HH:MM:SS</code> (for example, <code>18:30:00</code>).                                         This value is required for all schedule frequencies. The entered time will be applied based on the time zone of your server. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">end-time</span>
                                            </td>
                                            <td>If the schedule frequency is <code>Hourly</code>, the time of day on which scheduled jobs should stop being run, in the format <code>HH:MM:SS</code> (for example, <code>23:30:00</code>). 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. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">interval-expression</span>
                                            </td>
                                            <td>A value that specifies the interval between jobs associated with the schedule. The value you specify here depends on the                                         value specified in <span class="api-placeholder">schedule-frequency</span>.                                           <p><strong><code>Hourly</code></strong></p><p>The interval expression is only one of the following:</p><ul><li><code>hours="<span class="api-placeholder">interval</span>"</code> where <span class="api-placeholder">interval</span> is                                                  <code>1</code>,                                                 <code>2</code>,                                                 <code>4</code>,                                                 <code>6</code>,                                                 <code>8</code>, or                                                  <code>12</code>,                                                 representing how many hours between jobs.</li><li><code>minutes="<span class="api-placeholder">interval</span>"</code> where                                                  <span class="api-placeholder">interval</span> is <code>15</code> or <code>30</code>,                                                 representing how many minutes between jobs.</li></ul><p>You can specify an interval in hours or minutes, but not both.</p><p><strong><code>Daily</code></strong></p><p>If the schedule frequency is <code>Daily</code>, no interval is specified. Any information specified                                         in the <span class="api-command-ref">&lt;intervals&gt;</span> element is ignored.</p><p><strong><code>Weekly</code></strong></p><p>The interval expression is <code>weekDay="<span class="api-placeholder">weekday</span>"</code>, where                                                                                          <span class="api-placeholder">weekday</span> is                                                                                           <code>Sunday</code>,                                              <code>Monday</code>,                                              <code>Tuesday</code>,                                              <code>Wednesday</code>,                                              <code>Thursday</code>,                                              <code>Friday</code>, or                                             <code>Saturday</code>.</p><p>You can specify multiple <span class="api-command-ref">&lt;interval&gt;</span> elements to indicate                                         that scheduled jobs should run on multiple days during the week.</p><p><strong><code>Monthly</code></strong></p><p>The interval expression is <code>monthDay="<span class="api-placeholder">day</span>"</code>, where
                                        <span class="api-placeholder">day</span> is
                                        either the day of the month (<code>1</code>, <code>2</code>, etc.) or <code>LastDay</code>.
</p><p class="note"><b>Note:</b> 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. </p></td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <schedule id="schedule-id"
    name="schedule-name"
	state="Active-or-Suspended"
    priority="schedule-priority"
	createdAt="datetime-created"
	updatedAt="datetime-updated"
	type="Extract-or-Subscription-or-Flow"
	frequency="schedule-frequency"
	nextRunAt="datetime-next-run"
	executionOrder="Parallel-or-Serial">
	  <frequencyDetails frequency-expression >
	    <intervals>
	      <interval interval-expression />
	    </intervals>
	  </frequencyDetails>
  </schedule>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400064</td><td>Error creating schedule</td><td>An unspecified error occurred while trying to create the schedule.</td></tr><tr><td>400</td><td>409004</td><td>Bad request</td><td>The content of the request body is missing or incomplete. For hourly, daily, or monthly schedules, this often means that the content of the <span class="api-command-ref">&lt;intervals&gt;</span> element does not match the expected format. The <span class="api-command-ref">&lt;detail&gt;</span> element of the error provides detail about the expected format.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409021</td><td>Schedule name conflict</td><td>The schedule name in the request already belongs to an existing schedule.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/schedules/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-schedule.xml`

  
**Content of create-schedule.xml for an hourly schedule**

```
<tsRequest>
  <schedule name="hourly-schedule-1"
    priority="50"
	type="Extract"
	frequency="Hourly"
	executionOrder="Parallel">
	  <frequencyDetails start="18:30:00" end="23:00:00">
		<intervals>
		  <interval hours="2" />
		</intervals>
	  </frequencyDetails>
  </schedule>
</tsRequest>
```

**Response body**

```
<tsResponse >
  <schedule
    id="4d652179-36bf-47e4-a9dc-e069227c72d0"
    name="hourly-schedule-1"
    state="Active"
    priority="50"
    createdAt="2016-05-07T01:51:19Z"
    updatedAt="2016-05-07T01:51:19Z"
    type="Extract"
    frequency="Hourly"
    nextRunAt="2016-05-07T03:30:00Z"
    executionOrder="Parallel">
      <frequencyDetails start="18:30:00" end="23:00:00">
        <intervals>
           <interval hours="2" />
        </intervals>
      </frequencyDetails>
  </schedule>
</tsResponse>
```

  
**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.**

```
<tsRequest>
  <schedule
    name="daily-schedule-1"
    priority="50"
    type="Subscription"
    frequency="Daily"
    executionOrder="Parallel">
      <frequencyDetails start="02:15:00" />
  </schedule>
</tsRequest>
```

**Response body**

```
<tsResponse>
  <schedule
	id="4d652179-36bf-47e4-a9dc-e069227c72d0"
	name="daily-schedule-1"
	state="Active"
	priority="50"
	createdAt="2016-05-07T01:43:33Z"
	updatedAt="2016-05-07T01:43:33Z"
	type="Subscription"
	frequency="Daily"
	nextRunAt="2016-05-07T09:15:00Z"
	executionOrder="Parallel">
	  <frequencyDetails start="02:15:00" />
  </schedule>
</tsResponse>
```

  
**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`.

```
<tsRequest>
  <schedule name="weekly-schedule-1"
	priority="50"
	type="Subscription"
	frequency="Weekly"
	executionOrder="Serial">
  	  <frequencyDetails start="18:30:00">
	    <intervals>
	      <interval weekDay="Sunday" />
	      <interval weekDay="Wednesday" />
 	    </intervals>
	  </frequencyDetails>
  </schedule>
</tsRequest>
```

**Response body**

```
<tsResponse>
  <schedule id="4d652179-36bf-47e4-a9dc-e069227c72d0"
    name="weekly-schedule-1"
    state="Active"
    priority="50"
    createdAt="2016-05-07T02:01:30Z"
    updatedAt="2016-05-07T02:01:30Z"
    type="Subscription"
    frequency="Weekly"
    nextRunAt="2016-05-09T01:30:00Z"
    executionOrder="Serial">
      <frequencyDetails start="18:30:00">
        <intervals>
          <interval weekDay="Sunday" />
          <interval weekDay="Wednesday" />
        </intervals>
      </frequencyDetails>
  </schedule>
</tsResponse>
```

  
**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`.

```
<tsRequest>
  <schedule name="monthly-schedule-1"
	priority="50"
	type="Subscription"
	frequency="Monthly"
	executionOrder="Parallel">
	  <frequencyDetails start="06:00:00">
	    <intervals>
	      <interval monthDay="15" />
	    </intervals>
	  </frequencyDetails>
  </schedule>
</tsRequest>
```

**Response body**

```
<tsResponse>
  <schedule
	id="4d652179-36bf-47e4-a9dc-e069227c72d0"
	name="monthly-schedule-1"
	state="Active"
	priority="50"
	createdAt="2016-05-07T02:08:25Z"
	updatedAt="2016-05-07T02:08:25Z"
	type="Subscription"
	frequency="Monthly"
	nextRunAt="2016-06-03T13:00:00Z"
	executionOrder="Parallel">
	  <frequencyDetails start="06:00:00">
	    <intervals>
	      <interval monthDay="15" />
	    </intervals>
  	  </frequencyDetails>
  </schedule>
</tsResponse>
```

## 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

```
<tsRequest>
  <site
    name="site-name"
    contentUrl="content-url"
    adminMode="admin-mode"
    storageQuota="limit-in-megabytes"
    disableSubscriptions="disable-subscriptions"
    editingFlowsEnabled="editing-flows-enabled-flag"
    schedulingFlowsEnabled="scheduling-flows-enabled-flag"
    allowSubscriptionAttachments="allow-subcription-attachments-flag"
    guestAccessEnabled="guest-access-enabled-flag"
    cacheWarmupEnabled="cache-warmup-enabled-flag [REMOVED IN API 3.19]"
    commentingEnabled="commenting-enabled-flag"
    revisionHistoryEnabled="enable-revision-history-flag"
    revisionLimit="num-revision-limit"
    subscribeOthersEnabled="subscribe-others-enabled-flag"
    extractEncryptionMode="extractEncryptionMode"
    requestAccessEnabled="request-access-enabled-flag"
    runNowEnabled="run-now-enabled-flag"
    userQuota="all-license-limit-total"
    tierCreatorCapacity="creator-license-limit"
    tierExplorerCapacity="explorer-license-limit"
    tierViewerCapacity="viewer-license-limit"
    dataAlertsEnabled="data-alerts-enabled-flag"
    commentingMentionsEnabled="commenting-mentions-enabled-flag"
    catalogObfuscationEnabled="catalog-obfuscation-enabled-flag"
    flowAutoSaveEnabled="flow-auto-save-enabled-flag"
    runNowEnabled="run-now-enabled-flag"
    metricsContentTypeEnabled="metrics-content-type-enabled-flag"
    notifySiteAdminsOnThrottle="notify-site-admins-on-throttle-flag"
    authoringEnabled="authoring-enabled-flag"
    customSubscriptionEmailEnabled="custom-subscription-email-enabled-flag"
    customSubscriptionEmail="custom-subscription-email"
    customSubscriptionFooterEnabled="custom-subscription-footer-enabled-flag"
    customSubscriptionFooter="custom-subscription-footer"
    askDataMode="ask-data-mode"
    namedSharingEnabled="named-sharing-enabled-flag"
    catalogingEnabled="cataloging-enabled-flag"
    derivedPermissionsEnabled="derived-permissions-enabled-flag"
    userVisibilityMode="user-visibility-mode"
    useDefaultTimeZone="default-time-zone-flag"
    timeZone="time-zone"
    autoSuspendRefreshEnabled="auto-suspend-refresh-enabled-flag"
    autoSuspendRefreshInactivityWindow="auto-suspend-refresh-inactivity-window"
    explainDataEnabled="explainDataEnabled"
    dqwSubscriptionsEnabled="dqw-subscriptions-enabled"
    groupAssertionsEnabled="group-assertions-enabled-flag"
    groupAssertionsSAMLEnabled="group-assertions-saml-enabled-flag"
    groupAssertionsOIDCEnabled="group-assertions-oidc-enabled-flag"
    groupAssertionsConnectedAppsEnabled="group-assertions-connected-apps-enabled-flag"
    groupSetsEnabled="group-sets-enabled-flag"
    recycleBinEnabled="recycle-bin-enabled-flag" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">site-name</span>
                                            </td>
                                            <td>The name of the site.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">content-url</span>
                                            </td>
                                            <td>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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">admin-mode</span>
                                            </td>
                                            <td>
                                                <p>(Optional) Specify <span class="api-command-ref">ContentAndUsers</span> to allow site administrators to use the server
								interface and <code>tabcmd</code> commands to add and remove users. (Specifying this option doesn’t give site administrators
								permissions to manage users using the REST API.) Specify <span class="api-command-ref">ContentOnly</span> to prevent site
								administrators from adding or removing users. (Server administrators can always add or remove users.)</p>
                                                <p class="note"><strong>Note:</strong> You can’t set <span class="api-command-ref">adminMode</span> to 									<span class="api-command-ref">ContentOnly</span> and also set <span class="api-command-ref">userQuota</span>.
								The default value is <span class="api-command-ref">ContentAndUsers</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">storage-quota</span>
                                            </td>
                                            <td>(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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">disable-subscriptions</span>
                                            </td>
                                            <td>
                                                <p>(Optional) Specify <span class="api-command-ref">true</span> to prevent users from being able to subscribe to                                     workbooks on the specified site. The default is <span class="api-command-ref">false</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">editing-flows-enabled-flag</span>
                                            </td>
                                            <td>
                                                <p>(Optional) Specify <span class="api-command-ref">true</span> to enable and <b>false</b> to disable editing flows for a site. For more information on flows, see <a href="https://help.tableau.com/current/prep/en-us/prep_conductor_config_server_overview.htm" target="_blank">Enable and Configure Tableau Prep Conductor</a>.</p>
                                                <p>The default is set to <b>true</b>, which means editing flows is enabled by default. For more information, see <a href="https://help.tableau.com/v0.0/prep/en-us/prep_conductor_configure_server.htm#implication-of-disabling-tableau-prep-conductor">Implication of disabling Tableau Prep Conductor</a>. 										</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">scheduling-flows-enabled-flag</span>
                                            </td>
                                            <td>
                                                <p>(Optional) Specify <span class="api-command-ref">true</span> to enable and <b>false</b> to disable scheduling flows for a site. For more information on flows, see <a href="https://help.tableau.com/current/prep/en-us/prep_conductor_config_server_overview.htm" target="_blank">Enable and Configure Tableau Prep Conductor</a>.</p>
                                                <p>The default is set to <b>true</b> which means scheduling flows is enabled by default. For more information, see <a href="https://help.tableau.com/v0.0/prep/en-us/prep_conductor_configure_server.htm#implication-of-disabling-tableau-prep-conductor">Implication of disabling Tableau Prep Conductor</a>. 										</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">flows-enabled-flag</span>
                                            </td>
                                            <td>
                                                <p>The <span class="api-command-ref">flowsEnabled</span> attribute is deprecated as of API version 3.10. 										</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">allow-subscription-attachments-flag</span>
                                            </td>
                                            <td>
                                                <p>(Optional) If <span class="api-command-ref">true</span>, 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 <span class="api-command-ref">true</span>. If subscription to attachments is disabled in the server settings,
									then making this value <span class="api-command-ref">true</span> will have no effect.
									Default is <span class="api-command-ref">true</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">guest-access-enabled-flag</span>
                                            </td>
                                            <td>
                                                <p>(Optional) Specify <span class="api-command-ref">true</span>  to enable and <b>false</b> to disable the ability for guests, users without specific site access permission, to access the site.
								Default is <span class="api-command-ref">false</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">cache-warmup-enabled-flag</span>
                                            </td>
                                            <td>
                                                <p class="note">This attribute is removed in API 3.19 and later (Tableau Cloud September 2021). For current
									methods to improve Tableau performance see, <a href="https://help.tableau.com/current/server/en-us/data_acceleration.htm" target="_blank" rel="noreferrer">View Acceleration</a>.
								</p>
                                                <p>(Optional) Set this value to <span class="api-command-ref">true</span>  to enable cache warm up to improve workbook load time.  Set the value to <b>false</b> to disable cache warmup.
								Default is <span class="api-command-ref">true</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">commenting-enabled-flag</span>
                                            </td>
                                            <td>
                                                <p>(Optional) Specify <span class="api-command-ref">true</span> to enable and <b>false</b> to disable the ability for user comments on views in the site.
								Default is <span class="api-command-ref">true</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">revision-history-enabled</span>
                                            </td>
                                            <td>
								(Optional) <span class="api-command-ref">true</span> if the site maintains revisions for changes to
								workbooks and data sources; otherwise, <span class="api-command-ref">false</span>. The default is
								<span class="api-command-ref">false</span>.
 							</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">num-revision-limit</span>
                                            </td>
                                            <td> 								(Optional) An integer between 2 and 10000 to indicate a limited number of revisions for content. 								<p>									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.</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">subscribe-others-enabled-flag</span>
                                            </td>
                                            <td>
                                                <p>									(Optional) Specify <span class="api-command-ref">true</span> to enable and <b>false</b> to disable the ability for view owners to subscribe other users to a view.
								Default is <span class="api-command-ref">true</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">extractEncryptionMode</span>
                                            </td>
                                            <td>
                                                <p>(Optional) Specify <b>enforced</b>, <b>enabled</b>, or <b>disabled</b>.

		     	                 Default is <span class="api-command-ref">disabled</span>.
				For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm" class="xref">Extract and Encryption Methods</a>.								</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">requestAccessEnabled</span>
                                            </td>
                                            <td>(Optional) Specify <span class="api-command-ref">true</span> to allow users  send access request emails to content or project owners. Specify <span class="api-command-ref">false</span> if you don’t want users to be able to request access. The default is <span class="api-command-ref">false</span>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">runNowEnabled</span>
                                            </td>
                                            <td>
                                                <p>(Optional) Specify <span class="api-command-ref">true</span> to allow users to run flows, extract refreshes, and schedules manually. Specify <span class="api-command-ref">false</span> if you don’t want users to be able to run flows, extract refreshes, and subscriptions manually. The default is <span class="api-command-ref">true</span>. If this attribute is set to <span class="api-command-ref">false</span>, the following methods will fail and will return an error message.</p>
                                                <p><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#run_flow_now">Run Flow Now</a>
                                                </p>
                                                <p><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#run_flow_task" target="_blank">Run Flow Task</a>
                                                </p>
                                                <p><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_datasources.htm#update_data_source_now" target="_blank">Update Data Source Now</a>
                                                </p>
                                                <p><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#run_extract_refresh_task" target="_blank">Run Extract Refresh Task</a>
                                                </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td colspan="2">
                                                <p class="note"><b>Licensing attributes</b>
                                                    <br>
                                                    <br>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.
										<br><br>The REST API enables administrators to set licensing
										limits below the purchased maximum with two types of license-related attributes:
										<br> - User Quota - The total maximum number of licenses currently configured for a site.
										<br> - Tiered Capacities - If set, the configured maximum license count for each license type (role).

								  <br><br>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.
								  <br><br> For more information, see
							<a href="https://help.tableau.com/current/server/en-us/license_server_overview.htm" rel="noopener noreferrer" target="_blank">Licensing Overview</a>.
								</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p>User quota</p>
                                                <p><span class="api-placeholder">all-license-limit-total</span>
                                                </p>
                                            </td>
                                            <td>
                                                <p>(Optional) The maximum total number of users with Creator, Explorer, or Viewer licenses currently allowed on a site.</p>
                                                <p>On-premises server administrators can set <code>userQuota</code> 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
									<code>userQuota</code> will equal the sum of the tiered capacity values, and attempting to set
									<code>userQuota</code> will cause an error.</p>
                                                <p>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 <code>userQuota</code> from a Create Site or Update Site request, or
									making its value -1. </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p>Tiered capacity attributes</p>
                                                <p><span class="api-placeholder">creator-license-limit</span>
                                                    <br><span class="api-placeholder">explorer-license-limit</span>
                                                    <br><span class="api-placeholder">viewer-license-limit</span>
                                                </p>
                                            </td>
                                            <td>
                                                <p>(Optional) The maximum number of licenses for users with the Creator,
									Explorer, or Viewer role, respectively, allowed on a site. </p>
                                                <p>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.</p>
                                                <p>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. </p>
                                                <p>To use role-specific license limits, the <code>userQuota</code> 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 <code>userQuota</code> will result in an error.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">data-alerts-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, data alerts are enabled on the site. Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">commenting-mentions-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, mentions for commenting are enabled. Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">catalog-obfuscation-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, catalog obfuscation is enabled on the site. Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">flow-auto-save-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, flow auto save is enabled on the site.
							Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">run-now-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, run now for schedules is enabled which allows non-administrators to run schedules manually. Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">metrics-content-type-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, the metrics content type is enabled on the server. Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">notify-site-admins-on-throttle-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, site admins will be notified if their background jobs are being throttled. Default value is <code>false</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">authoring-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, web authoring is enabled. Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">custom-subscription-email-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, sending custom subscription email is enabled. If set to false after being set true, the current custom subscription email is voided. Default value is <code>false</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">custom-subscription-email</span>
                                                </p>
                                            </td>
                                            <td>A valid custom email that will be sent if <span class="api-placeholder">customSubscriptionEmailEnabled</span> is set to true. Default value is <code>false</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">custom-subscription-footer-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, 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 <code>false</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">custom-subscription-footer</span>
                                                </p>
                                            </td>
                                            <td>A custom subscription footer that will be added to subscription and data alerts if <span class="api-placeholder">customSubscriptionFooterEnabled</span> is set to true. Default value is <code>false</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">ask-data-mode</span>
                                                </p>
                                            </td>
                                            <td>The mode of the ask data feature on the site. Can be set to one of two values:
								<ul><li><code>DisabledByDefault</code> - Enables creation of Ask Data lenses for all published data sources. Data sources do not have lenses created automatically.</li><li><code>DisabledAlways</code> - 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.</li></ul>
							Default value is <code>DisabledByDefault</code>. For more information, see <a href="https://help.tableau.com/current/server/en-us/ask_data_enable.htm" ref="noreferrer" target="_blank">Disable or Enable Ask Data for a Site</a>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">named-sharing-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, named sharing is enabled. Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">cataloging-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, data catalog is enabled for the site. Default value is <code>true</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">derived-permissions-enabled-flag</span>
                                                </p>
                                            </td>
                                            <td>(Optional, boolean) If <code>true</code>, derived permissions are enabled for the site. Default value is <code>false</code>.</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <p><span class="api-placeholder">user-visibility-mode</span>
                                                </p>
                                            </td>
                                            <td>(Optional, string) When the value is <code>FULL</code> users can see the user of other site users. If the value is <code>LIMITED</code> User information on the site is not visible to other users. Default value is <span class="api-placeholder">FULL</span>. For more information, see <a href="https://help.tableau.com/current/server/en-us/user_visibility.htm" ref="noreferrer" target="_blank">User Visibility</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">use-default-time-zone</span>
                                            </td>
                                            <td>Optional, boolean) Set this to <code>true</code>, if you want the <span class="api-placeholder">time-zone</span> attribute use the Server time Zone at run time. This attribute is set to the official IANA name.&nbsp; If this is set to <code>false</code>, the <span class="api-placeholder">time-zone</span> value must be specified.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">time-zone</span>
                                            </td>
                                            <td>(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 <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">Wikipedia</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">autoSuspendRefreshEnabled</span>
                                            </td>
                                            <td>(Optional) Tableau can automatically suspend extract refresh tasks for inactive workbooks to save resources. Specify&nbsp;true&nbsp;to enable or false&nbsp;to disable. Default is&nbsp;true.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">autoSuspendRefreshInactivityWindow</span>
                                            </td>
                                            <td>(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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">explainDataEnabled</span>
                                            </td>
                                            <td>
                                                <p>(Optional, boolean) Set this attribute to <code>false</code> to disable Explain Data capabilities for a site. By default, this attribute is set to <code>true</code>. For more information about this site setting, see one of the following topics:</p>
                                                <ul>
                                                    <li>For Tableau Cloud, see <a href="https://help.tableau.com/current/online/en-us/explain_data_enable.htm" target="_blank">Disable or Enable Explain Data for a Site</a>.</li>
                                                    <li>For Tableau Server, see <a href="https://help.tableau.com/current/server/en-us/explain_data_enable.htm" target="_blank">Disable or Enable Explain Data for a Site</a>.</li>
                                                </ul>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">dqwSubscriptionsEnabled</span>
                                            </td>
                                            <td>
                                                <p>(Optional, boolean) Set this attribute to <code>false</code> to exclude data quality warnings (DQWs) from subscription emails. By default, this attribute is set to <code>true</code>. For more information about this site setting, see one of the following topics:</p>
                                                <ul>
                                                    <li>For Tableau Cloud, see <a href="https://help.tableau.com/current/online/en-us/dm_dqw#subscriptions.htm" target="_blank">Disable or Enable Explain Data for a Site</a>.</li>
                                                    <li>For Tableau Server, see <a href="https://help.tableau.com/current/server/en-us/dm_dqw#subscriptions.htm" target="_blank">Disable or Enable Explain Data for a Site</a>.</li>
                                                </ul>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">groupAssertionsEnabled</span>
                                            </td>
                                            <td>(Optional, boolean) Set to <code>true</code> to allow assertions into group membership using session info. Set to <code>false</code> if you do not want users to be able to be asserted in to groups. The default is <code>false</code>. If this attribute is set to false, it will disable group assertions for the entire site, including the following settings:
    <ul><li><span class="api-placeholder">groupAssertionsSAMLEnabled</span></li><li><span class="api-placeholder">groupAssertionsOIDCEnabled</span></li><li><span class="api-placeholder">groupAssertionsConnectedAppsEnabled</span></li></ul></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">groupAssertionsSAMLEnabled</span>
                                            </td>
                                            <td>(Optional, boolean) Set to <code>true </code>to allow assertions into group membership using SAML session info. Set to <code>false </code>if you don’t want users to be able to be asserted in to groups. The default is <code>false</code>. If this attribute is set to false, it will disable group assertions for SAML sessions.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">groupAssertionsOIDCEnabled</span>
                                            </td>
                                            <td>
                                                <p>(Optional, boolean) Set to <code>true </code>to allow assertions into group membership using OIDC session info. Set to <code>false </code>if you don’t want users to be able to be asserted in to groups. The default is <code>false</code>. If this attribute is set to false, it will disable group assertions for OIDC sessions.</p>
                                                <p class="note"><b>Note</b>: This parameter only applies to Tableau Cloud.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">groupAssertionsConnectedAppsEnabled</span>
                                            </td>
                                            <td> (Optional, boolean) Set to <code>true </code>to allow assertions into group membership using Connected App JWT tokens. Set to <code>false </code>if you don’t want users to be able to be asserted in to groups via connected apps. The default is <code>false</code>. If this attribute is set to false, it will disable group assertions for JWT connected app connections.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">groupSetsEnabled</span>
                                            </td>
                                            <td>(Optional, boolean) Set to <code>true </code>to allow groups sets. Set to <code>false </code>if you don’t want group sets support for the site. The default is <code>false</code>. If this attribute is set to false, it will disable group sets for the site.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">recycleBinEnabled</span>
                                            </td>
                                            <td>(Optional, boolean) Set to <code>true</code> to enable the Recycle Bin. Set to <code>false</code> to disable it. The default is <code>true</code>.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <site id="site-id"
    name="site-name"
    contentUrl="content-url"
    adminMode="admin-mode"
    disableSubscriptions="disable-subscriptions-flag"
    state="active-or-suspended"
    revisionHistoryEnabled="history-enabled-flag"
    revisionLimit="max-num-revisions"
    allowSubscriptionAttachments="allow-subcription-attachments-flag"
    subscribeOthersEnabled="enable-subscription-of-others-flag"
    guestAccessEnabled="guest-access-enabled-flag"
    cacheWarmupEnabled="cache-warmup-enabled-flag [REMOVED IN API 3.19]"
    commentingEnabled="commenting-enabled-flag"
    editingFlowsEnabled="editing-flows-enabled-flag"
    schedulingFlowsEnabled="scheduling-flows-enabled-flag"
    extractEncryptionMode="encryption-mode"
    catalogingEnabled="cataloging-enabled-flag"
    derivedPermissionsEnabled="derived-permissions-enabled-flag"
    requestAccessEnabled="request-access-enabled-flag"
    runNowEnabled="run-now-enabled-flag"
    userQuota="all-license-limit-total"
    tierCreatorCapacity="creator-license-limit"
    tierExplorerCapacity="explorer-license-limit"
    tierViewerCapacity="viewer-license-limit"
    askDataMode="ask-data-mode"
    useDefaultTimeZone="default-time-zone-flag"
    timeZone="time-zone"
    autoSuspendRefreshEnabled="auto-suspend-refresh-enabled-flag"
    autoSuspendRefreshInactivityWindow="auto-suspend-refresh-inactivity-window"
    explainDataEnabled="explain-data-enabled"
    dqwSubscriptionsEnabled="dqw-subscriptions-enabled"
    groupAssertionsEnabled="group-assertions-enabled-flag"
    groupAssertionsSAMLEnabled="group-assertions-saml-enabled-flag"
    groupAssertionsOIDCEnabled="group-assertions-oidc-enabled-flag"
    groupAssertionsConnectedAppsEnabled="group-assertions-connected-apps-enabled-flag"
    groupSetsEnabled="group-sets-enabled-flag"
    recycleBinEnabled="recycle-bin-enabled-flag" />
  </site>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing, incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Invalid storage quota</td>
                                            <td>The storage quota value wasn’t a positive number.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Invalid user quota</td>
                                            <td>The user quota value wasn’t a positive number.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400013</td>
                                            <td>Invalid administrator mode</td>
                                            <td>                                     The user provided an administrator mode that isn’t <span class="api-command-ref">ContentOnly</span> or <span class="api-command-ref">ContentAndUsers</span>.                                     <p class="note"><strong>Note:</strong>&nbsp;An empty string or all whitespace is invalid.</p></td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409001</td>
                                            <td>Site name conflict</td>
                                            <td>The site name in the request already belongs to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409002</td>
                                            <td>Site URL conflict</td>
                                            <td>The content URI in the request already belongs to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409004</td>
                                            <td>User quota and tiered capacity conflict</td>
                                            <td>The request cannot set both tiered capacity attributes and <span class="api-command-ref">userQuota</span>. One or the other must be null.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409004</td>
                                            <td>License limit exceeded</td>
                                            <td>The request cannot set tiered capacity attributes or  <span class="api-command-ref">userQuota</span> values that are larger than the number of active licenses configured for the site.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409004</td>
                                            <td>Administrator mode or user quota conflict</td>
                                            <td>The request cannot set <span class="api-command-ref">adminMode</span> to <span class="api-command-ref">ContentOnly</span> and also specify a  <span class="api-command-ref">userQuota</span> value.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @create-site.xml`

**Content of create-site.xml:**

```
<tsRequest>
	<site name="Marketing-Site"
        contentUrl="marketingsite"
        adminMode="ContentAndUsers"
        tierCreatorCapacity="2"
        tierExplorerCapacity="1"
        tierViewerCapacity="1"
        useDefaultTimeZone="false"
        timeZone="America/Los_Angeles"/>
</tsRequest>
```

**Response body:**

```
<tsResponse>
	<site id="43e01bb6-d7f9-42ef-bc9f-0422c07520e5"
        name="Marketing-Site"
        contentUrl="marketingsite"
        adminMode="ContentAndUsers"
        disableSubscriptions="true"
        state="Active"
        revisionHistoryEnabled="true"
        revisionLimit="25"
        subscribeOthersEnabled="false"
        allowSubscriptionAttachments="true"
        guestAccessEnabled="true"
        cacheWarmupEnabled="true" [REMOVED IN API 3.19]
        commentingEnabled="true"
        editingFlowsEnabled="false"
        schedulingFlowsEnabled="false"
        extractEncryptionMode="enabled"
        catalogingEnabled="true"
        derivedPermissionsEnabled="false"
        requestAccessEnabled="false"
        runNowEnabled="true"
        userQuota="4"
        tierCreatorCapacity="2"
        tierExplorerCapacity="1"
        tierViewerCapacity="1"
        useDefaultTimeZone="false"
        timeZone="America/Los_Angeles" />
</tsResponse>
```

## 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

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

#### 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

```
<tsRequest>
  <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>
</tsRequest>
```

```
{
  "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"
    }
  }
}
```

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">subscription-subject</span>
                                    </td>
                                    <td>A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment.
								A description is required.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">attach-image-flag</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Setting this <code>true</code> will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default
								behavior if neither <code>attachImage</code> or <code>attachPdf</code> are specified.</p>
                                        <p>If subscriptions to attachments are disabled in Tableau server or site settings,
								then making a request that sets <code>attachImage</code> to <code>false</code> will cause an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">attach-pdf-flag</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Setting this <code>true</code> will cause the subscriber to receive mail with a .pdf file
								containing images of workbooks or views attached to it.</p>
                                        <p>If subscriptions to attachments are disabled in Tableau server or site settings,
								then  making a request that sets <code>attachPdf</code> to <code>true</code> will cause an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">page-orientation</span>
                                    </td>
                                    <td>
								(Optional) The orientation of the pages produced when <span class="api-placeholder">attach-pdf-flag</span>
								is <code>true</code>. The value can be <code>Portrait</code> or
								<code>Landscape</code>. If this parameter is not present the page orientation will default to <code>Portrait</code>.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">page-size-option</span>
                                    </td>
                                    <td>
								(Optional) The type of page produced, which determines the page dimensions when
								<span class="api-placeholder">attach-pdf-flag</span> is <code>true</code>. The value can be:
								<code>A3</code>, <code>A4</code>, <code>A5</code>, <code>B5</code>, <code>Executive</code>, <code>Folio</code>,
								<code>Ledger</code>, <code>Legal</code>, <code>Letter</code>, <code>Note</code>, <code>Quarto</code>, or
								<code>Tabloid</code>. If this parameter is not present the page type will default to <code>Letter</code>.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">message</span>
                                    </td>
                                    <td>
								The text body of the subscription email message.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">suspended-flag</span>
                                    </td>
                                    <td>(Optional) If <code>true</code>, the subscription is created in a disabled state, meaning it won't run until it's enabled using the <a href="#update_subscription">Update Subscription</a> method or <span class="uicontrol">Resume Subscription</span> in the web UI. The default value is <code>false</code>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">content-type</span>
                                    </td>
                                    <td><code>Workbook</code> to create a subscription for a workbook, or <code>View</code> to create a subscription for a view.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">send-view-if-empty-flag</span>
                                    </td>
                                    <td>(Optional) Applies to views only. If <code>true</code>, an image is sent even if the view specified in a subscription is
								empty. If <code>false</code>, nothing is sent if the view is empty. The default value is true.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">custom-view-id</span>
                                    </td>
                                    <td>(Optional) Applies to views only. The LUID of a custom view to use instead of the default view.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">content-id</span>
                                    </td>
                                    <td>The ID of the workbook or view to subscribe to.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">schedule-id</span>
                                    </td>
                                    <td>The ID of a schedule to associate the subscription with. To determine what schedules are available,
								call <a href="#query_schedules">List Server Schedules</a>. The type of the schedule must be <code>Subscription</code>.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">user-id</span>
                                    </td>
                                    <td>The ID of the user to create the subscription for.
							<p class="note"><strong>Note</strong>: The user must have an email address defined in Tableau Server.</p></td>
                                </tr>
                            </tbody>
                        </table>

#### 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

```
<tsResponse>
  <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" />
  </subscription>
</tsResponse>
```

```
{
  "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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400067</td><td>Invalid subscription subject</td><td>The subscription subject is null or empty.</td></tr><tr><td>400</td><td>400068</td><td>Invalid subscription target</td><td>The content type specified in the request body is not a workbook or view.</td></tr><tr><td>400</td><td>400069</td><td>Invalid subscription type</td><td>The subscription type is not <code>Workbook</code> or <code>View</code>.</td></tr><tr><td>400</td><td>400069</td><td>Invalid schedule type</td><td>The schedule type is not <code>Subscription</code>.</td></tr><tr><td>403</td><td>403060</td><td>No permissions to create subscription.</td><td>The user does not have permission to create a subscription for the specified content.</td></tr><tr><td>403</td><td>403063</td><td>No user permissions for content.</td><td>The user specified in the request body does not have <span class="api-command-ref">Read</span> (view) permissions for the specified content.</td></tr><tr><td>403</td><td>403064</td><td>No user email address.</td><td>The user does not have an email address.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user specified in the request body doesn't correspond to an existing user.</td></tr><tr><td>400</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the request body doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the request body doesn't correspond to an existing view.</td></tr><tr><td>404</td><td>404023</td><td>Schedule not found</td><td>The schedule ID in the request body doesn't correspond to an existing schedule.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

### 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

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

#### Request Body

```
<tsRequest>
  <subscription
  subject="finance report"
  attachImage="true"
  attachPdf="true"
  pageOrientation="Portrait"
  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="6t543fd-6365-44d5-925b-644e52897y65"/>
  </subscription>
  <schedule frequency="Daily">
    <frequencyDetails start="18:30:00" end="23:30:00">
      <intervals>
        <interval hours="4"/>
        <interval weekDay="Sunday"/>
        <interval WeekDay="Wednesday"/>
      </intervals>
    </frequencyDetails>
  </schedule>
</tsRequest>
```

```
{
  "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.

<table class="api-parameters-table">
                            <colgroup>
                                <col width="30%">
                                <col width="70%">
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><code>subscription subject</code>
                                    </td>
                                    <td><i>(Required to create subscription) string:</i> A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment.
					</td>
                                </tr>
                                <tr>
                                    <td><code>subscription attachImage</code>
                                    </td>
                                    <td>
                                        <p><i>boolean:</i>  Setting this <code>true</code> will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default
						behavior if neither <code>attachImage</code> or <code>attachPdf</code> are specified. Default is <code>false</code>.</p>
                                        <p>If subscriptions to attachments are disabled in Tableau server or site settings,
						then making a request that sets <code>attachImage</code> to <code>false</code> will cause an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>subscription attachPdf</code>
                                    </td>
                                    <td>
                                        <p><i>boolean:</i> Setting this <code>true</code> will cause the subscriber to receive mail with a .pdf file
						containing images of workbooks or views attached to it. Default is <code>false</code>.</p>
                                        <p>If subscriptions to attachments are disabled in Tableau server or site settings,
						then  making a request that sets <code>attachPdf</code> to <code>true</code> will cause an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>subscription pageOrientation</code>
                                    </td>
                                    <td><i>enumeration:</i> The orientation of the pages produced when <span class="api-placeholder">attach-pdf-flag</span>
						is <code>true</code>. The value can be <code>Portrait</code> or
						<code>Landscape</code>. If this parameter is not present the page orientation will default to <code>Portrait</code>.
					</td>
                                </tr>
                                <tr>
                                    <td><code>subscription pageSizeOption</code>
                                    </td>
                                    <td><i>enumeration:</i> The type of page produced, which determines the page dimensions when
						<span class="api-placeholder">attach-pdf-flag</span> is <code>true</code>. The value can be:
						<code>A3</code>, <code>A4</code>, <code>A5</code>, <code>B5</code>, <code>Executive</code>, <code>Folio</code>,
						<code>Ledger</code>, <code>Legal</code>, <code>Letter</code>, <code>Note</code>, <code>Quarto</code>, or
						<code>Tabloid</code>. If this parameter is not present the page type will default to <code>Letter</code>.
					</td>
                                </tr>
                                <tr>
                                    <td><code>subscription message</code>
                                    </td>
                                    <td><i>string:</i> The text body of the subscription email message.</td>
                                </tr>
                                <tr>
                                    <td><code>subscription suspended</code>
                                    </td>
                                    <td><i>boolean:</i> If <code>true</code>, the subscription is created in a disabled state, meaning it won't run until it's enabled using the <a href="#update_subscription">Update Subscription</a> method or <span class="uicontrol">Resume Subscription</span> in the web UI. The default value is <code>false</code>.</td>
                                </tr>
                                <tr>
                                    <td><code>content id</code>
                                    </td>
                                    <td><i>(Required to create subscription) LUID:</i> The LUID of the workbook or view the user should be subscribed to.
					</td>
                                </tr>
                                <tr>
                                    <td><code>content type</code>
                                    </td>
                                    <td><i>(Required to create subscription) enumeration:</i> <code>Workbook</code> to create a subscription for a workbook, or <code>View</code> to create a subscription for a view.
					</td>
                                </tr>
                                <tr>
                                    <td><code>content sendIfViewEmpty</code>
                                    </td>
                                    <td><i>boolean:</i> Applies to views only. If <code>true</code>, an image is sent even if the view specified in a subscription is
						empty. If <code>false</code>, nothing is sent if the view is empty. The default value is true.
					</td>
                                </tr>
                                <tr>
                                    <td><code>content customViewID</code>
                                    </td>
                                    <td>
                                        <p><i>string:</i> Applies to views only. The LUID of a custom view to use instead of the default view.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>userId</code>
                                    </td>
                                    <td><i>(Required to create subscription) LUID:</i> The LUID of the user to create the subscription for.
					<p class="note"><strong>Note</strong>: The user must have an email address defined in Tableau Server.</p></td>
                                </tr>
                            </tbody>
                        </table> <table class="api-parameters-table">
                            <colgroup>
                                <col width="30%">
                                <col width="70%">
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><code>schedule frequency</code>
                                    </td>
                                    <td><i>(Required to create subscription) enumeration:</i> The scheduled frequency for triggering the task. Valid values include:
							<ul><li>Hourly</li><li>Daily</li><li>Weekly</li><li>Monthly</li></ul></td>
                                </tr>
                                <tr>
                                    <td><code>frequencyDetails start</code>
                                    </td>
                                    <td><i>(Required to create subscription) time:</i> If the schedule frequency is <code>Daily, Weekly, or Monthly</code>, then <code>start</code>
						is the time of day on which scheduled jobs should run. If the frequency is <code>Hourly</code>, then <code>start</code> is the beginning of the
								time range during which jobs should be started. The valid format is <code>HH:MM:SS</code>.
					</td>
                                </tr>
                                <tr>
                                    <td><code>frequencyDetails end</code>
                                    </td>
                                    <td>
                                        <p><i>(Required to create subscription) time:</i> If the schedule frequency is <code>Hourly</code>, or <code>Daily</code> with an interval of
							<code>hours</code> less than <code>24</code>, then <code>end</code> is the time of day on which scheduled jobs should stop being run.
							The valid format is <code>HH:MM:SS</code>. 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 <code>frequencyDetail</code> would be:
</p><pre><code>&lt;frequencyDetail start="20:45:00" end="21:45:00"&gt;
  . . .
&lt;/frequencyDetail&gt;</code></pre>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>interval <i>{interval type}</i></code>
                                    </td>
                                    <td><i>(Required to create subscription) string:</i> Defines when and how often a scheduled job executes within the time parameters set in the <code>start</code> and <code>end</code>
							 values of the <code>frequencyDetails</code> of the <code>schedule</code>. The type and valid values for
							an interval expression depend on the declared <code>frequency</code> of the <code>schedule</code> as follows:<br><br><table><colgroup><col width="20%"><col width="80%"></colgroup><tbody><tr align="left"><th><b>Frequency</b></th><th><b>Valid interval values</b></th></tr><tr><td><code>Hourly</code></td><td> The value of an interval for an <code>Hourly</code> schedule can be only one of either:
							<ul><li><code>hours="1"</code>
									The number of hours between jobs. <code>1</code> is the only valid value.</li><li><code>minutes="60"</code>
									 The number of minutes between jobs. <code>60</code> is the only valid value.</li><li><code>weekDay="<i>weekday"</i></code> The weekday(s) the job will be run on.
									Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
								 	Thursday, Friday, and Saturday</code>. <br><br>
									For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
									use an interval like:
											<pre><code>&lt;intervals&gt;
  &lt;interval hours="1"/&gt;
  &lt;interval weekDay="Sunday"/&gt;
  &lt;interval weekDay="Wednesday"/&gt;
&lt;intervals&gt;</code></pre></li></ul><br></td></tr><tr><td><code>Daily</code></td><td>
									The value of <code>Daily</code> can have multiple <code>weekday</code> elements, but only one <code>hours</code> declaration.
										An <code>hours</code> interval is required.
									<ul><li><code>hours="<i>interval</i>"</code> The interval between execution of jobs on the weekday(s) specified.
											Valid values are <code>2, 4, 6, 8, 12, or 24</code>. Note that if the <code><i>interval</i></code> value of a daily schedule
												is less than <code>24</code>, a <code>frequencyDetail end</code> time must be supplied. </li><li><code>weekDay="<i>weekday</i>"</code> The weekday(s) the job will be run on.
											Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
										 	Thursday, Friday, or Saturday</code>. <br><br>
											For example, to schedule to run a job every 4 hours	on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
											use an interval like:<br><pre><code>&lt;intervals&gt;
  &lt;interval hours="4"/&gt;
  &lt;interval weekDay="Sunday"/&gt;
  &lt;interval weekDay="Wednesday"/&gt;
&lt;intervals&gt;</code></pre></li></ul></td></tr><tr><td><code>Weekly</code></td><td><code>weekDay="<i>weekday</i>"</code>
												The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are:
											<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.</code></td></tr><tr><td><code>Monthly</code></td><td> <p>The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:</p><p>Specify the day(s) using the number of the day in the month;
											</p><ul><li><code>monthDay="<i>day</i>"</code> The number of the day of the month. Valid values are the whole numbers
												<code>1</code> to <code>31</code> or <code>LastDay</code>. If you specify <code>monthDay</code> by day number
												then you can use multiple <code>interval</code> instances to choose for the job to
												run on multiple days in the month. If you use <code>LastDay</code> then only one instance of <code>interval</code>
												can be used in the schedule to specify the last day of the month.</li></ul><p></p><p>Specify the day by describing which occurrence of a weekday within the month.
										</p><ul><li><code>monthDay="<i>occurrence_of_weekday</i>" Weekday="<i>weekday</i>"</code>
													The occurrence of the specified weekday within the month when a job should be run.
													Valid values for <code><i>occurrencee_of_weekday</i></code> are	<code>First, Second, Third, Fourth, Fifth, or LastDay</code>.
													Valid values for <code><i>weekday</i></code> are
													<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday</code>.
													If the value is <code>lastDay</code> then the job will run on
													the last occurrence of the specified weekday in the month.<br><br>
													For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:<br><pre><code>&lt;interval monthDay="Third" weekDay="Thursday"/&gt;</code></pre></li></ul><p></p></td></tr></tbody></table></td>
                                </tr>
                            </tbody>
                        </table>

#### 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 "<tsRequest> <subscription subject='finance report' attachImage='true' attachPdf='true' pageOrientation='Portrait' pageSizeOption='Folio' message='daily finance report'> <content id='13237fd-6365-44d5-925b-644e5281b605' type='Workbook' sendIfViewEmpty='false'/> <user id='6t543fd-6365-44d5-925b-644e52897y65'/> </subscription> <schedule frequency='Daily'> <frequencyDetails start='18:30:00' end='23:30:00'> <intervals> <interval hours='4'/> <interval weekDay='Sunday'/> <interval weekDay='Wednesday'/> </intervals> </frequencyDetails> </schedule> </tsRequest>"`

#### Response Code

200

#### Response Body

```
<tsResponse>
  <subscription
    id="45678fd-6365-44d5-925b-644e52834567"
    subject="finance report"
    attachImage="true"
    attachPdf="true"
    pageOrientation="Portrait"
    pageSizeOption="Folio"
    message="Daily finance report">
      <content
        id="13237fd-6365-44d5-925b-644e5281b605"
        type="Workbook"
        sendIfViewEmpty="false"/>
      <user id="09876fd-6365-44d5-925b-644e528d5678"/>
  </subscription>
  <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"/>
          <interval weekDay="Sunday"/>
          <interval weekDay="Wednesday"/>
        </intervals>
      </frequencyDetails>
  </schedule>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized Access</td><td>The user is not authorized to make this request..</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user specified in the request could not be found.</td></tr><tr><td>404</td><td>404025</td><td>Subscription not found</td><td>The task for the subscription could not be found.</td></tr><tr><td>409</td><td>409004</td><td>invalid parameter value</td><td>The request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between <code>start</code> and <code>end</code> times are not increments of one hour, this error will result.</td></tr></tbody></table>

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

## Create 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

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

#### Request Body

```
<tsRequest>
    <mcpSiteSettings>
        <settings>
            <key>mcp-setting-key</key>
            <value>mcp-setting-value</value>
        </settings>
    </mcpSiteSettings>
</tsRequest>
```

```
{
  "mcpSiteSettings": {
    "settings": [
      {
        "key": "mcp-setting-key",
        "value": "mcp-setting-value"
      }
    ]
  }
}
```

#### Attribute Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">mcp-setting-key</span>
                                        </td>
                                        <td>(Required) String. Specifies the setting to assign a value to.</td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <p><span class="api-placeholder">mcp-setting-value</span>
                                            </p>
                                        </td>
                                        <td>(Required) String. Provides the value for the associated key.</td>
                                    </tr>
                                </tbody>
                            </table>

#### Response Code

200

#### Response Body

```
<tsResponse>
    <mcpSiteSettings>
        <settings>
            <key>EXCLUDE_TOOLS</key>
            <value>search-content</value>
        </settings>
    </mcpSiteSettings>
</tsResponse>
```

```
{
  "mcpSiteSettings": {
    "settings": [
      {
        "key": "EXCLUDE_TOOLS",
        "value": "search-content"
      }
    ]
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid parameter</td><td>The mcpSiteSettings entity is empty; the settings key is null, missing, or invalid; or site LUID format is invalid.</td></tr><tr><td>401</td><td>401002</td><td>Invalid authentication credentials</td><td>Missing or invalid authentication credentials.</td></tr><tr><td>401</td><td>403001</td><td>Missing authentication token</td><td>Authentication token not provided.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User isn't an administrator.</td></tr><tr><td>403</td><td>403010</td><td>Site mismatch</td><td>Authenticated user's site does not match the site LUID in the request.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>Feature not enabled.</td></tr><tr><td>403</td><td>N/A</td><td>Insufficient OAuth scope</td><td>The user lacks the required OAuth scope.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>A site with the specified LUID does not exist.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>Unknown server error.</td></tr></tbody></table>

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

## Create 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (<code>authUser.getSiteLuid()</code>).</td></tr><tr><td><span class="api-placeholder">datasource-luid</span></td><td>The LUID of the data source. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching <code>[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}</code>.</td></tr></tbody></table>

#### 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.

```
<tsResponse>
  <tdsWorkCopy>
    <workCopyLuid>d9e8f7a6-b5c4-3210-fedc-ba9876543210</workCopyLuid>
  </tdsWorkCopy>
</tsResponse>
```

```
{
  "tdsWorkCopy": {
    "workCopyLuid": "d9e8f7a6-b5c4-3210-fedc-ba9876543210"
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsWorkCopy</span></td><td>Required. Work copy identifiers.</td></tr><tr><td><span class="api-placeholder">tdsWorkCopy.workCopyLuid</span></td><td>LUID of the new work copy.</td></tr><tr><td><span class="api-placeholder">tdsWorkCopy.datasourceLuid</span></td><td>Optional. LUID of the published data source. Not returned by this method; returned by Publish Work Copy.</td></tr></tbody></table>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td></td><td>Invalid data source LUID</td><td>The data source LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Data Management Bundle not licensed</td><td>On Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.</td></tr><tr><td>403</td><td>403004</td><td>Unable to resolve tenant</td><td>On Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.</td></tr><tr><td>403</td><td>403004</td><td>No cloud entitlements</td><td>On Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td>403004</td><td>Subscription not entitled</td><td>On Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>404</td><td></td><td>Data source not found or not visible to the caller</td><td>The 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.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The HTTP method is not supported for this resource.</td></tr><tr><td>405</td><td>405003</td><td>Composable data source</td><td>Creating a work copy is not supported for composable data sources (data sources that have one or more immediate parent published data sources).</td></tr><tr><td>405</td><td>405004</td><td>Semantic Data Model (SDM) data source</td><td>Creating a work copy is not supported for Semantic Data Model (SDM) data sources.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>429</td><td></td><td>Work copy limit exceeded</td><td>The maximum number of open work copies is reached. Publish an existing work copy before creating a new one.</td></tr><tr><td>500</td><td></td><td>Unknown error</td><td>There was an internal server error.</td></tr><tr><td>503</td><td></td><td>Service unavailable</td><td>Service unavailable.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

## 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/<site-id>/webhooks/<webhook-id>

#### Parameter Values

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

#### Request Body

None.

#### Permissions

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

#### Access Scope

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

```
tableau:webhooks:delete
```

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

#### Response Code

204

#### Response Body

None.

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the Recycle Bin.</td></tr><tr><td><span class="api-placeholder">as-job-value</span></td><td>(Optional) If <code>true</code>, runs as an asynchronous job. Returns job information instead of executing synchronously. Default is <code>false</code>. Check the status of the job by calling <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job">Query Job</a>.</td></tr></tbody></table>

#### 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).

```
<tsResponse>
  <job id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd"
    mode="Asynchronous"
    type="EmptyRecycleBin"
    progress="0"
    createdAt="2026-05-22T02:38:57Z"
    finishCode="1"/>
</tsResponse>
```

```
{
  "job":{
    "id":"12ab34cd-56ef-78ab-90cd-12ef34ab56cd",
    "mode":"Asynchronous",
    "type":"EmptyRecycleBin",
    "progress":"0",
    "createdAt":"2026-05-22T02:37:30Z",
    "finishCode":"1"
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>Check the request body and query string parameters.</td></tr><tr><td>401</td><td>401000</td><td>No auth credentials</td><td>Check the authorization header.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized</td><td>Session expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Check user permission.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>Recycle Bin disabled.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>Request type unrecognized for this method.</td></tr><tr><td>406</td><td>406000</td><td>Unacceptable media type</td><td>Bad Accept: header.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>Parameter type-mismatched, unknown content type, or malformed LUID.</td></tr><tr><td>429</td><td>429000</td><td>Too many requests</td><td>Request throttled.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>Unknown error.</td></tr><tr><td>503</td><td>500001</td><td>Internal service error</td><td>Internal service error.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-luid</span>
                                            </td>
                                            <td>Required. The LUID of the site that contains the view.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">lens-luid</span>
                                            </td>
                                            <td>Required. The LUID of the lens to delete permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-luid</span>
                                            </td>
                                            <td>Optional <i>(one user or group must be specified)</i>. The LUID of the group to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-luid</span>
                                            </td>
                                            <td>Optional. The LUID of the user to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>The capability to remove the permission for.</p>
                                                <p>The valid capabilities for a view are
                                        <span class="api-command-ref">ChangePermissions</span>,
                                        <span class="api-command-ref">Delete</span>,
                                        <span class="api-command-ref">Move</span>,
                                        <span class="api-command-ref">Read</span>,
                                        <span class="api-command-ref">Write</span>.</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to
                                    remove the deny permission.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for an ask data lense. Valid capabilities for a lens are <b>ChangePermissions</b>, <b>Delete</b>, <b>Move</b>, <b>Read</b>, and <b>Write</b>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to delete permissions on the view.</td></tr><tr><td>403</td><td>403039</td><td>Project permissions locked</td><td>The parent project that contains the specified ask data lens has its permissions locked.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn’t correspond to an existing user.</td></tr><tr><td>404</td><td>404046</td><td>Lens not found</td><td>The ask data lens LUID in the URI doesn't correspond to an existing view.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group LUID in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The 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 <b>Allow</b> or <b>Deny</b>).</td></tr><tr><td>404</td><td>404014</td><td>Capability not assigned</td><td>The capability in the URI is not assigned to the specified user or group with the specified mode (<b>Allow</b> or <b>Deny</b>).</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">bridge-client-id</span></td><td>The unique identifier for the Bridge client to delete.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

204 No Content

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>404</td><td>503001</td><td>Bridge client not found</td><td>Bridge client with the specified ID does not exist on this site.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503003</td><td>Unexpected server error</td><td>An unexpected error occurred while deleting the Bridge client.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">pool-id</span></td><td>The unique identifier (UUID) of the pool to delete.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

204 No Content

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid pool ID or pool not found</td><td>Pool ID must be valid UUID and exist on the site.</td></tr><tr><td>400</td><td>503902</td><td>System pool</td><td>Cannot delete reserved system pools.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503902</td><td>Unexpected server error</td><td>An unexpected error occurred while deleting the pool.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">api-version</span>
                                    </td>
                                    <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">site-id</span>
                                    </td>
                                    <td>The ID of the site that contains the collection.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">collection-id</span>
                                    </td>
                                    <td>The ID of the collection to remove the permission for.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">group-id</span>
                                    </td>
                                    <td>The ID of the group to remove the permission for.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">user-id</span>
                                    </td>
                                    <td>The ID of the user to remove the permission for.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">capability-name</span>
                                    </td>
                                    <td>
                                        <p>The capability to remove the permission for.
                                    The only valid capability for a collection is
                                    <span class="api-command-ref">Read</span>. The only valid capability mode is Allow or Deny.</p>
                                        <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">capability-mode</span>
                                    </td>
                                    <td><span class="api-command-ref">Allow</span> to delete an allow permission, or <span class="api-command-ref">Deny</span> to delete a deny permission. This value is case sensitive.
                           </td>
                                </tr>
                            </tbody>
                        </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a collection. The only valid capability for a collection is <span class="api-command-ref">Read</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to set permissions on the collection.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI wasn't found.</td></tr><tr><td>404</td><td>404002</td><td>Resource not found</td><td>The user ID in the URI wasn't found.</td></tr><tr><td>404</td><td>404012</td><td>Resource not found</td><td>The group ID in the URI wasn't found.</td></tr><tr><td>404</td><td>404013</td><td>Resource not found</td><td>The capability in the URI isn't recognized.</td></tr><tr><td>404</td><td>404014</td><td>Resource not found</td><td>The 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.</td></tr><tr><td>404</td><td>404038</td><td>Resource not found</td><td>The collection ID in the URI wasn't found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404041</td><td>Connected app not found</td><td>The requested connected app could not be found.</td></tr></tbody></table>

## 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

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

#### 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/current/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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404041</td><td>Connected app not found</td><td>The requested connected app could not be found.</td></tr><tr><td>404</td><td>404042</td><td>Secret not found</td><td>The requested secret for the connected app could not be found.</td></tr></tbody></table>

## 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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403162</td><td>Unauthorized Access</td><td>The user does not have adminstrator permissions or <b>Read</b> permissions for the custom view..</td></tr><tr><td>404</td><td>404008</td><td>Resource Not Found</td><td>A custom view with the requested LUID could not be found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid Request Method</td><td>Request type was not GET.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>409087</td><td>Permission denied</td><td>The user isn't authorized to view data acceleration tasks.</td></tr><tr><td>403</td><td>409087</td><td>Permission denied</td><td>The user isn't authorized to access the workbook.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404026</td><td>Task not found</td><td>The task id in the URI doesn't correspond to an existing task.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400105</td><td>Generic data quality certification error</td><td>The data quality certification could not be deleted for some reason other than those specified in this table.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

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

#### Request body

```
<tsRequest>
  <contentList>
	<content contentType="content" id="database-id" />
	<content contentType="content" id="table-id" />
	<content contentType="content" id="datasource-id" />
	<content contentType="content" id="virtualconnection-id" />
	<content contentType="content" id="virtualconnectiontable-id" />
  </contentList>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">content</span>
                                    </td>
                                    <td>
                                        <p>The type of content or asset the data quality warning is attached to. To specify type, use one of the following values:</p>
                                        <ul>
                                            <li><span class="api-label">database</span>
                                            </li>
                                            <li><span class="api-label">table</span>
                                            </li>
                                            <li><span class="api-label">datasource</span>
                                            </li>
                                            <li><span class="api-label">virtualconnection</span>
                                            </li>
                                            <li><span class="api-label">virtualconnectiontable</span>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">database-id</span>
                                    </td>
                                    <td>The unique ID of the database asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">table-id</span>
                                    </td>
                                    <td>The unique ID of the table asset.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-id</span>
                                    </td>
                                    <td>The unique ID of the data source content.
</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnection-id</span>
                                    </td>
                                    <td>The unique ID of the virtual connection.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnectiontable-id</span>
                                    </td>
                                    <td>The unique ID of the virtual connection table.</td>
                                </tr>
                            </tbody>
                        </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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400106</td><td>Generic data quality certification error</td><td>The data quality certifications could not be deleted for some reason other than those specified in this table.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The content does not exist.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-id</span>
                                        </td>
                                        <td>The unique ID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-type</span>
                                        </td>
                                        <td>
                                            <p>The type of asset that the data quality warning is being attached to. To specify the type, use:
</p>
                                            <ul>
                                                <li><span class="uicontrol">database</span>
                                                </li>
                                                <li><span class="uicontrol">table</span>
                                                </li>
                                                <li><span class="uicontrol">column</span> <i>- Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)</i></li>
                                                <li><span class="uicontrol">datasource</span>
                                                </li>
                                                <li><span class="uicontrol">flow</span>
                                                </li>
                                                <li><span class="uicontrol">virtualconnection</span>
                                                </li>
                                                <li><span class="uicontrol">virtualconnectiontable</span>
                                                </li>
                                            </ul>
                                            <p>Types are not case sensitive.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-luid</span>
                                        </td>
                                        <td>The LUID of the content (database, table, column, published data source, flow, virtual connection, or virtual connection table).</td>
                                    </tr>
                                </tbody>
                            </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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>409</td><td>400106</td><td>Data quality warning delete error</td><td>An unknown error occurred and the data quality warning could not be deleted.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The requested asset could not be found.</td></tr><tr><td>404</td><td>404030</td><td>Data quality warning not found</td><td>The data quality warning for the requested asset could not be found.</td></tr></tbody></table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400105</td><td>Data quality warning delete error</td><td>An unknown error occurred and the data quality warning could not be deleted.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The requested asset could not be found.</td></tr><tr><td>404</td><td>404030</td><td>Data quality warning not found</td><td>The data quality warning for the requested asset could not be found.</td></tr></tbody></table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Deletion forbidden</td><td>A non-administrator user called this method but doesn't have <span class="api-command-ref">Read</span> (view) and <span class="api-command-ref">Delete</span> permission for the data source.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source in the site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Forbidden favorites access</td><td>A non-administrator user attempted to delete a data source from a different user's favorites.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user</td></tr><tr><td>404</td><td>404010</td><td>Data source not a favorite</td><td>The data source ID in the URI exists but is not a favorite of the specified user.</td></tr><tr><td>404</td><td>404011</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the data source.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">datasource-id</span>
                                            </td>
                                            <td>The ID of the data source to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID of the group to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID of the user to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>
                                    The capability to remove the permission for.
                                    Valid capabilities for a data source are
                                    <span class="api-command-ref">ChangePermissions</span>,
                                    <span class="api-command-ref">Connect</span>,
                                    <span class="api-command-ref">Delete</span>,
                                    <span class="api-command-ref">ExportXml</span>, <span class="api-command-ref">ExtractRefresh</span>, <span class="api-command-ref">Read</span> (view),
                                    <span class="api-command-ref">Write</span>, and
									<span class="api-command-ref">SaveAs</span>.
								</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to
                                    remove the deny permission. This value is case sensitive.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a data source. Valid capabilities for a data source are <span class="api-command-ref">ChangePermissions</span>, <span class="api-command-ref">Connect</span>, <span class="api-command-ref">Delete</span>, <span class="api-command-ref">ExportXml</span>, <span class="api-command-ref">Read</span>, and <span class="api-command-ref">Write</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to set permissions on the data source.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group ID in the URI doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not assigned</td><td>The capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## Delete Data-Driven Alert

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

#### URI

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

#### Parameter Values

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

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

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

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

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

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

#### Request Body

None

#### Response Code

204

#### Response Body

None

#### Version

#### Errors

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

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

#### Example

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

## Delete 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site.</td></tr><tr><td><span class="api-placeholder">database-luid</span></td><td>The LUID of the database asset.</td></tr><tr><td><span class="api-placeholder">user-luid</span></td><td>The LUID of the user to remove the permissions for.</td></tr><tr><td><span class="api-placeholder">group-luid</span></td><td>The LUID of the group to remove the permissions for.</td></tr><tr><td><span class="api-placeholder">capability-name</span></td><td>The explicit permissions capability to remove. Capabilities that can be removed are <b>Read</b>, <b>Write</b>, <b>ChangePermissions</b>, or <b>ChangeHierarchy</b>.</td></tr><tr><td><span class="api-placeholder">capability-mode</span></td><td>The permissions mode to remove. Modes that can be removed are <b>Allow</b> or <b>Deny</b>.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Permissions could not be deleted because support for explicit permissions is available for database assets associated with published data sources only.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>403</td><td>403117</td><td>Database locked</td><td>Permissions for the database asset cannot be deleted because the database asset is locked.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The requested database could not be found.</td></tr><tr><td>409</td><td>409045</td><td>Database error</td><td>An unknown database asset error occurred.</td></tr><tr><td>409</td><td>409051</td><td>Database update forbidden</td><td>A user without "write" permissions to the database asset attempted an update.</td></tr></tbody></table>

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-luid</span>
                                        </td>
                                        <td>The LUID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">database-luid</span>
                                        </td>
                                        <td>The LUID of the database asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">user-luid</span>
                                        </td>
                                        <td>The LUID of the user to remove the default permission for.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">group-id</span>
                                        </td>
                                        <td>The LUID of the group to remove the default permission for.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">capability-name</span>
                                        </td>
                                        <td>
                                            <p>The capability to remove the permissions for.</p>
                                            <p>Valid capabilities for databases are the following:</p>
                                            <ul>
                                                <li><span class="api-command-ref">Read</span> (view)</li>
                                                <li><span class="api-command-ref">Write</span> (edit)</li>
                                                <li><span class="api-command-ref">ChangePermissions</span> (set permissions)</li>
                                                <li><span class="api-command-ref">ChangeHierarchy</span> (move)</li>
                                            </ul>
                                            <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">capability-mode</span>
                                        </td>
                                        <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to remove the deny permission.</td>
                                    </tr>
                                </tbody>
                            </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Permissions could not be deleted because support for explicit permissions is available for database assets associated with published data sources only.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>403</td><td>403117</td><td>Database locked</td><td>Default permissions cannot be deleted because the database asset is locked.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The requested database could not be found.</td></tr><tr><td>409</td><td>409045</td><td>Database error</td><td>An unknown database asset error occurred.</td></tr><tr><td>409</td><td>409051</td><td>Database update forbidden</td><td>A user without "write"&nbsp;permissions to the database asset attempted an update.</td></tr></tbody></table>

## 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/current/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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The LUID of the site that contains the project.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">project-id</span>
                                            </td>
                                            <td>The LUID of the project to remove the default permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The LUID of the group to remove the default permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The LUID of the user to remove default permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>The capability to remove the permissions for.</p>
                                                <p>Valid capabilities for a workbook are
					</p><ul><li><span class="api-command-ref">AddComment</span></li><li><span class="api-command-ref">ChangeHierarchy</span></li><li><span class="api-command-ref">ChangePermissions</span></li><li><span class="api-command-ref">Delete</span></li><li><span class="api-command-ref">ExportData</span></li><li><span class="api-command-ref">ExportImage</span></li><li><span class="api-command-ref">ExportXml</span></li><li><span class="api-command-ref">Filter</span></li><li><span class="api-command-ref">Read</span> (view)</li><li><span class="api-command-ref">ShareView</span></li><li><span class="api-command-ref">ViewComments</span></li><li><span class="api-command-ref">ViewUnderlyingData</span></li><li><span class="api-command-ref">WebAuthoring</span></li><li><span class="api-command-ref">Write</span></li><li><span class="api-command-ref">RunExplainData</span></li><li><span class="api-command-ref">CreateRefreshMetrics</span></li></ul><p></p>
                                                <p>Valid capabilities for a data source are
					</p><ul><li><span class="api-command-ref">ChangePermissions</span></li><li><span class="api-command-ref">Connect</span></li><li><span class="api-command-ref">Delete</span></li><li><span class="api-command-ref">ExportXml</span></li><li><span class="api-command-ref">SaveAs</span></li><li><span class="api-command-ref">Read</span> (view)</li><li><span class="api-command-ref">Write</span></li></ul><p></p>
                                                <p>Valid capabilities for a flow are
					</p><ul><li><span class="api-command-ref">ChangeHierarchy</span></li><li><span class="api-command-ref">ChangePermissions</span></li><li><span class="api-command-ref">Delete</span></li><li><span class="api-command-ref">ExportXml</span> (download)</li><li><span class="api-command-ref">Execute</span></li><li><span class="api-command-ref">Read</span> (view)</li><li><span class="api-command-ref">WebAuthoringForFlows</span></li><li><span class="api-command-ref">Write</span></li></ul><p></p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to                                             remove the deny permission. This value is case sensitive.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permissions to remove permissions for the project.</td></tr><tr><td>403</td><td>403095</td><td>Delete permissions for flows forbidden</td><td>A non-administrator user called this method but doesn't have permissions to remove permissions for the project where the flow is located.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>A user LUID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project LUID in the URI doesn't correspond to an existing project.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group LUID in the URI doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not assigned</td><td>The capability in the URI isn't assigned to the specified user or group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The 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 <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow LUID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <bridgeDomain existingDomainName="example.com" />
</tsRequest>
```

```
{
  "bridgeDomain": {
    "existingDomainName": "example.com"
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">existingDomainName</span></td><td>Required. The domain name to remove from the system.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid domain name or domain not found</td><td>Domain must conform to valid format and must exist in the system.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503907</td><td>Unexpected server error</td><td>An unexpected error occurred while deleting the domain.</td></tr></tbody></table>

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

## 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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404047</td><td>EAS not found</td><td>The requested EAS could not be found.</td></tr></tbody></table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409070</td><td>Invalid request method</td><td>The data source cannot be extracted because it is file based or in another unsupported form.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404026</td><td>Task not found</td><td>The task id in the URI doesn't correspond to an existing extract refresh task.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

The request body is an empty tsRequest element.

              `<tsRequest/>`
              
            

```
{}
```

#### 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 '<tsRequest/>'
```

#### Response Code

204 No Content

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409128</td><td>No extract to delete.</td><td>The virtual connection has no extract. Neither the active revision nor any of its tables has extracts enabled.</td></tr><tr><td>400</td><td>409099</td><td>Unable to delete the extract.</td><td>A generic error occurred while converting the virtual connection to live and deleting its extract.</td></tr><tr><td>403</td><td>409098</td><td>User not authorized to delete the extract.</td><td>The user must be able to see the virtual connection and must have permission to convert its extract to live.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found.</td><td>Check the virtual connection LUID. This error also occurs if the virtual connection has no active revision.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsRequest>
  <datasources includeAll="true"/>
</tsRequest>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409070</td><td>Invalid request method</td><td>The data source cannot be extracted because it is file based or in another unsupported form.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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`

```
<tsResponse>
  <datasources includeAll="true" />
</tsRequest>
```

**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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Deletion forbidden</td><td>A non-administrator user called this method but doesn't have Read (view) and Delete permission for the flow.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Forbidden favorites access</td><td>A non-administrator user attempted to delete a data source from a different user's favorites.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user</td></tr><tr><td>404</td><td>404010</td><td>Flow not a favorite</td><td>The flow ID in the URI exists but is not a favorite of the specified user.</td></tr><tr><td>404</td><td>404027</td><td>Data source not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the flow.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">flow-id</span>
                                            </td>
                                            <td>The ID of the flow to remove the permission for. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID of the group to remove the permission for. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID of the user to remove the permission for. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>The capability to remove the permission for.  Valid capabilities for a flow are:
                  <ul><li><span class="api-command-ref">ChangeHierarchy</span></li><li><span class="api-command-ref">ChangePermissions</span></li><li><span class="api-command-ref">Delete</span></li><li><span class="api-command-ref">Execute</span></li><li><span class="api-command-ref">ExportXml (Download)</span></li><li><span class="api-command-ref">Read (view)</span></li><li><span class="api-command-ref">WebAuthoringForFlows</span></li><li><span class="api-command-ref">Write</span></li></ul><p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to
									remove the deny permission. This value is case sensitive.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a flow. Valid capabilities for a flow are <span class="api-command-ref">ChangeHierarchy</span>, <span class="api-command-ref">ChangePermissions</span>, <span class="api-command-ref">Delete</span>, <span class="api-command-ref">Execute</span>, <span class="api-command-ref">ExportXml (Download)</span>, <span class="api-command-ref">Read (view)</span>, and <span class="api-command-ref">Write</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to set permissions on the flow.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group ID in the URI doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The 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 <span class="api-command-ref">Allow</span>or <span class="api-command-ref">Deny</span>at the end of the URI.</td></tr><tr><td>404</td><td>404013</td><td>Capability not assigned</td><td>The capability in the URI is not assigned to the specified user or group with the specified mode (<span class="api-command-ref">Allow</span>or <span class="api-command-ref">Deny</span>).</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group ID in the URI doesn't correspond to an existing group or the group is not part of the specified site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type wasn’t <span class="api-command-ref">DELETE</span>.</td></tr><tr><td>409</td><td>409120</td><td>Group set not found</td><td>The 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.</td></tr></tbody></table>

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

## 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/current/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/current/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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>400105</td><td>Generic delete label error</td><td>An unknown error occurred. Confirm that the LUID in the URI is correct.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>The URI does not contain a properly-formatted LUID.</td></tr></tbody></table>

## 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/current/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

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

#### 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

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400191</td>
                                    <td>Generic delete label category error</td>
                                    <td>An unknown error occurred.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403004</td>
                                    <td>Operation on resource unauthorized</td>
                                    <td>
                                        <p>You must be an administrator to create, update, or delete label values.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>409</td>
                                    <td>409004</td>
                                    <td>Invalid parameter</td>
                                    <td>
                                        <ul>
                                            <li>The category name in the URI must exist.</li>
                                            <li>The category name can't be one of the built-in categories.
</li>
                                        </ul>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

## 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/current/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/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The unique LUID of the site.</td></tr><tr><td><span class="api-placeholder">category-list</span></td><td>(Optional) A comma-separated list of label value categories used to limit the label deletions to only the listed categories. See <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm" class="xref">Data Labels in the REST&nbsp;API</a> for information on label values and categories.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <contentList>
    <content contentType="asset-type"
      id="asset-luid" />
    <!-- ... additional content elements ... -->
  </contentList>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">asset-type</span>
                                    </td>
                                    <td>
                                        <p>The type of asset.  Valid asset types are:</p>
                                        <ul>
                                            <li><span class="api-command-ref">database</span>
                                            </li>
                                            <li><span class="api-command-ref">table</span>
                                            </li>
                                            <li><span class="api-command-ref">column</span> <i>- Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)</i></li>
                                            <li><span class="api-command-ref">datasource</span>
                                            </li>
                                            <li><span class="api-command-ref">flow</span>
                                            </li>
                                            <li><span class="api-command-ref">virtualconnection</span>
                                            </li>
                                            <li><span class="api-command-ref">virtualconnectiontable</span>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">asset-luid</span>
                                    </td>
                                    <td>The asset LUID.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>400106</td><td>Generic delete labels error</td><td>An unknown error occurred.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Resource not found</td><td>The <span class="api-command-ref">contentType</span> and <span class="api-command-ref">contentID</span> attribute combination does not correspond to an asset on the server. This can be caused by an incorrect <span class="api-command-ref">contentType</span>, an incorrect <span class="api-command-ref">contentID</span>, or both.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The unique LUID of the site asset.</td></tr><tr><td><span class="api-placeholder">label-value-name</span></td><td>The label value name. URL encode the label value name if it has spaces or non-alphanumeric characters in it.</td></tr></tbody></table>

#### 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

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>403 </td>
                                    <td>403004</td>
                                    <td>Operation on resource unauthorized</td>
                                    <td>You must be a site or server administrator to create or update label values.</td>
                                </tr>
                                <tr>
                                    <td>409</td>
                                    <td>409004</td>
                                    <td>Invalid parameter</td>
                                    <td>
                                        <ul>
                                            <li>The label value name in the URI must exist.</li>
                                            <li>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).
</li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td>401</td>
                                    <td>4000173</td>
                                    <td>Generic add labels to content error</td>
                                    <td>An unknown error occurred.</td>
                                </tr>
                            </tbody>
                        </table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Metric not found</td><td>The metric ID in the URI doesn't correspond to an existing metric.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403003</td><td>Deletion forbidden</td><td>You attempted to delete a default project that cannot be deleted.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site LUID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project LUID in the URI doesn't correspond to an existing project or the project is not found on this site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Forbidden favorites access</td><td>A non-administrator user attempted to delete a project from a different user's favorites.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the URI doesn't correspond to an existing project.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the project.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">project-id</span>
                                            </td>
                                            <td>The ID of the project to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID of the group to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID of the user to remove project the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                    The capability to remove the permission for. In Tableau Server 10.0, valid capabilities for a project are
                                        <span class="api-command-ref">ProjectLeader</span>,
                                        <span class="api-command-ref">Read</span> (view), and
                                        <span class="api-command-ref">Write</span>.
                                        <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to
                                    remove the deny permission. This value is case sensitive.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a project. For a list of valid capabilities, see the <span class="api-placeholder">capability-name</span> attribute earlier.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permissions to remove default permissions for the project.</td></tr><tr><td>403</td><td>403004</td><td>Delete forbidden</td><td>A non-administrative user tried to update the project, but does not have permissions to the project.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>A user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the URI doesn't correspond to an existing project.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group ID in the URI doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not assigned</td><td>The capability in the URI isn't assigned to the specified user or group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The 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 <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400138</td><td>Generic quality warning trigger error</td><td>The quality warning trigger could not be deleted for some other reason than those specified below.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404037</td><td>Quality warning not found</td><td>The requested quality warning trigger was not found.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-id</span>
                                        </td>
                                        <td>The unique ID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-type</span>
                                        </td>
                                        <td>
                                            <p>
                            The type of content the quality warning trigger has been applied to. In this case, use one of the following values:
                            </p>
                                            <ul>
                                                <li><span class="uicontrol">datasource</span>
                                                </li>
                                                <li><span class="uicontrol">flow</span>
                                                </li>
                                            </ul>
                                            <p>These values are not case sensitive.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-luid</span>
                                        </td>
                                        <td>
                            The unique ID of the asset. This is the same as the content ID.
                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400138</td><td>Generic quality warning trigger error</td><td>The quality warning trigger could not be deleted for some other reason than those specified below.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404037</td><td>Quality warning not found</td><td>The requested quality warning trigger was not found.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the Recycle Bin.</td></tr><tr><td><span class="api-placeholder">content-type</span></td><td>Content type in plural form: <code>workbooks</code>, <code>datasources</code>, <code>flows</code>, or <code>projects</code>.</td></tr><tr><td><span class="api-placeholder">content-id</span></td><td>The LUID of the Recycle Bin content item to delete.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>Check the request body and query string parameters.</td></tr><tr><td>401</td><td>401000</td><td>No auth credentials</td><td>Check the authorization header.</td></tr><tr><td>401</td><td>401002</td><td>Invalid auth credentials</td><td>Session expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Check user permission.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>Recycle Bin disabled.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404003</td><td>Unknown resource</td><td>Requested content item not found.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>Request type unrecognized for this method.</td></tr><tr><td>406</td><td>406000</td><td>Unacceptable media type</td><td>Bad Accept: header.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>Parameter type-mismatched, unknown content type, or malformed LUID.</td></tr><tr><td>429</td><td>429000</td><td>Too many requests</td><td>Request throttled.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>Unknown error.</td></tr><tr><td>503</td><td>500001</td><td>Internal service error</td><td>Internal service error.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">routing-rule-id</span></td><td>The unique identifier (UUID) of the routing rule to delete.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

204 No Content

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>503909</td><td>Validation failed</td><td>The <span class="api-placeholder">routing-rule-id</span> is not a valid UUID.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>503923</td><td>Permission denied</td><td>Caller is not a site administrator for the site.</td></tr><tr><td>404</td><td>503915</td><td>Routing rule not found</td><td>No routing rule exists with the given ID on this site.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503920</td><td>Unexpected server error</td><td>An unexpected error occurred while deleting the rule.</td></tr></tbody></table>

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

## 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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header is invalid or has expired.</td></tr><tr><td>403</td><td>403182</td><td>Forbidden</td><td>The SCIM&nbsp;configuration can only be deleted by the user who created the SCIM&nbsp;configuration.</td></tr><tr><td>404</td><td>404057</td><td>Resource Not Found</td><td>The SCIM&nbsp;configuration cannot be deleted because it does not exist on this site.</td></tr></tbody></table>

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

## 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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header is invalid or has expired.</td></tr><tr><td>404</td><td>404050</td><td>Resource Not Found</td><td>The SCIM&nbsp;configuration does not have an associated SCIM&nbsp;token.</td></tr><tr><td>404</td><td>404057</td><td>Resource Not Found</td><td>The SCIM&nbsp;configuration ID is not valid.</td></tr></tbody></table>

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

## Delete Server Schedule

Deletes the specified schedule on Tableau Server.  
_For Tableau Cloud, see [Delete Extract Refresh Task](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm#delete_extract_refresh_task) and [Delete Subscription](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#delete_subscription)._

#### URI

DELETE /api/api-version/schedules/schedule-id

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">schedule-id</span></td><td>The ID of the schedule to delete. To determine what schedules are available, call <a href="#query_schedules">List Server Schedules</a>.</td></tr></tbody></table>

#### Request Body

None

#### Permissions

This method can only be called by server administrators.

#### Access Scope

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

```
tableau: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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400059</td><td>Error deleting the schedule.</td><td>An unspecified error occurred during the deletion operation.</td></tr><tr><td>404</td><td>404023</td><td>Schedule not found</td><td>The specified schedule doesn't correspond to an existing schedule on the site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">session-id</span>
                                        </td>
                                        <td>
                                            <p>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.</p>
                                            <p class=".note--important">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 <a href="https://help.tableau.com/current/server/en-us/perf_collect_server_repo.htm">Collect Data with the Tableau Server Repository</a> and <a href="https://github.com/tableau/tableau-data-dictionary">Tableau Server Postgres Data Dictionary</a>.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### Request Body

None.

#### Permissions

This method can only be called by server administrators.

#### Access Scope

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

```
tableau: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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400105</td><td>Session delete error</td><td>An unknown error occurred and the session could not be deleted.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The requested asset could not be found.</td></tr></tbody></table>

## 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/current/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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site to delete.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-name</span>
                                            </td>
                                            <td>The name of the site to delete. If you specify a site name, you must also include the parameter <code>key=name</code>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">content-url</span>
                                            </td>
                                            <td>
                                                <p>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.</p>
                                                <p><code>mySite</code> is the content URL in the following example:</p>
                                                <p><code>http://&lt;server or cloud URL&gt;/#/site/<strong>mySite</strong>/explore</code>
                                                </p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### Request Body

None

#### Permissions

This method can only be called by server administrators.

#### Access Scope

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

```
tableau: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)

```
<tsResponse>
   <job id="job-id"
     mode="mode"
     type="type"
	 progress="progress"
	 createdAt="createdAt"
	 finishCode="finishCode" />
</tsResponse>
```

The `<job>` 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/current/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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403002</td><td>Deletion not allowed.</td><td>An attempt was made to delete the default Tableau Server site.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### 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/current/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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400062</td><td>Error deleting the subscription.</td><td>An unspecified error occurred during the deletion operation.</td></tr><tr><td>401</td><td>401002</td><td>User not authenticated.</td><td>The user making the request has not been authenticated for this site.</td></tr><tr><td>403</td><td>403059</td><td>Delete forbidden.</td><td>A non-administrator user called this method but doesn't have permission to delete the subscription.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site asset.</td></tr><tr><td><span class="api-placeholder">table-luid</span></td><td>The LUID of the table asset.</td></tr><tr><td><span class="api-placeholder">user-luid</span></td><td>The LUID of the user to remove the permissions for.</td></tr><tr><td><span class="api-placeholder">group-luid</span></td><td>The LUID of the group to remove the permissions for.</td></tr><tr><td><span class="api-placeholder">capability-name</span></td><td>The explicit permissions capability to remove. Capabilities that can be removed are <b>Read</b>, <b>Write</b>, <b>ChangePermissions</b>, or <b>ChangeHierarchy</b>.</td></tr><tr><td><span class="api-placeholder">capability-mode</span></td><td>The permissions mode to remove. Modes that can be removed are <b>Allow</b> or <b>Deny</b>.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Permissions could not be deleted because support for explicit permissions is available for table assets associated with published data sources only.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>403</td><td>403117</td><td>Database locked</td><td>Permissions for the table asset cannot be deleted because the database asset is locked.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>409</td><td>409051</td><td>Database update forbidden</td><td>A user without "write" permissions to the database asset attempted an update.</td></tr></tbody></table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404007</td><td>Tag not found</td><td>The tag does not exist.</td></tr><tr><td>409</td><td>409062</td><td>Generic database tag error</td><td>The tag or tags could not be deleted (or added) for some other reason than those specified in this table.</td></tr><tr><td>409</td><td>409066</td><td>Column not found</td><td>The column asset does not exist.</td></tr></tbody></table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400077</td><td>Error deleting tag</td><td>There was a problem deleting the tag from the specified data source.</td></tr><tr><td>403</td><td>403004</td><td>Deleting tags forbidden</td><td>A non-administrator user called this method but doesn't have permission to delete a tag from the specified data source.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404007</td><td>Tag not found</td><td>The tag in the URI doesn't exist for the specified data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404007</td><td>Tag not found</td><td>The tag does not exist.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The database asset does not exist.</td></tr><tr><td>409</td><td>409048</td><td>Generic database tag error</td><td>The tag or tags could not be deleted (or added) for some other reason than those specified above.</td></tr></tbody></table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404007</td><td>Tag not found</td><td>The tag does not exist.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The table asset does not exist.</td></tr><tr><td>409</td><td>409055</td><td>Generic database tag error</td><td>The tag or tags could not be deleted (or added) for some other reason than those specified above.</td></tr></tbody></table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400078</td><td>Error deleting tag</td><td>There was a problem deleting the tag from the specified view.</td></tr><tr><td>403</td><td>403004</td><td>Deleting tags forbidden</td><td>A non-administrator user called this method but doesn't have permission to delete a tag from the specified workbook.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404007</td><td>Tag not found</td><td>The tag in the URI doesn't exist for the specified workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400077</td><td>Error deleting tag</td><td>There was a problem deleting the tag from the specified virtual connection.</td></tr><tr><td>403</td><td>403004</td><td>Deleting tags forbidden</td><td>The user doesn't have permissions to add delete tags from the virtual connection.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Virtual connection not found</td><td>The virtual connection ID in the URI doesn't correspond to an existing virtual connection.</td></tr><tr><td>404</td><td>404007</td><td>Tag not found</td><td>The tag in the URI doesn't exist for the specified virtual connection.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400051</td><td>Error deleting tag</td><td>There was a problem deleting the tag from the specified workbook.</td></tr><tr><td>403</td><td>403004</td><td>Deleting tags forbidden</td><td>A non-administrator user called this method but doesn't have permission to delete a tag from the specified workbook.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404007</td><td>Tag not found</td><td>The tag in the URI doesn't exist for the specified workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## Delete User from Data-Driven Alert

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

#### URI

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

#### Parameter Values

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

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

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

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

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

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

#### Request Body

None

#### Response Code

204

#### Response Body

None

#### Version

#### Errors

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

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

#### Example

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

## Delete 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

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

#### 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/current/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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request payload is missing or incomplete, or contains malformed XML.</td></tr><tr><td>500</td><td>500000</td><td>Internal Server Error</td><td>The request could not be completed.</td></tr></tbody></table>

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

#### Example

```
curl -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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400212</td><td>Generic error</td><td>An unknown error occurred. Try again.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Insufficient permissions to perform the operation. Confirm you have <span class="uicontrol">Read</span> and <span class="uicontrol">Delete</span> permissions for the view.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site. Confirm the site ID.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the URI doesn't correspond to an existing view. Confirm the view ID.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>The HTTP request method was wrong. Confirm you're using the HTTP <span class="api-command-ref">DELETE</span> method.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Forbidden Favorites access</td><td>A non-administrator user attempted to delete a view from a different user's favorites.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user</td></tr><tr><td>404</td><td>404010</td><td>View not a favorite</td><td>The view ID in the URI exists but is not a favorite of the specified user.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the URI doesn't correspond to an existing view</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the view.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">view-id</span>
                                            </td>
                                            <td>The ID of the view to delete permissions for. You can obtain this ID by calling <a href="#query_views_for_site">Query Views for Site</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID of the group to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID of the user to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>The capability to remove the permission for.</p>
                                                <p>The valid capabilities for a view are
                                        <span class="api-command-ref">AddComment</span>,
                                        <span class="api-command-ref">ChangePermissions</span>,
                                        <span class="api-command-ref">Delete</span>,
                                        <span class="api-command-ref">ExportData</span>,
                                        <span class="api-command-ref">ExportImage</span>,
                                        <span class="api-command-ref">ExportXml</span>,
                                        <span class="api-command-ref">Filter</span>,
                                        <span class="api-command-ref">Read</span> (view),
                                        <span class="api-command-ref">ShareView</span>,
                                        <span class="api-command-ref">ViewComments</span>,
                                        <span class="api-command-ref">ViewUnderlyingData</span>,
                                        <span class="api-command-ref">WebAuthoring</span>, and
                                        <span class="api-command-ref">Write</span>.</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to
                                    remove the deny permission.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a view.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to delete permissions on the view.</td></tr><tr><td>403</td><td>403039</td><td>Project permissions locked</td><td>The parent project that contains the specified view has its permissions locked.</td></tr><tr><td>403</td><td>403096</td><td>Parent workbook tabs enabled</td><td>The specified view currently has permissions inherited from its parent workbook. View permission can be deleted if the parent workbook has its tabs disabled.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn’t correspond to an existing user.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the URI doesn't correspond to an existing view.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group ID in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The 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 <b>Allow</b> or <b>Deny</b>).</td></tr><tr><td>404</td><td>404014</td><td>Capability not assigned</td><td>The capability in the URI is not assigned to the specified user or group with the specified mode (<b>Allow</b> or <b>Deny</b>).</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>User not authorized.</td><td>Check to make sure the user has the required permissions.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found</td><td>Check the virtual connection LUID.</td></tr><tr><td>409</td><td>409122</td><td>Generic error</td><td>An unknown error occurred.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the virtual connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">virtualconnection-id</span>
                                            </td>
                                            <td>The ID of the virtual connection to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The LUID of the group to remove the permission for. A request does not need to include both a user and a group grantee.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The LUID of the user to remove the permission for. A request does not need to include both a user and a group grantee.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>
                                    The capability to remove the permission for.
                                    Valid capabilities for a virtual connection are
                       <span class="api-command-ref">Read</span>,
                       <span class="api-command-ref">Connect</span>,
                       <span class="api-command-ref">Overwrite</span>,
                       <span class="api-command-ref">ChangeHierarchy</span>,
					   <span class="api-command-ref">Delete</span>, and
					   <span class="api-command-ref">ChangePermissions</span>.
					</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to
                                    remove the deny permission.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The specified capability is invalid for a virtual connection. Valid capabilities for a virtual connection are <span class="api-command-ref">Read</span>, <span class="api-command-ref">Connect</span>, <span class="api-command-ref">Overwrite</span>, <span class="api-command-ref">ChangeHierarchy</span>, <span class="api-command-ref">Delete</span>, and <span class="api-command-ref">ChangePermissions</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>The user tried to change permissions for a virtual connection but doesn't have the permission to change them.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user specified in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group ID in the URI doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not assigned</td><td>The capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).</td></tr><tr><td>404</td><td>404014</td><td>Capability not found</td><td>A 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 <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr><tr><td>400</td><td>409004</td><td>Invalid LUID</td><td>The virtual connection LUID in the URI was not found.</td></tr></tbody></table>

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

#### Example

`curl --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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (<code>authUser.getSiteLuid()</code>).</td></tr><tr><td><span class="api-placeholder">workcopy-luid</span></td><td>The LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching <code>[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}</code>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <tdsElementList>
    <elementType>FieldDescription</elementType>
    <name>Sales</name>
  </tdsElementList>
  <tdsElementList>
    <elementType>TableDescription</elementType>
    <name>Orders</name>
  </tdsElementList>
</tsRequest>
```

```
{
  "tdsElementList": [
    {
      "elementType": "FieldDescription",
      "name": "Sales"
    },
    {
      "elementType": "TableDescription",
      "name": "Orders"
    }
  ]
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsElementList[]</span></td><td>Required. Elements to delete. Must contain at least one element. An empty or missing list is HTTP 400 with error code <code>400008</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].elementType</span></td><td>Required for this method. Element type of the element to delete (<code>Column</code>, <code>FieldDescription</code>, or <code>TableDescription</code>). Any other value is forwarded and reported as a per-element failure.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].name</span></td><td>Required. Name of the element to delete.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column</span></td><td>Not applicable to this method. Delete uses <code>elementType</code> and <code>name</code> only; other content is ignored.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].description</span></td><td>Not applicable to this method. Delete uses <code>elementType</code> and <code>name</code> only; other content is ignored.</td></tr></tbody></table>

#### 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.

```
<tsResponse/>
```

```
{}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsElementResult[]</span></td><td>Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].elementType</span></td><td>Required. Element type of the failed element, copied from the request.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].name</span></td><td>Required. Name of the failed element, copied from the request.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status</span></td><td>Required. Failure status for this element.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status.code</span></td><td>Required (within <code>status</code>). The translated HTTP status for this element (200, 400, 401, 403, 404, 500, or 503). Not a Tableau 6-digit error sub-code.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status.message</span></td><td>Optional. Error message from the TDS service.</td></tr></tbody></table>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Missing tdsElementList</td><td><code>tdsElementList</code> is missing or empty. The list is required and must contain at least one element.</td></tr><tr><td>400</td><td></td><td>Invalid work copy LUID</td><td>The work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).</td></tr><tr><td>400</td><td></td><td>Per-element invalid argument</td><td>One or more elements were rejected as invalid. The body lists only the failed elements, and each <code>status.code</code> is the HTTP status 400.</td></tr><tr><td>400</td><td></td><td>Unmapped per-element gRPC status</td><td>The TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>401</td><td></td><td>Per-element unauthenticated</td><td>The TDS service rejected an element as unauthenticated. The body lists only the failed elements.</td></tr><tr><td>403</td><td>403004</td><td>Data Management Bundle not licensed</td><td>On Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.</td></tr><tr><td>403</td><td>403004</td><td>Unable to resolve tenant</td><td>On Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.</td></tr><tr><td>403</td><td>403004</td><td>No cloud entitlements</td><td>On Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td>403004</td><td>Subscription not entitled</td><td>On Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td></td><td>Per-element permission denied</td><td>The TDS service rejected an element because permission was denied. The body lists only the failed elements.</td></tr><tr><td>404</td><td></td><td>Per-element not found</td><td>One 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.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The HTTP method is not supported for this resource.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td></td><td>Per-element internal error</td><td>The TDS service failed while editing an element. The body lists only the failed elements.</td></tr><tr><td>503</td><td></td><td>Per-element unavailable</td><td>The TDS service was unavailable while editing an element. The body lists only the failed elements.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Access to Favorites forbidden</td><td>A non-administrator user attempted to delete a workbook from a different user's favorites.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404010</td><td>Workbook not a favorite</td><td>The workbook ID in the URI exists but belongs to a different user.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the workbook.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">workbook-id</span>
                                            </td>
                                            <td>The ID of the workbook to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID of the group to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID of the user to remove the permission for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>
                The capability to remove the permission for.
                Valid capabilities for a workbook are
                    <span class="api-command-ref">AddComment</span>,
                    <span class="api-command-ref">ChangeHierarchy</span>,
                    <span class="api-command-ref">ChangePermissions</span>,
                    <span class="api-command-ref">Delete</span>,
                    <span class="api-command-ref">ExportData</span>,
                    <span class="api-command-ref">ExportImage</span>,
                    <span class="api-command-ref">ExportXml</span>,
<span class="api-command-ref">ExtractRefresh</span>, <span class="api-command-ref">Filter</span>,
                    <span class="api-command-ref">Read</span> (view),
                    <span class="api-command-ref">ShareView</span>,
                    <span class="api-command-ref">ViewComments</span>,
                    <span class="api-command-ref">ViewUnderlyingData</span>,
					<span class="api-command-ref">WebAuthoring</span>,
					<span class="api-command-ref">Write</span>,
					<span class="api-command-ref">RunExplainData</span>, and
					<span class="api-command-ref">CreateRefreshMetrics</span>.
				</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-mode</span>
                                            </td>
                                            <td><span class="api-command-ref">Allow</span> to remove the allow permission, or <span class="api-command-ref">Deny</span> to
                                    remove the deny permission. This value is case sensitive.
                                </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are <span class="api-command-ref">AddComment</span>, <span class="api-command-ref">ChangeHierarchy</span>, <span class="api-command-ref">ChangePermissions</span>, <span class="api-command-ref">Delete</span>, <span class="api-command-ref">ExportData</span>, <span class="api-command-ref">ExportImage</span>, <span class="api-command-ref">ExportXml</span>, <span class="api-command-ref">Filter</span>, <span class="api-command-ref">Read</span>, <span class="api-command-ref">Share_view</span>, <span class="api-command-ref">ViewComments</span>, <span class="api-command-ref">ViewUnderlyingData</span>, <span class="api-command-ref">WebAuthoring</span>, and <span class="api-command-ref">Write</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to delete permissions from the workbook.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group ID in the URI doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The 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 <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> at the end of the URI.</td></tr><tr><td>404</td><td>404013</td><td>Capability not assigned</td><td>The capability in the URI is not assigned to the specified user or group with the specified mode (Allow or Deny).</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the data source.</td></tr><tr><td><span class="api-placeholder">datasource-id</span></td><td>The ID of the data source to download.</td></tr><tr><td><span class="api-placeholder">extract-value</span></td><td>(Optional) The <span class="api-placeholder">extract-value</span> is a Boolean value (<code>False</code> or <code>True</code>). When the data source specified for download has an extract, if you add the parameter <code>?includeExtract=False</code>, 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.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403028</td><td>Read forbidden</td><td>A non-administrator user attempted to download a data source, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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

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

#### Request Body

```
<tsRequest>
  <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace>
  <destinationSiteLuid>d56023b5-8f8b-4241-aa74-8974ced85827</destinationSiteLuid>
  <destinationServerUrl>http://example.com</destinationServerUrl>
</tsRequest>
```

```
{
  "destinationSiteUrlNamespace": "site1",
  "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827",
  "destinationServerUrl": "http://localhost"
}
```

#### Request Attributes

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>destinationSiteUrlNamespace</code>
                                            </td>
                                            <td>
                                                <p>
								(Required) The site name on Tableau Cloud.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationSiteLuid</code>
                                            </td>
                                            <td>(Required) &nbsp;The site ID on Tableau Cloud.</td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationServerUrl</code>
                                            </td>
                                            <td>
                                                <p>(Required) The destination Tableau Cloud URL.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<tsRequest> <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace><destinationSiteLuid>9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d</destinationSiteLuid><destinationServerUrl>http://example.com</destinationServerUrl></tsRequest>"
```

#### Response Code

200

#### Response Body

```
<tsResponse>
   <associatedUserLuidList/>
   <encryptedKeychainList>
     <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=</encryptedKeychain>
   </encryptedKeychainList>
</tsResponse>
```

```
{
  "associatedUserLuidList": [],
  "encryptedKeychainList": {
    "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y="
  }
}
```

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad Request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>401</td>
                                    <td>401002</td>
                                    <td>Unauthorized Access</td>
                                    <td>
                                        <p>The authentication token provided in the request header was invalid or has expired.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403054</td>
                                    <td>Unauthorized Access</td>
                                    <td>A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Site not found</td>
                                    <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404004
                    </td>
                                    <td>Data source not found</td>
                                    <td>The data source ID in the URI doesn't correspond to an existing data source.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                </tr>
                            </tbody>
                        </table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the data source.</td></tr><tr><td><span class="api-placeholder">datasource-id</span></td><td>The ID of the data source to download.</td></tr><tr><td><span class="api-placeholder">revision-number</span></td><td>The revision number of the data source to download. To determine what versions are available, call <a href="#get_data_source_revisions">Get Data Source Revisions</a>.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403028</td><td>Read forbidden</td><td>A non-administrator user attempted to download a data source, but the caller doesn't have required permissions.</td></tr><tr><td>403</td><td>403053</td><td>Version history not enabled</td><td>version history is not enabled for the specified site.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404024</td><td>Data source revision not found</td><td>The revision number in the URI doesn't correspond to an existing data source revision.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## Download Flow

Downloads a flow in .tfl or .tflx format.

#### URI

GET /api/api-version/sites/site-id/flows/flow-id/content

#### Parameter Values

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403097</td><td>Read forbidden</td><td>A non-administrator user attempted to download a flow, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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

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

#### Request Body

```
<tsRequest>
  <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace>
  <destinationSiteLuid>d56023b5-8f8b-4241-aa74-8974ced85827</destinationSiteLuid>
  <destinationServerUrl>http://localhost</destinationServerUrl>
</tsRequest>
```

```
{
  "destinationSiteUrlNamespace": "site1",
  "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827",
  "destinationServerUrl": "http://localhost"
}
```

#### Request Attributes

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>destinationSiteUrlNamespace</code>
                                            </td>
                                            <td>
                                                <p>
								(Required) The site name on the destination site.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationSiteLuid</code>
                                            </td>
                                            <td>(Required) &nbsp;The site LUID of the destination site.</td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationServerUrl</code>
                                            </td>
                                            <td>
                                                <p>(Required) The destination Tableau Server or Tableau Cloud URL.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<tsRequest><destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace>    <destinationSiteLuid>9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d</destinationSiteLuid><destinationServerUrl>http://localhost</destinationServerUrl></tsRequest>"
```

#### Response Code

200

#### Response Body

```
<tsResponse>
   <associatedUserLuidList/>
   <encryptedKeychainList>
     <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=</encryptedKeychain>
   </encryptedKeychainList>
</tsResponse>
```

```
{
  "associatedUserLuidList": [],
  "encryptedKeychainList": {
    "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y="
  }
}
```

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad Request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>401</td>
                                    <td>401002</td>
                                    <td>Unauthorized Access</td>
                                    <td>
                                        <p>The authentication token provided in the request header was invalid or has expired.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403054</td>
                                    <td>Unauthorized Access</td>
                                    <td>A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Site not found</td>
                                    <td>The site LUID in the URI doesn't correspond to an existing site.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404004
                    </td>
                                    <td>Flow not found</td>
                                    <td>The flow LUID in the URI doesn't correspond to an existing flow.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                </tr>
                            </tbody>
                        </table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace>
  <destinationSiteLuid>d56023b5-8f8b-4241-aa74-8974ced85827</destinationSiteLuid>
  <destinationServerUrl>http://example.com</destinationServerUrl>
</tsRequest>
```

```
{
  "destinationSiteUrlNamespace": "site1",
  "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827",
  "destinationServerUrl": "http://localhost"
}
```

#### Request Attributes

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>destinationSiteUrlNamespace</code>
                                            </td>
                                            <td>
                                                <p>
								(Required) The site name on Tableau Cloud.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationSiteLuid</code>
                                            </td>
                                            <td>(Required) &nbsp;The site ID on Tableau Cloud.</td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationServerUrl</code>
                                            </td>
                                            <td>
                                                <p>(Required) The destination Tableau Cloud URL.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<tsRequest>   <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace>    <destinationSiteLuid>9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d</destinationSiteLuid>   <destinationServerUrl>http://example.com</destinationServerUrl>  </tsRequest>"
```

#### Response Code

200

#### Response Body

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://tableau.com/api https://help.tableau.com/samples/en-us/rest_api/ts-api_3_24.xsd">
    <associatedUserLuidList/>
    <encryptedKeychainList>
        <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=
        <encryptedKeychain>
	</encryptedKeychainList>
</tsResponse>
```

```
{
  "associatedUserLuidList": [],
  "encryptedKeychainList": {
    "encryptedKeychain": "BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y="
  }
}
```

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad Request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>401</td>
                                    <td>401002</td>
                                    <td>Unauthorized Access</td>
                                    <td>
                                        <p>The authentication token provided in the request header was invalid or has expired.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403054</td>
                                    <td>Unauthorized Access</td>
                                    <td>A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Site not found</td>
                                    <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404002
                    </td>
                                    <td>User not found</td>
                                    <td>The user ID in the URI doesn't correspond to an existing user.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                </tr>
                            </tbody>
                        </table>

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

## 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/current/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\_<fieldname>=_filter-value_

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook.</td></tr><tr><td><span class="api-placeholder">view-id</span></td><td>The ID of the view to use as the source of the crosstab to be downloaded as an <code>.xlsx</code> file.</td></tr><tr><td><span class="api-placeholder">max-age-minutes</span></td><td>(Optional) The maximum number of minutes an <code>.xlsx</code> file will be cached on the server before being refreshed. To prevent multiple <code>.xlsx</code> 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.</td></tr><tr><td><span class="api-placeholder">filter-value</span></td><td>The value of the field that you want to use to filter the workbook view. For example, a workbook with the filter <code>/excel?vf_year=2017</code> would only display data from the year 2017. To learn more, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views">View filter queries</a>.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400101</td>
                                            <td>Unknown error</td>
                                            <td>
                                                <p>There was a problem downloading or querying this file.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400130</td>
                                            <td>Unknown error</td>
                                            <td>
                                                <p>The view ID in the URI doesn't correspond to a view available on the specified site.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>401</td>
                                            <td>4001XX</td>
                                            <td>Unauthorized</td>
                                            <td>
                                                <p>The authentication token for the request is missing, invalid, or expired.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>4031XX</td>
                                            <td>Unauthorized</td>
                                            <td>
                                                <p>A user attempted to download a .xlsx file without <span class="api-command-ref">Read</span> and/or
								<span class="api-command-ref">ExportData</span> permissions for the workbook or view, and is not an administrator. </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404xxx</td>
                                            <td>Site or view not found</td>
                                            <td>The site or view specified in the request could not be found.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">GET</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### Example

`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/current/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/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID of the site that contains the virtual connection.</td></tr><tr><td><span class="api-placeholder">virtualconnection-id</span></td><td>The LUID of the virtual connection to download. To get the LUID, use <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#list_virtual_connections">List Virtual Connections</a>.</td></tr></tbody></table>

Unlike [Download Data Source](https://help.tableau.com/current/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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400200</td><td>Download virtual connection error</td><td>The virtual connection ID is not a valid ID, or the .tvcx file could not be built.</td></tr><tr><td>403</td><td>403174</td><td>Download virtual connection forbidden</td><td>The user does not have permission to download the virtual connection.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found</td><td>The virtual connection does not exist.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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/current/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

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

#### 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

```
<tsResponse>
  <virtualConnection name="virtualconnection-name">
    <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e"/>
    <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
    <content>virtualconnection-as-json</content>
  </virtualConnection>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400200</td><td>Generic error</td><td>An unknown error occurred.</td></tr><tr><td>403</td><td>403174</td><td>User not authorized.</td><td>Check to make sure the user has the required permissions.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found</td><td>Check the virtual connection LUID.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">virtualconnection-id</span></td><td>The LUID for the virtual connection.</td></tr><tr><td><span class="api-placeholder">revision-number</span></td><td>The revision number (revisionNumber) of the virtual connection, as returned by the <a href="#get_virtual_connection_revisions">Get Virtual Connection Revisions</a> method. This is an integer, not a LUID.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <virtualConnection name="virtualconnection-name">
    <project id="project-id"/>
    <owner id="owner-id"/>
    <content>virtualconnection-as-json</content>
  </virtualConnection>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400200</td><td>Generic error</td><td>An unknown error occurred. Check to make sure the revision number is a revision and not the active virtual connection.</td></tr><tr><td>403</td><td>403174</td><td>User not authorized.</td><td>Check to make sure the user has the required permissions.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found</td><td>Check the virtual connection LUID. Check that the revision number exists.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook to download.</td></tr><tr><td><span class="api-placeholder">extract-value</span></td><td>(Optional) The <span class="api-placeholder">extract-value</span> is a Boolean value (<code>False</code> or <code>True</code>). When the workbook specified for download has an extract, if you add the parameter <code>?includeExtract=False</code>, 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.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403019</td><td>Read forbidden</td><td>A non-administrator user attempted to download a workbook, but the caller doesn't have <span class="api-command-ref">ExportXml</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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

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

#### Request Body

```
<tsRequest>
  <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace>
  <destinationSiteLuid>d56023b5-8f8b-4241-aa74-8974ced85827</destinationSiteLuid>
  <destinationServerUrl>http://localhost</destinationServerUrl>
</tsRequest>
```

```
{
  "destinationSiteUrlNamespace": "site1",
  "destinationSiteLuid": "d56023b5-8f8b-4241-aa74-8974ced85827",
  "destinationServerUrl": "http://localhost"
}
```

#### Request Attributes

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>destinationSiteUrlNamespace</code>
                                            </td>
                                            <td>
                                                <p>
								(Required) The site name on Tableau Cloud.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationSiteLuid</code>
                                            </td>
                                            <td>(Required) &nbsp;The site ID on Tableau Cloud.</td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationServerUrl</code>
                                            </td>
                                            <td>
                                                <p>(Required) The destination Tableau Cloud URL.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<tsRequest>   <destinationSiteUrlNamespace>site1</destinationSiteUrlNamespace>    <destinationSiteLuid>9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d</destinationSiteLuid>   <destinationServerUrl>http://example.com</destinationServerUrl>  </tsRequest>"
```

#### Response Code

200

#### Response Body

```
<tsResponse>
   <associatedUserLuidList/>
   <encryptedKeychainList>
     <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyKgNw5FnJud0etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/py5okFzVW4wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oCS5wRNtJ6lGz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1L2q9VyhVr8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKhsBZyFrVY7Wtf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ13hV0jXW7nXUhfIW7o5iUtbYWrpCvVwubZLf4U5Y=</encryptedKeychain>
   </encryptedKeychainList>
</tsResponse>
```

```
{
  "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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the workbook.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">workbook-id</span>
                                            </td>
                                            <td>The ID of the workbook to use as the source of the .pdf file to be downloaded.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">max-age-minutes</span>
                                            </td>
                                            <td>(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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">orientation</span>
                                            </td>
                                            <td>(Optional) The orientation of the pages in the .pdf file produced. The value can be
								<code>Portrait</code>
								or <code>Landscape</code>. If this parameter is not present the page orientation will default to <code>Portrait</code>.
							</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">page-type</span>
                                            </td>
                                            <td>
                                                <p>(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be:
								<code>A3</code>,
								<code>A4</code>,
								<code>A5</code>,
								<code>B5</code>,
								<code>Executive</code>,
								<code>Folio</code>,
								<code>Ledger</code>,
								<code>Legal</code>,
								<code>Letter</code>,
								<code>Note</code>,
								<code>Quarto</code>,
								or <code>Tabloid</code>.</p>
                                                <p>If this parameter is not present the page type will default to <code>Legal</code>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><i>fieldname</i>=<i>filter-value</i></td>
                                            <td>
                                                <p><span style="font-weight: normal;font-style: italic;"> Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later:</span>
                                                </p>
                                                <p>(Optional) An expression that applies a granular filter to the request. Returns will be based on the value (<i>filtervalue</i>) of the dimension or measure (<i>fieldname</i>) of your view data you specify. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views">View filter queries</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">viz-height</span>
                                            </td>
                                            <td>(Optional) The height of the rendered pdf image in pixels that, along with the value of <code>vizWidth</code>, determines its resolution and aspect ratio.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">viz-width</span>
                                            </td>
                                            <td>(Optional) The width of the rendered pdf image in pixels that, along with the value of <code>vizHeight</code>, determines its resolution and aspect ratio.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400101</td>
                                            <td>Unknown error</td>
                                            <td>
                                                <p>There was a problem downloading or querying this workbook.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403004</td>
                                            <td>Unauthorized</td>
                                            <td>
                                                <p>A non-administrator user attempted to download a pdf, but they don't have <span class="api-command-ref">Read</span> and/or <span class="api-command-ref">ExportImage</span> permissions for the workbook
								or user does not have <span class="api-command-ref">Read</span> permissions for the views of the workbook.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403105</td>
                                            <td>Unauthorized</td>
                                            <td>
                                                <p>The PDF export feature is disabled on the server or the server is not configured to allow PDF exports using the REST API.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID  in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404006</td>
                                            <td>Workbook not found</td>
                                            <td>The workbook ID in the URI doesn't correspond to an existing workbook.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">GET</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook to use as the source of the <code>.pptx</code> file to be downloaded.</td></tr><tr><td><span class="api-placeholder">max-age-minutes</span></td><td>(Optional) The maximum number of minutes a workbook <code>.pptx</code> will be cached before being refreshed. To prevent multiple <code>.pptx</code> 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.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400101</td>
                                            <td>Unknown error</td>
                                            <td>
                                                <p>There was a problem downloading or querying this workbook.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>401</td>
                                            <td>4001XX</td>
                                            <td>Unknown error</td>
                                            <td>
                                                <p>There was a problem downloading or querying this workbook.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>4031XX</td>
                                            <td>Unauthorized</td>
                                            <td>
                                                <p>A non-administrator user attempted to download a .pptx file, but they don't have <span class="api-command-ref">Read</span> and/or <span class="api-command-ref">ExportImage</span> permissions for the workbook
								or user does not have <span class="api-command-ref">Read</span> permissions for the views of the workbook.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403105</td>
                                            <td>Unauthorized</td>
                                            <td>
                                                <p>The PowerPoint export feature is disabled on the server or the server is not configured to allow PowerPoint exports using the REST API.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID  in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404006</td>
                                            <td>Workbook not found</td>
                                            <td>The workbook ID in the URI doesn't correspond to an existing workbook.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">GET</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

#### Example

`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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook to download.</td></tr><tr><td><span class="api-placeholder">revision-number</span></td><td>The revision number of the workbook to download. To determine what versions are available, call <a href="#get_workbook_revisions">Get Workbook Revisions</a>. Note that the current revision of a workbook cannot be accessed by this call; use <a href="#download_workbook">Download Workbook</a> instead.</td></tr><tr><td><span class="api-placeholder">extract-value</span></td><td>(Optional) The <span class="api-placeholder">extract-value</span> is a Boolean value (<code>False</code> or <code>True</code>). When the workbook specified for download has an extract, if you add the parameter <code>?includeExtract=False</code>, 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.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403053</td><td>Version history not enabled</td><td>version history is not enabled for the specified site.</td></tr><tr><td>403</td><td>403019</td><td>Read forbidden</td><td>A non-administrator user attempted to download a workbook, but the caller doesn't have required permissions.</td></tr><tr><td>404</td><td>404024</td><td>Workbook revision not found</td><td>The revision number in the URI doesn't correspond to an existing data source revision.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

## 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/<site-id>/webhooks/<webhook-id>

#### Parameter Values

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

#### Request Body

None

#### Permissions

This method can only be called by server administrators.

#### Access Scope

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

```
tableau:webhooks:read
```

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

#### Response Code

200

#### Response Body

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">bridge-client-id</span></td><td>The unique identifier for the Bridge client to retrieve.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
  <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" />
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>404</td><td>503001</td><td>Bridge client not found</td><td>Bridge client with the specified ID does not exist on this site.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503002</td><td>Unexpected server error</td><td>An unexpected error occurred while retrieving the Bridge client.</td></tr></tbody></table>

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

## 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

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

#### 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:

- `<secret>`: 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>`: Name of the connected app.
- `<enabled>`: Whether the connected app is enabled or not.
- `<clientId>`: The ID of the connected app.
- `<projectId>:` The project that the connected app's access level is scoped to.
- `<domainSafelist>:` If specified, one or more domains that the connected app is allowed to be hosted on.
- `<unrestrictedEmbedding>`: Whether the connected app can be hosted on all domains. If `false` is returned, the `<domainSafelist>` attribute determines the domain access.

**Example response:**

```
<tsResponse>
  <connectedApplications>
	<connectedApplication>
	  <secret>
		<id>7ecc5c7c-d923-4ffd-917b-cab1bd89f03b</id>
		<createdAt>2021-08-10T18:48:40Z</createdAt>
	  </secret>
	  <name>ConnectedApp_MyCo</name>
	  <enabled>true</enabled>
	  <clientId>ac95d175-c844-4779-9d58-415e01fe7dab</clientId>
	  <projectIds>
		<projectId>1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e</projectId>
		<projectId>1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e</projectId>
	  </projectIds>
	  <createdAt>2021-08-10T18:46:30Z</createdAt>
	  <unrestrictedEmbedding>false</unrestrictedEmbedding>
	</connectedApplication>
  <connectedApplications>
</tsResponse>
```

#### Version

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

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404041</td><td>Connected app not found</td><td>The requested connected app could not be found.</td></tr></tbody></table>

## 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

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

#### 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:

- `<value>`: The token value of the secret.
- `<id>:` The ID of the secret.

**Example response:**

```
<tsResponse>
  <connectedApplicationSecret>
	<value>TO7/wkW+45U001IBtyNbtyIMYQ/GBM0XlRXqsgYqPlY=</value>
	<id>7ecc5c7c-d923-4ffd-917b-cab1bd89f03b</id>
	<createdAt>2021-08-10T18:48:40Z</createdAt>
  </connectedApplicationSecret>
</tsResponse>
```

#### Version

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

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404041</td><td>Connected app not found</td><td>The requested connected app could not be found.</td></tr><tr><td>404</td><td>404042</td><td>Secret not found</td><td>The requested secret for the connected app could not be found.</td></tr></tbody></table>

## 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

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

#### Request Body

None

#### Permissions

This method can be called by all authenticated users.

#### Response Code

200

#### Response Body

```
<tsResponse">
  <session>
	<site id="a946d998-2ead-4894-bb50-1054a91dcab3"
  	  name="site-name"
	  contentUrl=""
      adminMode="admin-mode"
      disableSubscriptions="disable-subscription-flag"
      state="state"
      revisionHistoryEnabled="revision-history-enabled-flag"
	  subscribeOthersEnabled="subscribe-others-enabled-flag"
	  guestAccessEnabled="guest-access-enabled-flag"
	  cacheWarmupEnabled="cache-warmup-enabled-flag [REMOVED IN API 3.19]"
	  editingFlowsEnabled="editing-flows-enabled-flag"
      schedulingFlowsEnabled="scheduling-flows-enabled-flag"
	  extractEncryptionMode="extract-encryption-mode"
	  mobileBiometricsEnabled="mobile-biometrics-enabled-flag"
	  sheetImageEnabled="sheetimage-enabled-flag"
	  catalogingEnabled="catalog-enabled-flag"
	  derivedPermissionsEnabled="true"/>
    <user authSetting="ServerDefault"
	  externalAuthUserId=""
	  id="cdfe8548-84c8-418e-9b33-2c0728b2398a"
	  lastLogin="2020-04-29T04:59:08Z"
	  name="workgroupuser"
	  siteRole="ServerAdministrator"/>
 </session>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example Response

```
<tsResponse">
  <session>
    <site id="a946d998-2ead-4894-bb50-1054a91dcab3"
	  name="Default"
	  contentUrl="" adminMode="ContentAndUsers"
	  disableSubscriptions="false"
	  state="Active"
	  revisionHistoryEnabled="true"
	  subscribeOthersEnabled="true"
	  guestAccessEnabled="false"
	  cacheWarmupEnabled="true" [REMOVED IN API 3.19]
      editingFlowsEnabled="false"
      schedulingFlowsEnabled="false"
	  extractEncryptionMode="enabled"
	  mobileBiometricsEnabled="false"
	  sheetImageEnabled="true"
	  catalogingEnabled="true"
	  derivedPermissionsEnabled="true"/>
    <user authSetting="ServerDefault"
	  externalAuthUserId=""
	  id="cdfe8548-84c8-418e-9b33-2c0728b2398a"
	  lastLogin="2020-04-29T04:59:08Z"
	  name="workgroupuser"
	  siteRole="ServerAdministrator"/>
  </session>
</tsResponse>
```

## 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

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

#### 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

```
<tsResponse >
  <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"/>
  </customView>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403162</td><td>Unauthorized Access</td><td>The user does not have adminstrator permissions or <b>Read</b> permissions for the custom view..</td></tr><tr><td>404</td><td>404008</td><td>Resource Not Found</td><td>A custom view with the requested LUID could not be found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid Request Method</td><td>Request type was not GET.</td></tr></tbody></table>

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

## 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/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the view.</td></tr><tr><td><span class="api-placeholder">custom-view-luid</span></td><td>The ID of the view to render as data.</td></tr><tr><td><span class="api-placeholder">max-age-minutes</span></td><td>(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.</td></tr><tr><td><i>fieldname</i>=<i>filter-value</i></td><td>(Optional) An expression that applies a granular filter to the request. Returns will be based on the value (<i>filtervalue</i>) of the dimension or measure (<i>fieldname</i>) of your view data you specify. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views">View filter queries</a>.</td></tr></tbody></table>

#### 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

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400080</td>
                                            <td>Bad Request</td>
                                            <td>The view ID in the URI doesn't correspond to a view available on the specified site.</td>
                                        </tr>
                                        <tr>
                                            <td>401</td>
                                            <td>401002</td>
                                            <td>Unauthorized</td>
                                            <td>The authentication token provided in the request header was invalid or has expired.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403032</td>
                                            <td>Read forbidden</td>
                                            <td>A non-administrator user attempted to get custok views, but the caller doesn't have <span class="api-command-ref">Read</span> or <span class="api-command-ref">Expot image</span>permission.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">GET</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>429</td>
                                            <td>429000</td>
                                            <td>Concurrent request limit exceeded</td>
                                            <td>
                                                <p>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.</p>
                                                <p>Introduced September 2021.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

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

## 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\_<fieldname>=_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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">view-id</span></td><td>The LUID for the custom view being updated.</td></tr><tr><td><span class="api-placeholder">image-resolution</span></td><td>(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 <code>high</code> to ensure maximum pixel density.</td></tr><tr><td><span class="api-placeholder">max-age-minutes</span></td><td>(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.</td></tr><tr><td><span class="api-placeholder">filter-value</span></td><td>The value of the field that you want to use to filter the workbook view. For example, a workbook with the filter <code>/data?vf_year=2017</code> would only display data from the year 2017. To learn more, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views">View filter queries</a>.</td></tr><tr><td><span class="api-placeholder">image-format</span></td><td>(Optional) The format of the returned image. Valid values are <code>png</code> (default) or <code>svg</code>. Available in API 3.29 and later.</td></tr></tbody></table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403162</td><td>Unauthorized Access</td><td>The user does not have adminstrator permissions or <b>Read</b> permissions for the custom view..</td></tr><tr><td>404</td><td>404008</td><td>Resource Not Found</td><td>A custom view with the requested LUID could not be found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid Request Method</td><td>Request type was not GET.</td></tr></tbody></table>

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

## 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/current/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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-luid</span>
                                            </td>
                                            <td>The ID of the site that contains the view.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">custom-view-luid</span>
                                            </td>
                                            <td>The ID of the view to render as a .pdf file.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">viz-height</span>
                                            </td>
                                            <td>(Optional) The height of the rendered pdf image in pixels that, along with the value of <code>vizWidth</code>, determines its
							resolution and aspect ratio.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">viz-width</span>
                                            </td>
                                            <td>(Optional) The width of the rendered pdf image in pixels that, along with the value of <code>vizHeight</code>, determines its
				resolution and aspect ratio.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">max-age-minutes</span>
                                            </td>
                                            <td>(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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">orientation</span>
                                            </td>
                                            <td>(Optional) The orientation of the pages in the .pdf file produced. The value can be
								<code>Portrait</code>
								or <code>Landscape</code>. If this parameter is not present the page orientation will default to <code>Portrait</code>.
							</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">page-type</span>
                                            </td>
                                            <td>
                                                <p>(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be:
								<code>A3</code>,
								<code>A4</code>,
								<code>A5</code>,
								<code>B5</code>,
								<code>Executive</code>,
								<code>Folio</code>,
								<code>Ledger</code>,
								<code>Legal</code>,
								<code>Letter</code>,
								<code>Note</code>,
								<code>Quarto</code>,
								or <code>Tabloid</code>.</p>
                                                <p>If this parameter is not present the page type will default to <code>Legal</code>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><i>fieldname</i>=<i>filter-value</i></td>
                                            <td>(Optional) An expression that applies a granular filter to the request. Returns will be based on the value (<i>filtervalue</i>) of the dimension or measure (<i>fieldname</i>) of your view data you specify. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views">View filter queries</a>.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400080</td><td>Bad Request</td><td>The view ID in the URI doesn't correspond to a view available on the specified site.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403032</td><td>Read forbidden</td><td>A non-administrator user attempted to query workbook views, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
  <dataAccelerationReport>
    <comparisonRecord site="Default" sheetURI="sheetURI" unacceleratedSessionCount="unacceleratedSessionCount" averageUnAcceleratedPLT="averageUnAcceleratedPLT" acceleratedSessionCount="acceleratedSessionCount" averageAcceleratedPLT="averageAcceleratedPLT" />
</tsResponse>
					
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col style="width:27%;"> <col></colgroup><tbody><tr><td><span class="api-placeholder">sheetURI</span></td><td>The URI of the sheet in the workbook.</td></tr><tr><td><span class="api-placeholder">unacceleratedSessionCount</span></td><td>The 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.</td></tr><tr><td><span class="api-placeholder">averageUnAcceleratedPLT</span></td><td>The average page load time for the sheet before it was accelerated.</td></tr><tr><td><span class="api-placeholder">acceleratedSessionCount</span></td><td>The number of sessions that were created to load the workbook sheet after it was accelerated.</td></tr><tr><td><span class="api-placeholder">averageAcceleratedPLT</span></td><td>The average page load time for the sheet after it was accelerated.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>40500</td><td>Invalid requests method</td><td>Request type was not <b>GET</b></td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/dataAccelerationReport" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```

<tsResponse version-and-namespace-settings>
  <dataAccelerationReport>
    <comparisonRecord site="Default" sheetURI="Live/Sheet1" unacceleratedSessionCount="0" averageUnAcceleratedPLT="0.0" acceleratedSessionCount="1" averageAcceleratedPLT="0.166" />
  ...
  </dataAccelerationReport>
</tsResponse>
```

## 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

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

#### 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

```
<tsResponse>
<tasks>
 <task>
  <dataAcceleration id="id" consecutiveFailedCount="0" type="DataAccelerationTask">
    <schedule id="id" name="name" state="Active" priority="75" createdAt="2020-02-25T02:49:31Z" updatedAt="2020-02-25T04:00:44Z" type="DataAcceleration" frequency="Hourly" nextRunAt="2020-02-25T08:00:00Z">
     <frequencyDetails start="00:00:00" end="00:00:00">
	  <intervals>
		<interval hours="4"/>
	  </intervals>
     </frequencyDetails>
   </schedule>
   <workbook id="id"/>
  </dataAcceleration>
 </task>
 <task>
 ... additional tasks ...
 </task>
</tasks>
</tsResponse>
					
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>403</td><td>409087</td><td>Permission denied</td><td>The user isn't authorized to view data acceleration tasks.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>40500</td><td>Invalid requests method</td><td>Request type was not <b>GET</b></td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/tasks/dataAcceleration" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```

<tsResponse version-and-namespace-settings>
  <task>
   <dataAcceleration id="9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c" consecutiveFailedCount="0" type="DataAccelerationTask">
    <schedule id="9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5r4c" name="name" state="Active" priority="75" createdAt="2020-02-25T02:49:31Z" updatedAt="2020-02-25T04:00:44Z" type="DataAcceleration" frequency="Hourly" nextRunAt="2020-02-25T08:00:00Z">
     <frequencyDetails start="00:00:00" end="00:00:00">
      <intervals>
       <interval hours="4"/>
      </intervals>
     </frequencyDetails>
   </schedule>
  <workbook id="9t8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c"/>
 </dataAcceleration>
  </task>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the data source to get revisions for.</td></tr><tr><td><span class="api-placeholder">datasource-id</span></td><td>The ID of the data source to get revisions for.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber" pageSize="page-size"
    totalAvailable="total-available" />
  <revisions>
    <revision revisionNumber="1" publishedAt="date" deleted="false">
      <publisher id="publisher-id" name="publisher-name"/>
    </revision>
    <revision revisionNumber="2" publishedAt="date" deleted="false">
    </revision>
    <revision revisionNumber="3" publishedAt="date" deleted="false" current="true" sizeInBytes="size>
      <publisher id="publisher-id" name="publisher-name"/>
    </revision>
  </revisions>
</tsResponse>
```

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 `<publisher>` element is included in the `<revision>` element.

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400006</td>
                                            <td>Invalid page number</td>
                                            <td>
                                    The page number parameter is not an integer, is less than one, or is greater than the final page
                                    number for data sources at the requested page size.
                                </td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400007</td>
                                            <td>Invalid page size</td>
                                            <td>The page size parameter is not an integer, or is less than one.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403014</td>
                                            <td>Page size limit exceeded</td>
                                            <td>The specified page size is larger than the maximum page size.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403053</td>
                                            <td>Version history not enabled</td>
                                            <td>version history is not enabled for the specified site.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403054</td>
                                            <td>A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td></td>
                                            <td>Data source not found</td>
                                            <td>The data source ID in the URI doesn't correspond to an existing data source.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">GET</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

## Get Data-Driven Alert

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

#### URI

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

#### Parameter Values

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

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

**License:** No additional license required.

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

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

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

#### Request Body

None

#### Response Code

200

#### Response Body

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

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

#### Errors

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

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

#### Example

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

**Example response:**

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

## 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

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

#### Request Body

```
<tsRequest>
  <databaseAnchor isArchived="embedded"
    datasourceName="datasource_name" datasourceFormattedName="datasource_format">
	<connectionParams>
	   <base64xml>encoded_xml</base64xml>
  	</connectionParams>
  </databaseAnchor>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">embedded</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Indicates whether the database is embedded or not. Use "<span class="api-command-ref">false</span>" if the database is not embedded and "<span class="api-command-ref">true</span>"&nbsp;if the database is embedded. For more information about embedded databases (and tables), see one of the following topics:&nbsp;</p>
                                        <ul>
                                            <li>For Tableau Cloud, see <a href="https://help.tableau.com/current/online/en-us/dm_lineage.htm#embedded-asset-appears-in-external-assets" target="_blank">Embedded asset appears in External Assets</a>.</li>
                                            <li>For Tableau Server, see <a href="https://help.tableau.com/current/server/en-us/dm_lineage.htm#embedded-asset-appears-in-external-assets" target="_blank">Embedded asset appears in External Assets</a>.</li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-name</span>
                                    </td>
                                    <td>(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.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-format</span>
                                    </td>
                                    <td>(Optional) The format of the data source that can be found in the XML&nbsp;of the data source (.tds or .tdsx) or workbook (.tws or .twbx) file.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">encoded_xml</span>
                                    </td>
                                    <td>
                                        <p>This is the encoded version of the connection element (<code>&lt;connection&gt;...&lt;/connection&gt;</code>) in the XML&nbsp;of the data source (.tds or .tdsx) or workbook (.tws or .twbx) file. </p>
                                        <ul>
                                            <li>Before you begin, make a copy of the data source or workbook file to ensure you have a backup.</li>
                                            <li>To encode the <code>connection</code> element, you can use a free online base64 encoding tool or write a simple script. <b>Note:</b>&nbsp;Make sure there are no extra spaces between the <code>connection</code> element's start and end tags. For example, after encoding the connection element, the generated encoding should look like <code>&lt;base64xml&gt;...&lt;/base64xml&gt;</code>. If the generated encoding looks like <code>&lt;base64xml&gt; ... &lt;/base64xml&gt;</code>, you might see an invalid parameter (409097) error.</li>
                                        </ul>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsResponse>
  <databaseAnchors>
	<databaseAnchor connectionName="mysql.myco" id="71081fcd-d142-4d19-98b5-c87192d837f5">
	  <tableAnchors>
		<tableAnchor id="85e7b082-20c0-433d-9bfe-70506a93452b" name="Marketing" fullName="[Marketing]"/>
	  </tableAnchors>
	</databaseAnchor>
	<databaseAnchor connectionName="sqlserver.myco" id="1ef8c5cc-7d82-4062-aff7-2d9305cab8a1">
	  <tableAnchors>
		<tableAnchor id="8b8c639a-864e-4f29-b1d8-23057d2d59f3" name="Advertising" fullName="[dbo].[Advertising]"/>
	  </tableAnchors>
	</databaseAnchor>
  </databaseAnchors>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>409</td><td>409095</td><td>Generic asset retrieval error</td><td>The database and table information could not be queried for some reason other than those specified in this table.</td></tr><tr><td>409</td><td>409096</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>409</td><td>409097</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

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

#### Request Body

None

#### Response Code

200

#### Response Body

```
<bridgeDomain>
  <domain name="abc.test.com" status="BLOCKED" poolId="BLOCKED" />
  <domain name="*.myco.lan" status="ALLOWED" poolId="185da21c-1598-4b2f-9137-fa632e935bf1" />
</bridgeDomain>
```

```
{
  "bridgeDomain": {
    "domain": [
      {
        "name": "abc.test.com",
        "status": "BLOCKED",
        "poolId": "BLOCKED"
      },
      {
        "name": "*.myco.lan",
        "status": "ALLOWED",
        "poolId": "185da21c-1598-4b2f-9137-fa632e935bf1"
      }
    ]
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503908</td><td>Unexpected server error</td><td>An unexpected error occurred while retrieving the domain.</td></tr></tbody></table>

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

## 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

 

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

#### 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

```
<tsResponse>
  <siteid="view-id"
        <settings unrestrictedEmbeddingname="true-or-false"
  </site>
</tsResponse>
```

##### Example Response

```
<tsResponse>
      <settings unrestrictedEmbedding="false"/>
    </site>
</tsResponse>
```

#### 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

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

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

## 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

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

#### 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.

```
<tsResponse>
  <task>
    <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" />
    </extractRefresh>
  </task>
  <task>
    <!-- ... additional tasks ... -->
  </task>
</tsResponse>
```

```
[
  {
    "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.

```
<tsResponse>
  <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="Wednesday"/>
          </intervals>
        </frequencyDetails>
       </schedule>
      <workbook id="7e766949-7166-4b3d-90ba-784f7575743b"/>
    </extractRefresh>
  </task>
</tsResponse>
```

```
{
  "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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>403</td><td>403004</td><td>Operation unauthorized</td><td>The user is not authorized to get the task.</td></tr><tr><td>404</td><td>404026</td><td>Task not found</td><td>The task ID in the URI doesn't correspond to an existing task.</td></tr><tr><td>405</td><td>405000</td><td>Invalid requests method</td><td>Request type was not <b>GET</b></td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that the user is a member of.</td></tr><tr><td><span class="api-placeholder">user-id</span></td><td>The ID of the user for which you want to get a list favorites.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm" class="xref">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm" class="xref">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse version-and-namespace-settings>
  <favorites>
	<favorite label="favorite-label">
	  <view id="view-luid"
		name="view-name"
		contentUrl="content-url"
		createdAt="created-at"
		updatedAt="updated-at"
		viewUrlName="view-url-name">
	      <workbook id="workbook-luid"/>
		  <project id"project-luid"/>
		  <tags />
	  </view>
	</favorite>
	<!--      . . .more favorites. . .      -->
  </favorites>
</tsResponse>
```

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.

```
<tsResponse>
  <favorites>
	<favorite label="favorite-label">
  </favorites>
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>403</td><td>403004</td><td>Forbidden Favorites access</td><td>A non-administrator user called this method but doesn't have permission to view the specified user's favorites.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/favorites/9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <favorites>
    <favorite label="Global Economic Indicators">
	  <view id="796c9371-a180-46b7-9970-feffe8573d47"
		name="Overview"
		contentUrl="Superstore/sheets/Overview"
		createdAt="2015-11-09T21:39:59Z"
		updatedAt="2019-08-30T21:05:37Z"
		viewUrlName="Overview" >
		  <workbook id="65e18031-b2f0-4ab6-994b-2c5520b830bb"/>
		  <owner id="abb3e4c1-e650-4704-870a-03fb7615136f"/>
		  <project id="3d6e8174-8cdf-43ec-94dd-0a1fd3662e47"/>
		  <tags/>
	  </view>
	</favorite>
  </favorites>
</tsResponse>
```

## Get Flow Run

Gets a flow run.

#### URI

GET /api/api-version/sites/site-id/flows/runs/flow-run-id

#### Parameter Values

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

#### 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

```
<tsResponse>
   <flowRun id="flowRun_id"
    flow id="flow_id"
    status="status"
    startedAt="DATE_TIME"
    completedAt="DATE_TIME"
    progress="100"
    backgroundJobId="background_job_id"/>
     <flowParameterRuns>
       <parameterRuns parameter Id="parameter_id"
        name="parameter_name"
        description="parameter_description"
        overrideValue="override_value"/>
     </flowParameterRuns>
   </flowRun>
</tsResponse> 
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Get forbidden</td><td>User does not have permissions to get the flow run. A user can view a flow run if they have permission to view the flow.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404036</td><td>Flow run not found</td><td>The flow run ID in the URI doesn't correspond to an existing flow run.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
   <task>
     <flowRun id="flowRun_id"
      priority="nn"
      consecutiveFailedCount="n"
      type="RunFlowTask">
       <schedule id="schedule_id"
        name="schedule_name"
        state="state"
        priority="nn"
        createdAt="DATE_TIME"
        updatedAt="DATE_TIME"
        type="flowRun"
        frequency="frequency"
        nextRunAt="DATE_TIME"/>
         <flow id="flow_id"
          name="flow_name"/>
	    <parameters>
		<parameter id="parameter_id"
                type="data_type"
                name="parameter_name"
                description="parameter_description"
                value="parameter_value"
                isRequired="true-or-false">
		  <domain xsi:type="flowParameterListDomainType-or-flowParameterAnyDomainType"
                  domainType="domain_type">
		  </domain>
	        </parameter>
	    </parameters>
     </flowRun>
   </task>
</tsResponse> 
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Operation unauthorized</td><td>The user is not authorized to get the task.</td></tr><tr><td>404</td><td>404026</td><td>Task not found</td><td>The task ID in the URI doesn't correspond to an existing task.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

<tsResponse version-and-namespace-settings>
    <task>
        <flowRun id="1bff10bb-57ae-43df-8774-a86d14aef432" priority="50" consecutiveFailedCount="2" type="RunFlowTask">
            <schedule id="36d6fab2-2a0a-432e-b464-9fe4229a9937" name="Every 2 Minutes - Only use for failing (to be suspended) flows!" state="Active" priority="50" createdAt="2018-11-08T21:57:49Z" updatedAt="2018-11-09T18:12:09Z" type="Flow" frequency="Hourly" nextRunAt="2018-11-09T18:14:00Z"/>
            <flow id="8a320dca-9151-41ea-8474-a0bb71961cc0" name="allUseCaseTFLX2"/>
	     <parameters>
		<parameter id="ebfad780-c19f-42a2-822a-406468269a02" type="string" name="Region" description="" value="North" isRequired="false">
		<domain xsi:type="flowParameterListDomainType" domainType="any">
		</domain>
		</parameter>
	     </parameters>
        </flowRun>
    </task>
</tsResponse>

## 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

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

#### 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

```
<tsResponse>
   <tasks>
     <task>
       <flowRun id="flowRun_id"
        priority="nn"
        consecutiveFailedCount="n"
        type="RunFlowTask">
         <schedule id="schedule_id"
          name="schedule_name"
          state="state"
          priority="nn"
          createdAt="DATE_TIME"
          updatedAt="DATE_TIME"
          type="flowRun"
          frequency="frequency"
          nextRunAt="DATE_TIME" />
           <flow id="flow_id"/>
             <parameters>
               <parameter id="parameter_id"
                type="data_type"
                name="parameter_name"
                description="parameter_description"
                value="parameter_value"
                isRequired="true-or-false">
		  <domain xsi:type="flowParameterListDomainType-or-flowParameterAnyDomainType"
                  domainType="domain_type">
		    </domain>
                </parameter>
	      </parameters>
       </flowRun>
      </task>
        ... additional tasks ...
    </tasks>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/tasks/runFlow" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
    <tasks>
        <task>
            <flowRun id="1bff10bb-57ae-43df-8774-a86d14aef432" priority="50" consecutiveFailedCount="2" type="RunFlowTask">
                <schedule id="36d6fab2-2a0a-432e-b464-9fe4229a9937" name="Every 2 Minutes - Only use for failing (to be suspended) flows!" state="Active" priority="50" createdAt="2018-11-08T21:57:49Z" updatedAt="2018-11-09T17:30:08Z" type="Flow" frequency="Hourly" nextRunAt="2018-11-09T17:32:00Z"/>
                <flow id="8a320dca-9151-41ea-8474-a0bb71961cc0" name="allUseCaseTFLX2"/>
		 <parameters>
			<parameter id="ebfad780-c19f-42a2-822a-406468269a02" type="string" name="Region" description="" value="North" isRequired="false">
			<domain xsi:type="flowParameterListDomainType" domainType="any">
			</domain>
			</parameter>
	     </parameters>
            </flowRun>
        </task>
        <task>
            <flowRun id="f11741cb-9646-4fb8-bbac-6d099c8d56b9" priority="50" consecutiveFailedCount="2" type="RunFlowTask">
                <schedule id="36d6fab2-2a0a-432e-b464-9fe4229a9937" name="Every 2 Minutes - Only use for failing (to be suspended) flows!" state="Active" priority="50" createdAt="2018-11-08T21:57:49Z" updatedAt="2018-11-09T17:30:08Z" type="Flow" frequency="Hourly" nextRunAt="2018-11-09T17:32:00Z"/>
                <flow id="8a320dca-9151-41ea-8474-a0bb71961cc0" name="allUseCaseTFLX2"/>
		 <flowParameterSpecs/>
            </flowRun>
        </task>
        <task>
            <flowRun id="357aaf2b-758d-4feb-a447-822528635a67" priority="44" consecutiveFailedCount="2" type="RunFlowTask">
                <schedule id="6d4e61d0-2e2f-4f48-abc8-0695b95a5287" name="Every 15 mins!" state="Active" priority="50" createdAt="2018-11-08T20:45:47Z" updatedAt="2018-11-09T17:30:08Z" type="Flow" frequency="Hourly" nextRunAt="2018-11-09T17:45:00Z"/>
                <flow id="d00700fe-28a0-4ece-a7af-5543ddf38a82" name="SQLServerUserNamePassword Good"/>
		 <flowParameterSpecs/>
            </flowRun>
        </task>
   </tasks>
</tsResponse> 
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset to return. You can filter on predefined fields such as the <code>userId</code> of the user who started the flow run, <code>flowId</code>, <code>progress</code>, <code>startedAt</code>, and <code>completedAt</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
   <flowRuns>
     <flowRuns id="flowRuns_id"
      flow id="flow_id"
      status="status"
      startedAt="DATE_TIME"
      completedAt="DATE_TIME"
      progress="100"
      backgroundJobId="background_job_id"/>
       <flowParameterRuns>
	  <parameterRuns parameterId="parameter_id"
          name="parameter_name"
          description="parameter_description"
	   overrideValue="override_value"/>
	</flowParameterRuns>
    </flowRuns>
     ... additional flow runs....
</tsResponse> 
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Get forbidden</td><td>User does not have permissions to get the flow run.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the filter doesn't correspond to an existing user.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse version-and-namespace-settings>  <groupSet id="8cf3b6c1-839f-4eae-b41f-2144165193f2" name="All Users" groupCount="2">    <group id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"        name="All Users" >    </group>    <group id="4123e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6234"       name="Researchers" >    </group>  </groupSet></tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>The request type wasn’t <span class="api-command-ref">GET</span>.</td></tr><tr><td>409</td><td>409120</td><td>Group set not found</td><td>The group set ID in the request body doesn't correspond to an existing group set.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the group.</td></tr><tr><td><span class="api-placeholder">user-id</span></td><td>The ID of the user whose group memberships are listed.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber"
    pageSize="page-size"
    totalAvailable="total-available" />
  <groups>
    <group id="group-id" name="group-name" >
    	<domain name="group-domain-name"/>
	</group>
    <!--      . . . additional groups ...      -->
  </groups>
</tsResponse>
```

**Notes:**

- Starting in July 2026 (version 3.29), the externalUserEnabled attribute (Tableau Cloud only) is omitted from the <group> 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404012</td><td>User not found</td><td>The group ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
  <pagination pageNumber="1" pageSize="100" totalAvailable="2"/>
  <groups>
    <group id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" name="All Users" >
	  <domain name="mydomain"/>
	</group>
	<group id="4123e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6234" name="Researchers" >
	  <domain name="mydomain"/>
    </group>
  </groups>
</tsResponse>
```

## 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/current/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

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

#### 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

```
<tsResponse>
  <label id="label-luid"
      userDisplayName="user-display-name"
      contentId="asset-luid"
      contentType="asset-type"
      message="label-message"
      value="label-value-name"
      category="label-category"
      active="true-or-false"
      elevated="true-or-false"
      createdAt="datetime"
      updatedAt="datetime" >
    <site id="site-luid"/>
    <owner id="user-luid"/>
  </label>
</tsResponse>
```

#### Version

Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>400103</td><td>Generic query label error</td><td>An unknown error occurred.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404030</td><td>Label not found</td><td>The label LUID doesn't correspond to an existing project.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The unique LUID of the site asset.</td></tr><tr><td><span class="api-placeholder">category-list</span></td><td>(Optional) A comma-separated list of label value categories used to limit the labels shown to only the listed categories. See <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm" class="xref">Data Labels in the REST&nbsp;API</a> for information on label values and categories.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <contentList>
    <content contentType="asset-type"
      id="asset-luid" />
    <!-- ... additional content elements ... -->
  </contentList>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">asset-type</span>
                                    </td>
                                    <td>
                                        <p>The type of asset.  Valid asset types are:</p>
                                        <ul>
                                            <li><span class="api-command-ref">database</span>
                                            </li>
                                            <li><span class="api-command-ref">table</span>
                                            </li>
                                            <li><span class="api-command-ref">column</span> <i>- Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)</i></li>
                                            <li><span class="api-command-ref">datasource</span>
                                            </li>
                                            <li><span class="api-command-ref">flow</span>
                                            </li>
                                            <li><span class="api-command-ref">virtualconnection</span>
                                            </li>
                                            <li><span class="api-command-ref">virtualconnectiontable</span>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">asset-luid</span>
                                    </td>
                                    <td>The asset LUID.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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

```
<tsResponse>
  <labelList>
    <label id="label-luid"
        userDisplayName="user-display-name"
        contentId="asset-luid"
        contentType="asset-type"
        message="label-message"
        value="label-value-name"
        category="label-category"
        active="true-or-false"
        elevated="true-or-false"
        createdAt="datetime"
        updatedAt="datetime">
      <site id="site-luid"/>
      <owner id="user-luid"/>
    </label>
    <!-- ... additional label elements ... –->
  </labelList>
</tsResponse>
```

#### Version

Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17).

#### Errors

When more than one asset appears in the request (the contentList element contains more than one content element), this method will fail if an error is encountered operating on any of them. For example, if you are getting labels for a database and a table, but you provide the wrong table LUID, the method will return an error even if the database LUID was correct.

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>400104</td><td>Generic delete label error</td><td>An unknown error occurred.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Resource not found</td><td>The <span class="api-command-ref">contentType</span> and <span class="api-command-ref">contentID</span> attribute combination does not correspond to an asset on the server. This can be caused by an incorrect <span class="api-command-ref">contentType</span>, an incorrect <span class="api-command-ref">contentID</span>, or both.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## Get labelValue

Displays label value properties for a single label value.

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/current/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

GET api/api-version/sites/site-luid/labelValues/label-value-name

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The unique LUID of the site asset.</td></tr><tr><td><span class="api-placeholder">label-value-name</span></td><td>The label value name. URL encode the label value name if it has spaces or non-alphanumeric characters in it.</td></tr></tbody></table>

#### Request Body

None

#### Permissions

Any logged in user can view the label values for their site.

#### Access Scope

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

```
tableau:label_values: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 June 2023 (API 3.20) and Tableau Server 2023.3 (API 3.21).

#### Response Body

```
<tsResponse>
  <labelValue name="label-value-name"
    category="labe-value-category"
    description="label-value-description"
    internal="true-or-false"
    elevatedDefault="true-or-false"
    builtIn="true-or-false">
    <site id="site-luid"/>
  </labelValue>
</tsResponse>
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>4000171</td><td>Generic query label value error</td><td>An unknown error occurred.</td></tr><tr><td>404</td><td>404029</td><td>No label value matches the request parameter</td><td>Check the label value name in the URI. Remember to URL-encode non-alphanumeric characters.</td></tr></tbody></table>

## 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

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

#### 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

          `<tsResponse>    <linkedTasks id= "linkedTasks-id"       numSteps="number-of-steps">        <schedule id="schedule_id"         name="schedule-name"         state="Active-or-Suspended"         priority="priority"         createdAt="datetime-created"         updatedAt="datetime-updated"         type="schedule-type"         frequency="frequency"         nextRunAt="datetime-nextrun"/>        <linkedTaskSteps>          <linkedTaskSteps id="linked-tasks-step-id>           stepNumber="step-number"           stopDownstreamTasksOnFailure="true-or-false"/>           ...additional linked tasks steps...          <task>            <flowRun id="flow-run-id"             priority="priority"             consecutiveFailedCount="consecutive-failed-count"             type="task-type">             <flow id = flow-id"              name="flow-name"            </flowRun>          </task>        </linkedTaskSteps>        ...additional linked tasks steps...      </linkedTasksSteps>    </linkedTasks> </tsResponse>` 
        

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Operation unauthorized</td><td>The user is not authorized to get the task.</td></tr><tr><td>404</td><td>404045</td><td>Linked task not found</td><td>The task ID in the URI doesn't correspond to an existing linked task.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

<tsResponse version-and-namespace-settings>
    <linkedTasks id="18d267af-4c40-4dz6-8234-6ag8c3dea67f"
      numSteps="2">
       <schedule id="3ee04ae9-4dbf-45b5-a6d6-18fa19f2jb8a"
        name="Run Flow - Every Sunday - 4:00PM"
        state="Active" priority="50"
        createdAt="2021-01-21T19:15:53Z"
        updatedAt="2022-02-27T16:00:59Z"
        type="Flow" frequency="Weekly"
        nextRunAt="2022-03-06T16:00:00Z"/>
       <linkedTaskSteps>
         <linkedTaskSteps id="738fffc7-6a21-4af5-b49e-2c47f51480d2"
          stepNumber="1"
          stopDownstreamTasksOnFailure="true">
           <task>
             <flowRun id="690c3b2c-a309-4683-9e6e-166517dc8598"
              priority="50"
              consecutiveFailedCount="0"
              type="RunFlowTask">
               <flow id="56809d67-aca9-4f08-9fdc-4b6473c3ff02" name="r-3"/>
             </flowRun>
           </task>
         </linkedTaskSteps>
</tsResponse>

## 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

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

#### 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

```
<tsResponse>
   <linkedTasks>
     <linkedTasks id= "linkedTasks-id"
      numSteps="number-of-steps">
       <schedule id="schedule_id"
        name="schedule-name"
        state="Active-or-Suspended"
        priority="priority"
        createdAt="datetime-created"
        updatedAt="datetime-updated"
        type="schedule-type"
        frequency="frequency"
        nextRunAt="datetime-nextrun"/>
       <linkedTaskSteps>
         <linkedTaskSteps id="linked-tasks-step-id>
          stepNumber="step-number"
          stopDownstreamTasksOnFailure="true-or-false"/>
          ...additional linked tasks steps...
         <task>
           <flowRun id="flow-run-id"
            priority="priority"
            consecutiveFailedCount="consecutive-failed-count"
            type="task-type">
            <flow id = flow-id"
             name="flow-name"
           </flowRun>
         </task>
       </linkedTaskSteps>
       ...additional linked tasks steps...
     </linkedTasksSteps>
     ... additional linked tasks ...
    </linkedTasks>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400154</td><td>Generic query linked task error</td><td>Could not get a list of linked tasks for some reason other than the ones specified below.</td></tr><tr><td>403</td><td>403155</td><td>Linked tasks disabled</td><td>Linked tasks has been disabled for your site or server.</td></tr><tr><td>403</td><td>403004</td><td>Operation unauthorized</td><td>You do not have permissions to see the list of linked tasks</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### 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:**

```
<tsResponse version-and-namespace-settings>
   <linkedTasks>
     <linkedTasks id="18d267af-4c40-4dz6-8234-6ag8c3dea67f"
      numSteps="2">
       <schedule id="3ee04ae9-4dbf-45b5-a6d6-18fa19f2jb8a"
        name="Run Flow - Every Sunday - 4:00PM"
        state="Active" priority="50"
        createdAt="2021-01-21T19:15:53Z"
        updatedAt="2022-02-27T16:00:59Z"
        type="Flow" frequency="Weekly"
        nextRunAt="2022-03-06T16:00:00Z"/>
       <linkedTaskSteps>
         <linkedTaskSteps id="738fffc7-6a21-4af5-b49e-2c47f51480d2"
          stepNumber="1"
          stopDownstreamTasksOnFailure="true">
           <task>
             <flowRun id="690c3b2c-a309-4683-9e6e-166517dc8598"
              priority="50"
              consecutiveFailedCount="0"
              type="RunFlowTask">
               <flow id="56809d67-aca9-4f08-9fdc-4b6473c3ff02" name="r-3"/>
             </flowRun>
           </task>
         </linkedTaskSteps>
         <linkedTaskSteps id="b9668563-e2c3-414d-b461-084a3d951cc5"
          stepNumber="2"
          stopDownstreamTasksOnFailure="true">
           <task>
             <flowRun id="2bb8e959-f5da-4691-903e-be73eed08a4c"
              priority="50"
              consecutiveFailedCount="0"
              type="RunFlowTask">
              <flow id="19ed906f-4752-4f89-a3ca-19b406efd596"
               name="flights"/>
             </flowRun>
           </task>
         </linkedTaskSteps>
     </linkedTasks>
     <linkedTasks id="abf4c0d2-0b5a-4dd1-9667-70b22bd73fe9"
      numSteps="2">
       <schedule id="92811890-d91c-456a-83b6-94db7d7041be"
        name="Run Flow - Weekday 2:00AM"
        state="Active" priority="50"
        createdAt="2021-01-21T19:15:52Z"
        updatedAt="2022-03-01T02:00:59Z"
        type="Flow"
        frequency="Weekly"
        nextRunAt="2022-03-02T02:00:00Z"/>
       <linkedTaskSteps>
         <linkedTaskSteps id="3061807b-e0f4-48ab-bbdd-7e032ff25858"
          stepNumber="1"
          stopDownstreamTasksOnFailure="true">
           <task>
             <flowRun id="c914cf4c-23e4-437c-b25b-11735bf586nf"
              priority="50"
              consecutiveFailedCount="0"
              type="RunFlowTask">
               <flow id="5a421e12-6dc4-42b5-9723-e8e667c728f3"
                name="Test3"/>
             </flowRun>
           </task>
         </linkedTaskSteps>
         <linkedTaskSteps id="ed515d51-7715-4d3f-zf16-46e6f90cd5cf"
          stepNumber="2"
          stopDownstreamTasksOnFailure="true">
           <task>
             <flowRun id="fb945078-85c3-4f78-8214-f6fb3374d67e"
              priority="50"
              consecutiveFailedCount="2"
              type="RunFlowTask">
               <flow id="1ea76ax2-4ef3-49d3-9892-f1840b6e55da"
                name="Superstore Flow"/>
             </flowRun>
           </task>
         </linkedTaskSteps>
       </linkedTaskSteps>
     </linkedTasks>
   </linkedTasks>
</tsResponse>
```

## Get Metadata Suggestion

Gets a suggestion from generative AI about asset metadata.

As of June 2024, the type of suggestion is limited to the description for a workbook, data source, or table. Generative AI suggests a description based on the chosen asset's metadata, such as asset name, field names, and/or column names. This method can't apply the suggested description to the asset.

More than one request results in alternative suggestions.

**Note:**

- This REST API method uses generative AI. Generative AI can produce inaccurate or harmful responses. Check the output before using. For more information, see [AI in Tableau and Trust](https://help.tableau.com/current/tableau/en-us/tableau_gai_einstein_trust.htm).
- Salesforce's generative AI is built on the Einstein Trust Layer. Your data stays safe and secure through data and privacy controls that are seamlessly integrated into the user experience. For more information, see [Einstein Trust Layer](https://help.tableau.com/current/tableau/en-us/tableau_gai_einstein_trust_layer.htm).

**Version:** Available in API 3.23 (Tableau Cloud June 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+](https://help.tableau.com/current/online/en-us/to_tab_plus_features.htm).

**Permissions:** Overwrite permission on the asset you're requesting suggestions for.   _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**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).

#### URI

POST /api/api-version/sites/site-luid/metadataSuggestions?suggestionType=suggestion-type

#### URI Parameter Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.
						</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-luid</span>
                                        </td>
                                        <td>The LUID for the site.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">suggestion-type</span>
                                        </td>
                                        <td>
                                            <p>The type of metadata suggestion. The only valid type of suggestion is <span class="api-placeholder">description</span>.</p>
                                            <p>Note: The URI parameter <span class="api-command-ref">suggestionType</span> is case-sensitive.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### Request Body

_(Use the icon in the top right corner to copy the text.)_

```
<tsRequest>
    <contentList>
        <content contentType="asset-type" id="asset-luid" />
    </contentList>
</tsRequest>
```

_(Use the icon in the top right corner to copy the text.)_

```
{
 "contentList": {
  "content": [
   {"contentType":"asset-type","id":"asset-luid"}
  ]
 }
}
```

#### Request Attributes

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">asset-type</span>
                                            </td>
                                            <td>
                                                <p>Valid types are:</p>
                                                <ul>
                                                    <li>workbook</li>
                                                    <li>datasource</li>
                                                    <li>table</li>
                                                </ul>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">asset-luid</span>
                                            </td>
                                            <td>
                                                <p>The LUID of the asset.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### cURL Request Example

_(Use the icon in the top right corner to copy the text.)_

```
curl --location 'https://MY-SERVER//api/3.23/sites/f480b345-8ab5-4e0b-98e6-9553de5748f9/metadataSuggestions?suggestionType=description' --header 'X-Tableau-Auth: 5Jgp0n2lSUaYbTB7NA6Wrw|mtqLBgKQEoup31yMme7la61kywW6LaTm|f480b345-8ab5-4e0b-98e6-9553de5748f9' --header 'Content-Type: application/xml' --data data.xml'
```

**Contents of data.xml.**

_(Use the icon in the top right corner to copy the text.)_

```
<tsRequest>
  <contentList>
    <content contentType="datasource"
      id="d6092e66-8cb5-495d-990c-823385c6c8db" />
  </contentList>
</tsRequest>
```

#### Response Code

200

#### Response Body

Multiple requests result in alternative suggestions.

```
<tsResponse>
    <suggestionList>
        <suggestion suggestionId="suggestion-luid"
            contentType="asset-type"
            contentId="asset-luid"
            suggestionType="suggestion-type"
            text="suggested-description"/>
    </suggestionList>
</tsResponse>
```

```
{
    "suggestionList": {
        "suggestion": [
            {
                "suggestionId": "suggestion-luid",
                "contentType": "asset-type",
                "contentId": "asset-luid",
                "suggestionType": "suggestion-type",
                "text": "suggested-description"
            }
        ]
    }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400192</td><td>Missing or incomplete payload</td><td>Make sure the request body is present and complete.</td></tr><tr><td>400</td><td>400193</td><td>Generic error</td><td>An unknown error occurred.</td></tr><tr><td>403</td><td>403004</td><td>Permission denied</td><td>Check permissions for the asset. Check the asset type and asset LUID.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>This method is only available on Tableau Cloud with Tableau+.</td></tr><tr><td>404</td><td>404055</td><td>Asset not found</td><td>Can't find selected asset. Check the asset type and asset LUID.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>URI parameter may be incorrect. The <span class="api-command-ref">suggestionType</span> parameter is case sensitive, and must be <span class="api-command-ref">description</span>.</td></tr></tbody></table>

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

## 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 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

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

#### 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

                `<tsResponse>   <metric id="metric-id" 	name="metric-name" 	description="metric-description" 	webpageUrl="metric-content-url" 	createdAt="datetime-created" 	updatedAt="datetime-updated" 	suspended="suspended-flag">   	  <project id="project-id" 	    name="project-name"/> 	  <owner id="metric-owner-id"/> 	  <tags> 	    <tag label="tag"/> 	    <!-- ... additional tags ... --> 	  </tags> 	  <underlyingView id="view-id"/>   </metric> </tsResponse>`
      

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403004</td><td>Permissions issue</td><td>The user does not have permissions to read the specified metric.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Metric not found</td><td>The metric ID in the URI doesn't correspond to an existing metric.</td></tr></tbody></table>

#### 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**

                    `<tsResponse>   <metric id="6561daa3-20e8-407f-ba09-709b178c0b4a"     name="my metric name"     description="Description of my metric."     webpageUrl="https://MY-SERVER/#/site/site-name/metrics/site-num"     createdAt="2020-01-02T01:02:03Zd"     updatedAt="2020-01-02T01:02:03Z"     suspended="true">       <project id="32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33"         name="my project name"/>       <owner id="32e79edb-6cfd-47dc-ad79-e8ec2fbb1d33"/>       <tags/>       <underlyingView id="29dae0cd-1862-4a20-a638-e2c2dfa682d4"/>   </metric> </tsResponse>`
        

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>40000</td><td>Bad request</td><td>The LUID of the site or metric was malformed.</td></tr><tr><td>401</td><td>40100</td><td>Not authorized</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403054</td><td>Not authorized</td><td>A non-administrator user attempted to get metric data, but does not have sufficient permissions.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site LUIID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td></td><td>Metric not found</td><td>The metric LUID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr><tr><td>429</td><td>405000</td><td>Too many requests</td><td>The concurrent request limit for the site was exceeded. Retry after a pause.</td></tr></tbody></table>

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

#### Example

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

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

#### 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

```
<tsResponse>    <mobileSecuritySettingsList>        <mobileSecuritySettings name="mobile.security.jailbroken_device" enabled="true">            <iosConfig severity="warn" enabled="false">                <valueList>true</valueList>            </iosConfig>            <androidConfig severity="critical" enabled="false">                <valueList>false</valueList>            </androidConfig>        </mobileSecuritySettings>        <mobileSecuritySettings name ="mobile.security.max_offline" enabled="true">            <iosConfig enabled="true" severity="critical">                <valueList>14</valuelist>            </iosConfig>            <androidConfig enabled="true" severity="critical">                <valueList>14</valuelist>            </androidConfig>        </mobileSecuritySettings>        <mobileSecuritySettings name="mobile.security.screenshot" enabled="false">            <androidConfig severity="warn" enabled="false">                <valueList>true</valueList>            </androidConfig>        </mobileSecuritySettings>    </mobileSecuritySettingsList></tsResponse>
```

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The request is incomplete is malformed.</td></tr><tr><td>400</td><td>400174</td><td>Mobile security settings error</td><td>An uknown mobile security settings error has occurred.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized Access</td><td>The user does not have the required administrtor permissions.</td></tr><tr><td>403</td><td>403157</td><td>Forbidden</td><td>Mobile security settings are not enabled on the server.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>    <mobileSecuritySettingsList>        <mobileSecuritySettings name="mobile.security.jailbroken_device" enabled="true">            <iosConfig severity="warn" enabled="false">                <valueList>true</valueList>            </iosConfig>            <androidConfig severity="critical" enabled="false">                <valueList>false</valueList>            </androidConfig>        </mobileSecuritySettings>        <mobileSecuritySettings name ="mobile.security.max_offline" enabled="true">            <iosConfig enabled="true" severity="critical">                <valueList>14</valuelist>            </iosConfig>            <androidConfig enabled="true" severity="critical">                <valueList>14</valuelist>            </androidConfig>        </mobileSecuritySettings>        <mobileSecuritySettings name="mobile.security.screenshot" enabled="false">            <androidConfig severity="warn" enabled="false">                <valueList>true</valueList>            </androidConfig>        </mobileSecuritySettings>    </mobileSecuritySettingsList></tsResponse>
```

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The request is incomplete is malformed.</td></tr><tr><td>400</td><td>400174</td><td>Mobile security settings error</td><td>An uknown mobile security settings error has occurred.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized Access</td><td>The user does not have the required administrtor permissions.</td></tr><tr><td>403</td><td>403157</td><td>Forbidden</td><td>Mobile security settings are not enabled on the server.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">idp-configuration-id</span></td><td>The ID of the configuration. To get the <span class="api-command-ref">idpConfigurationId</span> value, use the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site" class="xref">List Authentication Configurations for Site</a> method.</td></tr></tbody></table>

#### 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

```
<tsResponse>  <siteOIDCConfiguration    enabled="true"     testLoginUrl="https://sso.online.tableau.com/public/testLogin?alias=080bca2d-578b-49cc-b40d-3781b36b30ee&authSetting=OIDC"    allowEmbeddedAuthentication="false"    clientId="0oa111usf1gpUkVUt0h1"     clientSecret="&lt;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" /></tsResponse>
```

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":"&lt;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 `&lt;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/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods.

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse >
<recents>
  <recent>
	<view
	  id="view-id"
	  name="view-name"
	  contentUrl="view-content-url"
	  createdAt="created-at-time"
	  updatedAt="updated-at-time"
	  viewUrlName="view-url-name">
		<workbook id=""workbook-of-view" "/>
		<owner id="owner-id" />
		<project id="project-id" />
		<tags/>
	</view>
  </recent>
  <recent>
    <workbook
 	  id="workbook-id"
	  name="workbook-name"
	  description="workbook-description"
	  contentUrl="workbook-content-url"
	  webpageUrl="workbook-webpage-url"
	  showTabs="show-tags-flag"
	  size="size-in-mb"
	  createdAt="created-at-time"
	  updatedAt="updated-at-time"
	  encryptExtracts="encrypt-extracts-flag"
	  defaultViewId="default-view-id" >
        <project id="project-id"/>
        <owner id="ownwer-id"
		name="project-name" />
        <tags/>
	</workbook>
  </recent>
  <!--  more recently viewed views and workbooks  -->
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse >
  <recents>
    <recent>
      <view
	    id="8a922e79-3041-4916-942e-1a18162ef8a9"
	    name="MySQL PostgresSQL"
	    contentUrl="my_site1"
	    createdAt="2019-01-28T20:33:35Z"
	    updatedAt="2019-01-28T20:44:05Z"
		viewUrlName="MySQL_PostgresSQL">
		  <workbook id="1eb0d238-c9d2-49ec-a0ce-762ddc6f9827"/>
		  <owner id="2dbbee8a-202c-4a74-82d6-8e3544f55ceb"/>
		  <project id="50b87b02-74b6-11e8-a4b0-df15be81c0c4"/>
		  <tags/>
      </view>
    </recent>
    <recent>
	  <workbook
	    id="5589cf2b-8601-43f9-9151-0f6c2db760cc"
	    name="Connections-AmazonAurora (1)"
	    description=""
	    contentUrl="my_site2"
	    webpageUrl="https://my_server/#/workbooks/222"
	    showTabs="false"
	    size="7"
	    createdAt="2019-02-13T20:52:37Z"
	    updatedAt="2019-02-13T20:52:38Z"
	    encryptExtracts="false"
	    defaultViewId="d4bed763-1cb1-4924-b455-6a6c298d860d">
	      <project id="add6c395-11b8-4d57-a66b-733220a33aa0" name="project2"/>
	      <owner id="3f90c20d-069f-46dd-b5a0-6e7092140790" name="my_name"/>
	      <tags/>
	  </workbook>
    </recent>
    <!--  more recently viewed views and workbooks  --%gt;
  </recent>
</tsResponse>
```

## 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

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

#### 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

```
<tsRequest>
 <recommendations>
   <recommendation score="recommendation_score">
     <view id="view_id" />
     <similarUsersExplanation>
       <users>
         <user id="user_id_1" />
         <user id="user_id_2" />
       </users>
     </similarUsersExplanation>
   </recommendation>
   <recommendation score="recommendation_score">
     <view id="view_id" />
     <popularExplanation />
   </recommendation>
 </recommendations>
</tsRequest>
```

#### Version

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

#### Errors

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

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

#### Example

`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:**

```
<tsRequest>
 <recommendations>
   <recommendation score="94.100233876">
     <view id="0f0d33ac-027d-42a7-94bf-4f0b13e07652" />
     <similarUsersExplanation>
       <users>
         <user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" />
         <user id="f33n9d9c-8b8a-8f8e-7d7c-7b7a6f6d0p12" />
       </users>
     </similarUsersExplanation>
   </recommendation>
   <recommendation score="94.038491833">
     <view id="w33533ac-027d-42a7-94bf-4f0b13e0so32" />
     <popularExplanation />
   </recommendation>
 </recommendations>
</tsRequest>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the Recycle Bin.</td></tr><tr><td><span class="api-placeholder">content-type</span></td><td>Content type in plural form: <code>workbooks</code>, <code>datasources</code>, <code>flows</code>, or <code>projects</code>.</td></tr><tr><td><span class="api-placeholder">content-id</span></td><td>The LUID of the recycle bin content item.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

200

#### Response Body

<tsResponse>
  <contentItems>
    <contentItem 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">
      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" />
      <deleter id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" />
    </contentItem>
  </contentItems>
</tsResponse>

{
  "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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>Check the request body and query string parameters.</td></tr><tr><td>401</td><td>401000</td><td>No auth credentials</td><td>Check the authorization header.</td></tr><tr><td>401</td><td>401002</td><td>Invalid auth credentials</td><td>Session expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Check user permission.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>Recycle Bin disabled.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404003</td><td>Unknown resource</td><td>Requested content item not found.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>Request type unrecognized for this method.</td></tr><tr><td>406</td><td>406000</td><td>Unacceptable media type</td><td>Bad Accept: header.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>Parameter type-mismatched, unknown content type, or malformed LUID.</td></tr><tr><td>429</td><td>429000</td><td>Too many requests</td><td>Request throttled.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>Unknown error.</td></tr><tr><td>503</td><td>500001</td><td>Internal service error</td><td>Internal service error.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">routing-rule-id</span></td><td>The unique identifier (UUID) of the routing rule to retrieve.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

200

#### Response Body

Returns a single `routingRule`, identical in shape to the Create Routing Rule response.

```
<tsResponse>
  <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" />
  </routingRule>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>503909</td><td>Validation failed</td><td>The <span class="api-placeholder">routing-rule-id</span> is not a valid UUID.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>503923</td><td>Permission denied</td><td>Caller is not a site administrator for the site.</td></tr><tr><td>404</td><td>503915</td><td>Routing rule not found</td><td>No routing rule exists with the given ID on this site.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503919</td><td>Unexpected server error</td><td>An unexpected error occurred while retrieving the rule.</td></tr></tbody></table>

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

## 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

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

#### Request Body

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.

```
<tsResponse>
  <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" />
    </routingRule>
    <routingRule id="aa11bb22-cc33-dd44-ee55-ff6677889900" domain="blocked.example.com" isBlocked="true" />
  </routingRules>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>503923</td><td>Permission denied</td><td>Caller is not a site administrator for the site.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503918</td><td>Unexpected server error</td><td>An unexpected error occurred while listing the rules.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
  <scimConfiguration>
    <id>065693d8-436a-4738-a8f1-375953a2a888</id>
    <idpConfigurationId>95dcdf3b-30eb-42ae-b938-7ffca3e11fdc</idpConfigurationId>
    <isApiTokenActive>false</isApiTokenActive>
    <isOwner>false</isOwner>
    <name>SCIM Contractors</name>
    <createdAt>2025-03-27 11:07:49.129</createdAt>
    </scimConfiguration>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header is invalid or has expired.</td></tr><tr><td>404</td><td>404057</td><td>Resource Not Found</td><td>The SCIM&nbsp;configuration UUID is not valid.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">schedule-id</span></td><td>The ID of the specific schedule.<br><b>Note:</b> You can get the schedule id from running the List Server Schedules method. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_schedules" class="xref">Jobs, Tasks, and Schedules Methods</a></td></tr></tbody></table>

#### 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

```
<tsResponse >
   <schedule id = "schedule id"
	name = "schedule-name"
	state="Active-or-Suspended"
	priority= "priority"
	createdAt="datetime-created"
	updatedAt="datetime-last-updated"
	type="schedule-type"
	frequency="extractrefresh-or-flow-or-subscription"
	nextRunAt="datetime-nextrun"
	executionOrder="Parallel-or-Serial" >
	   <frequencyDetails start="time"
		<intervals>
		  <interval schedule-frequency/>
		</intervals>
	   </frequencyDetails>
   </schedule>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404027</td><td>Schedule not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not GET.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/schedules/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
   <schedule id="60456a5c-0293-4fed-9391-6d94a5f42b48"
	name="My Schedule"
	state="Active"
	priority="50"
	createdAt="2020-02-24T22:18:20Z"
	updatedAt="2020-02-24T22:18:20Z"
	type="Extract"
	frequency="Monthly"
	nextRunAt="2020-02-25T19:20:00Z"
	executionOrder="Parallel">
	   <frequencyDetails start="11:20:00">
		<intervals>
		   <interval monthDay="Customized Monthly"/>
		</intervals>
	   </frequencyDetails>
   </schedule>
</tsResponse>
```

## 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 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

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

#### 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

```
<tsResponse>  <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" />   </subscription> </tsResponse>
```

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

```
 <tsResponse>  <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"/>        </intervals>      </frequencyDetails>    </schedule>    <user id="14064b01-7d58-4978-bdeb-a5f8d7694863" name="mysite.com"/>  </subscription></tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403058</td><td>Unauthorized</td><td>The user attempted to get information for a subscription that they don't have permission to access.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404025</td><td>Subscription not found</td><td>The specified subscription doesn't correspond to an existing subscription.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
    <mcpSiteSettings>
        <settings>
            <key>INCLUDE_TOOLS</key>
            <value>datasource,search-content</value>
        </settings>
        <settings>
            <key>INCLUDE_TAGS</key>
            <value>sales,marketing</value>
        </settings>
        <settings>
            <key>MAX_RESULT_LIMIT</key>
            <value>50</value>
        </settings>
        <settings>
            <key>MAX_RESULT_LIMITS</key>
            <value>query-datasource:1000</value>
        </settings>
    </mcpSiteSettings>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid parameter</td><td>The site LUID format is invalid.</td></tr><tr><td>401</td><td>401002</td><td>Invalid authentication credentials</td><td>Missing or invalid authentication credentials.</td></tr><tr><td>401</td><td>403001</td><td>Missing authentication token</td><td>Authentication token not provided.</td></tr><tr><td>403</td><td>403010</td><td>Site mismatch</td><td>Authenticated user's site does not match the site LUID in the request.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>Feature not enabled.</td></tr><tr><td>403</td><td>N/A</td><td>Insufficient OAuth scope</td><td>The user lacks the required OAuth scope.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>A site with the specified LUID does not exist.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>Unknown server error.</td></tr></tbody></table>

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

## 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](#)

## 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 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](#)

## Get User Notification Preferences

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

#### URI

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

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

#### Parameter Values

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

#### Request Body

None

#### Permissions

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

#### Access Scope

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

```
tableau:user_notifications:read
```

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

#### Response Code

200

#### Response Body

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

#### Version

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

#### Errors

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

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

#### Example

**Example response:**

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

## Get 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

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

#### 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

```
<tsResponse>
  <personalSpace
    luid="b76c9984-c7a8-4ae4-826d-e08372ad7d61",
    ownerLuid="39e76bc4-737f-40c0-bca7-e635fe0e9fd9",
    readOnly="false" />
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the group.</td></tr><tr><td><span class="api-placeholder">group-id</span></td><td>The ID of the group to get the users for.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber"
    pageSize="page-size"
      totalAvailable="total-available" />
	    <users>
	      <user id="user-id"
	    name="user-name"
	    siteRole="site-role"
	    lastLogin="last-login-date-time"
	    externalAuthUserId="authentication-id-from-external-provider"
		language="language-code"
		locale="locale-code" />
	    ... additional user information ...
   </users>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group ID in the URI doesn't correspond to an existing group.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
  <pagination pageNumber="1" pageSize="100" totalAvailable="2"/>
  <users>
    <user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" name="Adam" siteRole="Explorer" />
    <user id="59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" name="Bob" siteRole="ExplorerCanPublish"
	language="en-GB" locale="GB" />
  </users>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the users.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of users to return. You can filter on predefined fields such as <code>name</code> and <code>lastLogin</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">field-expression</span></td><td>(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 <code>_all_</code> or <code>_default_</code>, 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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_fields.htm">Using Fields in the REST API</a>.</td></tr></tbody></table>

**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

```
<tsResponse>
   <pagination pageNumber="page-number"
     pageSize="page-size"
     totalAvailable="total-available" />
   <users>
    <user email="email"
      id="user-id"
      fullName="full-name"
      name="user-name"
      siteRole="site-role"
      lastLogin="date-time"
      externalAuthUserId="authentication-id-from-external-provider"
      authSetting="auth-setting"
	   idpConfigurationId="idp-configuration-id"
      language="language-code"
      locale="locale-code">
        <domain name="domain-name" />
    </user>
    <user email="email"
      id="user-id"
      fullName="full-name"
      name="user-name"
      siteRole="site-role"
      lastLogin="date-time"
      externalAuthUserId="authentication-id-from-external-provider"
      authSetting="auth-setting"
	   idpConfigurationId="idp-configuration-id"
      language="language-code"
      locale="locale-code">
        <domain name="domain-name"/>
    </user>

  </users>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

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

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/users" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <pagination pageNumber="1" pageSize="100" totalAvailable="161"/>
  <users>
    <user email="alex@example.com"
      id="9f9e9d9c8-b8a8-f8e7-d7c7-b7a6f6d6e6d"
      fullName="Alex Smith" name="Alex"
      siteRole="Viewer" language="en-GB" locale="GB">
        <domain name="tsi.lan" />
    </user>
    <user email="jannaj@example.org"
      id="12ab34cd5-6ef7-8ab9-0cd1-2ef34ab56cd"
      fullName="Janna Johnson" name="Janna"
      siteRole="Unlicensed"  language="en-GB" locale="GB" idpConfigurationId="00000000-0000-0000-0000-0000000000">
        <domain name="tsi.lan" />
    </user>
    <user email="fred.zuzuki@example.net"
      id="9a8a7b6b5-c4c3-d2d1-e0e9-a8a7b6b5b4b"
      fullName="Fred Suzuki" name="Fred"
      siteRole="ExplorerCanPublish" language="en-GB" locale="GB" idpConfigurationId="b2207590-024c-4a6e-ac4a-eca6eefabb2e">
        <domain name="tsi.lan" />
    </user>

    ... more users ...
  </users>
</tsResponse>
```

`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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the group.</td></tr><tr><td><span class="api-placeholder">view-id</span></td><td>The ID of the view whose details are requested.</td></tr><tr><td>(Optional) <span class="api-placeholder">get-usage-information</span></td><td><span class="api-command-ref">true</span> to return usage statistics. The default is <span class="api-command-ref">false</span>.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
	<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/>
	</view>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Resource not found</td><td>The view ID in the URI doesn't correspond to an existing view.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### 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:**

```
<tsResponse>
  <view id="57dc5674-23aa-4a83-b3d4-8653cf3c735f"
	name="Sheet 1"
	contentUrl="workbook/sheets/Sheet1"
	createdAt="2019-05-07T17:59:42Z"
	updatedAt="2019-05-07T17:59:48Z"
	viewUrlName="view-name">
	  <workbook id="0cee459c-9640-4d10-a33d-c6ee98b72beb"/>
	  <owner id="1b526a10-048b-4d1d-96e7-e12ec7f46388"/>
	  <project id="0ef6e0e6-b775-4d0c-8a1c-1b82e6343526"/>
	  <tags/>
  </view>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the group.</td></tr><tr><td><span class="api-placeholder">view-name</span></td><td>The name of the view as it appears in the URL to the view. For <code>https://MY_SERVER/#/MY_SITE/views/workbook-name/Sheet1?:iid=1</code>, the name would be <code>Sheet1</code>.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
	<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/>
	</view>
	<!-- potential additional views with the same name -->
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Resource not found</td><td>The view ID in the URI doesn't correspond to an existing view.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### 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:**

```
<tsResponse>
  <view id="57dc5674-23aa-4a83-b3d4-8653cf3c735f"
	name="Sheet 1"
	contentUrl="workbook/sheets/Sheet1"
	createdAt="2019-05-07T17:59:42Z"
	updatedAt="2019-05-07T17:59:48Z">
	viewUrlName="Sheet1" >
 	  <workbook id="0cee459c-9640-4d10-a33d-c6ee98b72beb"/>
	  <owner id="1b526a10-048b-4d1d-96e7-e12ec7f46388"/>
	  <project id="0ef6e0e6-b775-4d0c-8a1c-1b82e6343526"/>
	  <tags/>
  </view>
</tsResponse>
```

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the workbook.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">content-url</span>
                                            </td>
                                            <td>
                                                <p>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.</p>
                                                <p><code>mySite</code> is the content URL in the following example:</p>
                                                <p><code>http://&lt;server or cloud URL&gt;/#/site/<strong>mySite</strong>/explore</code>
                                                </p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>  <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"/>          </view>        </views>        <dataFreshnessPolicy option="FreshAt">            <freshAtSchedule time="08:15:00" frequency="Week" timezone="America/Los_Angeles">                <intervals>                    <interval weekDay="MONDAY"/>                </intervals>            </freshAtSchedule>        </dataFreshnessPolicy>  </workbook></tsResponse>
```

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403018</td><td>Read forbidden</td><td>A non-administrator user attempted to query the workbook, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook LUID or contentUrl in the URI doesn't correspond to an existing workbook, or the querystring <code>?key=contentUrl</code> is not capitalized correctly.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
  <downgradeInfo>
	<downgradedFeature name="feature-downgraded-name" severity="level-of-severity"/>
	<!-- more downgraded feature info -->
  </downgradeInfo>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400114</td><td>Unknown downgrade error</td><td>The workbook cannot be exported to a downgraded version due to an unknown error.</td></tr><tr><td>400</td><td>400115</td><td>Invalid downgrade version</td><td>The downgrade version specified is not a valid Tableau version number.</td></tr><tr><td>400</td><td>400116</td><td>Downgrade version not supported</td><td>The downgrade version specified refers to a Tableau version that is not supported.</td></tr><tr><td>403</td><td>40310</td><td>Access to downgrade info denied</td><td>The caller does not have permissions required to access download info for this workbook.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook to get revisions for.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook to get revisions for.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber" pageSize="page-size"
       totalAvailable="total-available" />
  <revisions>
    <revision createdAt="date" revisionNumber="1" isDeleted="false">
      <user id="user-id" name="user-name"/>
    </revision>
    <revision createdAt="date" revisionNumber="2" isDeleted="false">
    </revision>
    <revision createdAt="date" revisionNumber="3" isCurrent="true">
        <user id="user-id" name="user-name"/>
    </revision>
  </revisions>
</tsResponse>
```

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 `<user>` element is included in the `<revision>` element.

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400006</td>
                                            <td>Invalid page number</td>
                                            <td>
                                    The page number parameter is not an integer, is less than one, or is greater than the final page
                                    number for data sources at the requested page size.
                                </td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400007</td>
                                            <td>Invalid page size</td>
                                            <td>The page size parameter is not an integer, or is less than one.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403014</td>
                                            <td>Page size limit exceeded</td>
                                            <td>The specified page size is larger than the maximum page size.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403053</td>
                                            <td>Version history not enabled</td>
                                            <td>version history is not enabled for the specified site.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403056</td>
                                            <td>A non-administrator user attempted to get workbook revision information, but the caller doesn't have sufficient permissions.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404006</td>
                                            <td>Workbook not found</td>
                                            <td>The workbook ID in the URI doesn't correspond to an existing workbook.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">GET</span>.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

## 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

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

#### Request Body

```
<tsRequest>
	<recommendationDismissal>
		<view id="view_luid" />
	</recommendationDismissal>
</tsRequest>
```

#### Request Parameters

<table class="api-parameters-table"><colgroup><col style="width:27%;"> <col></colgroup><tbody><tr><td><span class="api-placeholder">view-luid</span></td><td>The LUID of the view to be added to the list of views hidden from recommendation for a user.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The content ID in the URI doesn't correspond to an existing content of the requested type.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

#### Example

```
curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/dismissals -X PUT \
-H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" \
-d "@hide-view.xml"
```

**Content of** hide-view.xml

```
<tsRequest>
  <recommendationDismissal>
    <view id="57dc5674-23aa-4a83-b3d4-8653cf3c735f" />
  </recommendationDismissal>
</tsRequest>
```

**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

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

#### 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/current/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
<tsRequest>
  <user
    name="user-name"
	authSetting="auth-setting"
	idpConfigurationId="idp-configuraion-id" />
  <!--    more users    -->
</tsRequest>
--boundary-string--
```

A `request-payload` without user name or authSetting is valid, but must be present in the request in the form: `<tsRequest><user /></tsRequest>`.

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">path-to-csv</span>
                                    </td>
                                    <td>The file path to the .csv list users to be imported.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">user-name</span>
                                    </td>
                                    <td>
                                        <p>(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.</p>
                                        <p><b>Tableau Server</b>
                                            <br>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, <span class="uicontrol">example\Adam</span> or
							<span class="uicontrol">adam@example.com</span>).</p>
                                        <p class="note"><strong>Note:</strong> Active Directory specifies a user name using two attributes: <code>sAMAccountName</code>
							and <code>userPrincipalName</code> (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 <span class="api-placeholder">user-name</span>
							is matched against the Active Directory <code>sAMAccountName</code> attribute, which becomes the name that the user signs in to
							Tableau Server with.

						<br><br>Two exceptions are when the name that you provide: is longer than 20 characters; and includes an <code>@</code> character.
							In these cases, Tableau imports the user using the Active Directory UPN. For more information, see
			<a href="https://msdn.microsoft.com/en-us/library/ms677605(v=vs.85).aspx" rel="noopener" target="_blank">User Naming Attributes</a> on
							the MSDN site.	</p>
                                        <p><b>Tableau Cloud</b>
                                            <br>The <span class="api-placeholder">user-name</span> 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.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">auth-setting</span>
                                    </td>
                                    <td>
                                        <p><b>Tableau Server</b>
                                        </p>
                                        <p>The <span class="api-command-ref">authSetting</span> attribute only applies when updating users on sites with site-specific SAML-enabled settings.</p>
                                        <p><b>Tableau Cloud</b>
                                        </p>
                                        <p>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:</p>
                                        <ul>
                                            <li>
                                                <p><b>For Tableau with MFA (or Tableau) authentication:</b> To assign Tableau with MFA&nbsp;authentication (or Tableau authentication if still available for your site), you can use the <span class="api-command-ref">authSetting</span> or <span class="api-command-ref"><a href="#idpconfigurationid">idpConfigurationId</a></span> attribute, but not both.</p>
                                            </li>
                                            <li>
                                                <p><b>For SAML and OIDC-based authentication:</b>
                                                </p>
                                                <ul>
                                                    <li>
                                                        <p><b>For new configurations:</b> To assign SAML&nbsp;or OIDC-based authentication, whose configurations were created during or after January 2025,  you must use the <span class="api-command-ref">idpConfigurationId</span> attribute for assigning user authentication.  Skip to <a href="#idpconfigurationid" class="xref">idp-configuration-id</a>.</p>
                                                    </li>
                                                    <li>
                                                        <p><b>For existing configurations:</b> To assign SAML&nbsp;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 <span class="api-command-ref">authSetting</span> attribute for assigning user authentication. Alternatively, you can use the <span class="api-command-ref"><a href="#idpconfigurationid">idpConfigurationId</a></span> attribute for assigning user authentication. Do not use both.</p>
                                                    </li>
                                                </ul>
                                            </li>
                                            <p><b>Notes:</b>
                                            </p>
                                            <ul>
                                                <li>In cases where both attributes are supported, you can use the <span class="api-command-ref">authSetting</span> attribute or the <span class="api-command-ref">idpConfigurationId</span> attribute, but not both.</li>
                                                <li>If neither <span class="api-command-ref">authSetting</span> nor <span class="api-command-ref">idpConfigurationId</span> attribute is specified, then <code>TableauIdWithMFA</code> (or in some cases <code>ServerDefault</code> if that option is still available for your site) is the authentication  assigned to the user.</li>
                                                <li>If you see "Unspecified" as the authentication method for the user in Tableau Cloud or if the user is unable to sign in, use the <span class="api-command-ref">idpConfigurationId</span> attribute instead. For more information, see <a href="https://help.salesforce.com/s/articleView?id=004693708&amp;type=1" target="_blank">When adding users to Tableau Cloud via Rest API, the user's authentication method is listed as "Unspecified" and the user gets error "Remote IdP entity descriptor is not configured" on login attempt</a> knowledge article or skip to <a href="#idpconfigurationid" class="xref">idp-configuration-id</a>.</li>
                                            </ul>
                                        </ul>
                                        <p>You can assign the following values for the <span class="api-command-ref">authSetting</span> attribute:</p>
                                        <ul>
                                            <li><code>SAML</code> - The user signs in using the identity provider (IdP) configured for the site.
											For Tableau Cloud configuration, see
											<a href="https://help.tableau.com/current/server/en-us/saml_site_specific.htm" rel="noreferrer" target="_blank">Enable SAML Authentication on a Site</a>.
											For Tableau Server, see
											<a href="https://help.tableau.com/current/server/en-us/saml_site_specific.htm" rel="noreferrer" target="_blank">Configure Site-Specific SAML</a>.
										</li>
                                            <li><code>OpenID</code> - <i>Tableau Cloud only</i>: The user signs in using Google, Salesforce or OpenID&nbsp;Connect provider credentials.
											<code>OpenID</code> corresponds to Google, Salesforce, or&nbsp;OIDC&nbsp;authentication configuration in Tableau Cloud authentication settings.</li>
                                            <li><code>TableauIDWithMFA</code> - <i>Tableau Cloud only</i>:&nbsp;The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see <a href="https://help.tableau.com/current/online/en-us/security_auth.htm#mfa_requirement" target="_blank">About multi-factor authentication and Tableau Cloud</a>.</li>
                                            <li><code>ServerDefault</code> - 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 <code>ServerDefault</code> value corresponds to <span class="api-command-ref">TableauID</span> in authentication
											settings. For Tableau Server, the
											<a href="https://help.tableau.com/current/server/en-us/saml.htm" rel="noreferrer" target="_blank">SAML</a>
											Server help page describes default authentication options.
</li>
                                        </ul>
                                        <p class="note"><strong>Assigning user auth settings with this method</strong>
                                            <br>
                                            <br>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
							<code>name</code> and <code>authSetting</code> attributes of the <code>user</code> object:
						<br><code>&lt;tsrequest&gt;&lt;user /&gt;&lt;/tsrequest&gt;</code>.

							<br><br>To set the default auth settings for all users being imported,
							omit the <code>name</code> attribute and specify the <code>authSetting</code> attribute of the
							<code>user</code> object:
						<br><code>&lt;tsRequest&gt;&lt;user  authSetting="OpenID"/&gt;&lt;tsRequest&gt;</code><br><br>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.

							<br><br>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.
						</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">idp-configuration-id</span>
                                    </td>
                                    <td>
                                        <p>(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).</p>
                                        <p>To find the <span class="api-command-ref">idpConfigurationId</span> attribute value, use the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site" class="xref">List Authentication Configurations for Site</a> method.</p>
                                        <p><b>Notes:</b>
                                        </p>
                                        <ul>
                                            <li>In cases where both attributes are supported, you can use the <span class="api-command-ref">idpConfigurationId</span> attribute or the <span class="api-command-ref">authSetting</span> attribute, but not both. </li>
                                            <li>If neither <span class="api-command-ref">idpConfigurationId</span> nor <span class="api-command-ref">authSetting</span> attribute is  specified, then <code>TableauIdWithMFA</code> (or in some cases <code>ServerDefault</code> if that option is still available for your site) is the authentication assigned to the user.
</li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">isVerbose</span>
                                    </td>
                                    <td><i>Tableau Cloud only</i> When set to <code>false</code>, this method only returns the top three errors in a batch of users. When set to <code>true</code>, the method displays a full list of errors during CSV upload.
						<p>Available in REST API 3.22 (Tableau Cloud February 2024)</p></td>
                                </tr>
                            </tbody>
                        </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Response Body

```
<tsResponse>
  <job id="job-luid"
	mode="Asynchronous"
	type="UserImport"
	progress="progress-status-code"
	createdAt="created-date"
  finishCode="job-finish-status-code" />
</tsResponse>
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request payload is missing or incomplete, or contains malformed XML.</td></tr><tr><td>500</td><td>500000</td><td>Internal Server Error</td><td>The request could not be completed.</td></tr></tbody></table>

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

#### Example

```
curl -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=<tsRequest><user name="jdoe" idpConfigurationId="00000000-0000-0000-0000-0000000000"/></tsRequest>'
```

#### Response

```
<tsResponse>
<job id=">c8c2ee06-624f-4c11-a88d-8c9ec3b5813d"
  mode="Asynchronous"
  type="UserImport"
  progress="0"
  createdAt="2022-02-10T18:46:04Z"
  finishCode="1" />
</tsResponse>
```

## 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/current/api/rest_api/en-us/REST/rest_api_concepts_publish.htm).

#### URI

POST /api/api-version/sites/site-id/fileUploads

#### Parameter Values

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

#### 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

```
<tsResponse>
  <fileUpload uploadSessionId=new-upload-session-id
     fileSize=0 />
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403015</td><td>Access to Favorites forbidden</td><td>A non-administrator user attempted to initiate a file upload, but the caller doesn't have publishing rights on the site.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

## 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

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

#### 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:

- `<name>`: The name of the connected app.
- `<id>`: The ID of the EAS.
- `<issuerUrl>:` The issuer URL of the EAS.

**Example response:**

```
<tsResponse>
   <externalAuthorizationServerList>
	<externalAuthorizationServer>
	   <name>External Authorization Server</name>
	   <id>7ecc5c7c-d923-4ffd-917b-cab1bd89f03b</id>
	   <issuerUrl>https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7</issuerUrl>
	   <createdAt>2022-04-07T03:50:34Z</createdAt>
	</externalAuthorizationServer>
	<externalAuthorizationServer>
	   <name>EAS_1</name>
	   <id>be5f8262-6ae4-407c-9765-dfe5b37cb4b5</id>
	   <issuerUrl>https://dev-57741099.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7</issuerUrl>
	   <createdAt>2022-05-15T13:00:34Z</createdAt>
	</externalAuthorizationServer>
   <externalAuthorizationServerList>
</tsResponse>
```

#### Version

Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr></tbody></table>

## 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

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

#### 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

```
<tsResponse>
  <permissions>
	<parent type="Project" id="project-luid" />
    <lens id="lens-luid"  name ="lens-name/>
    <granteeCapabilities>
      <user id="user-luid" />
      <capabilities>
        <capability name="capability" mtode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        <--    ... additional capabilities ...    -->
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-luid" />
      <capabilities>
        <capability name="capability" mode="Allow-or-Deny" />
        <capability name="capability" mode="Allow-or-Deny" />
        <--    ... additional capabilities ...    -->
      </capabilities>
    </granteeCapabilities>
    <--    ... additional grantee capability sets ...    -->
  </permissions>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"><col class="api-error-table-col-2"><col class="api-error-table-col-3"><col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403018</td><td>Read forbidden</td><td>A non-administrator user attempted to query metrics for the site, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404046</td><td>Lens not found</td><td>A lens with the requested LUID could be found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

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

```
<tsResponse>  <siteAuthConfigurations>    <siteAuthConfiguration>      authSetting="OIDC"      enabled="true"      idpConfigurationId="00000000-0000-0000-0000-000000000000"      idpConfigurationName="Initial Salesforce"      knownProviderAlias="Salesforce"    </siteAuthConfiguration>    <siteAuthConfiguration>      authSetting="SAML"      enabled="true"      idpConfigurationId="11111111-1111-1111-1111-111111111111"      idpConfigurationName="Initial SAML"    </siteAuthConfiguration>  </siteAuthConfigurations></tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/current/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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">poolId</span></td><td>Optional. Filter by specific pool; returns only Bridge clients assigned to this pool. Mutually exclusive with <code>onlyDefaultPool</code> and <code>onlyUnassigned</code>.</td></tr><tr><td><span class="api-placeholder">onlyDefaultPool</span></td><td>Optional. If true, returns only Bridge clients in the default pool. Mutually exclusive with <code>poolId</code> and <code>onlyUnassigned</code>.</td></tr><tr><td><span class="api-placeholder">onlyUnassigned</span></td><td>Optional. If true, returns only Bridge clients not assigned to any pool. Mutually exclusive with <code>poolId</code> and <code>onlyDefaultPool</code>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <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" />
    <bridgeClient id="67890" name="Bridge-Client-2" status="OFFLINE" version="2024.1.0" assignedToDefaultPool="true" unassigned="false" lastStatusConnectedTime="2024-10-29T15:45:00Z" ownerName="Jane Smith" ownerEmail="jane.smith@example.com" />
  </bridgeClients>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>BAD_REQUEST</td><td>Multiple filters specified</td><td>Only one filter parameter can be specified at a time (poolId, onlyDefaultPool, or onlyUnassigned).</td></tr><tr><td>400</td><td>BAD_REQUEST</td><td>Invalid poolId</td><td>The poolId specified is reserved and cannot be used as a filter.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503002</td><td>Unexpected server error</td><td>An unexpected error occurred while retrieving Bridge clients.</td></tr></tbody></table>

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

## 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

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

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
  <edgePool>
    <poolList>
      <pool id="abc-123-def-456" name="Production Pool">
        <domains>
          <domain name="example.com" status="ALLOWED" />
          <domain name="subdomain.example.com" status="ALLOWED" />
        </domains>
      </pool>
      <pool id="ghi-789-jkl-012" name="Development Pool">
        <domains>
          <domain name="dev.example.com" status="ALLOWED" />
        </domains>
      </pool>
    </poolList>
  </edgePool>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503903</td><td>Unexpected server error</td><td>An unexpected error occurred while retrieving pools.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
  <permissions>
    <collection id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd" name="Bob's Collection">
      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
    </collection>
    <granteeCapabilities>
      <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"/>
      <capabilities>
        <capability name="Read" mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <user id="08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6"/>
      <capabilities>
        <capability name="Read" mode="Allow"/>
      </capabilities>
    </granteeCapabilities>

  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404038</td><td>Resource not found</td><td>The collection ID in the URI wasn't found.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI wasn't found.</td></tr></tbody></table>

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

## 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

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

#### 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:

- `<secret>`: 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>`: Name of the connected app.
- `<enabled>`: Whether the connected app is enabled or not.
- `<clientId>`: The ID of the connected app.
- `<projectId>:` The project that the connected app's access level is scoped to.
- `<domainSafelist>:` If specified, one or more domains that the connected app is allowed to be hosted on.
- `<unrestrictedEmbedding>`: Whether the connected app can be hosted on all domains. If `false` is returned, the `<domainSafelist>` attribute determines the domain access.

**Example response:**

```
<tsResponse>
  <connectedApplications>
	<connectedApplication>
	  <secret>
		<id>7ecc5c7c-d923-4ffd-917b-cab1bd89f03b</id>
		<createdAt>2021-08-10T18:48:40Z</createdAt>
	  </secret>
	  <name>ConnectedApp_MyCo</name>
	  <enabled>true</enabled>
	  <clientId>ac95d175-c844-4779-9d58-415e01fe7dab</clientId>
	  <projectIds>
			<projectId>1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e</projectId>
			<projectId>1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e</projectId>
	  </projectIds>
	  <createdAt>2021-08-10T18:46:30Z</createdAt>
	  <domainSafelist>https://myco.com</domainSafelist>
	  <unrestrictedEmbedding>false</unrestrictedEmbedding>
	</connectedApplication>
	<connectedApplication>
	  <name>ConnectedApp_MyCo_stage1</name>
	  <enabled>false</enabled>
	  <clientId>7370df14-2741-43f9-bbdd-450f707530a0</clientId>
	  <projectIds>
			<projectId>11213e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e</projectId>
			<projectId>21234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e</projectId>
	  </projectIds>
	  <createdAt>2021-08-18T00:49:05Z</createdAt>
	  <unrestrictedEmbedding>true</unrestrictedEmbedding>
	</connectedApplication>
	<connectedApplication>
	  <name>ConnectedApp_MyCo_stage2</name>
	  <enabled>false</enabled>
	  <clientId>f1e57298-ecd4-46a9-b8d9-e5ab0bf76a82</clientId>
	  <createdAt>2021-08-18T00:54:30Z</createdAt>
	</connectedApplication>
  <connectedApplications>
</tsResponse>
```

#### Version

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

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404041</td><td>Connected app not found</td><td>The requested connected app could not be found.</td></tr></tbody></table>

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.
						</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-luid</span>
                                        </td>
                                        <td>The LUID for the site.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">page-size</span>
                                        </td>
                                        <td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.
						</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">page-number</span>
                                        </td>
                                        <td>(Optional) The offset for paging. The default is 1. For more information, see
							<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.
						</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">field-expression</span>
                                        </td>
                                        <td>
                                            <p>(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:</p>
                                            <p><code>?field=id</code>
                                            </p>
                                            <p>You can qualify the expression to return values based upon predefined keywords such as <code>_default_</code>,
								which returns only default values, and <code>_all_</code>, 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.</p>
                                            <p>The supported fields for custom views are its attributes:
							<code>id</code>, <code>name</code>, <code>createdAt</code>, <code>updatedAt</code>, and <code>shared</code>.</p>
                                            <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_fields.htm">Using Fields in the REST API</a>.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">filter-expression</span>
                                        </td>
                                        <td>
                                            <p>(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:</p>
                                            <p><code>?filter=createdAt:gt:2016-08-26T18:00:33Z</code> <i>(where <code>gt</code> is the greater-than operator)</i></p>
                                            <p>You can include multiple filter expressions in a request, and mix field, sort,
							and filter expressions in the same request.</p>
                                            <p>The supported filters for custom views use the <code>eq</code> (equals) operator, with the resources:
							<code>viewId</code>, <code>ownerId</code>, and <code>workbookId</code>.</p>
                                            <p>For more information, see
								<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting in the Tableau REST API</a>.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">sort-expression</span>
                                        </td>
                                        <td>
                                            <p>(Optional) An expression that lets you sort the Tableau resources present in the response. A sort expression contains
								an attribute name and a direction (<code>asc</code> or <code>desc</code>). For example, a sort expression that sorts
								the requested resource by creation date with the latest date first would look like:</p>
                                            <p><code>?sort=createdAt:desc</code>
                                            </p>
                                            <p>You can include multiple sort expressions in a request, and mix field, sort,
							and filter expressions in the same request.</p>
                                            <p>The supported filters for custom views use the <code>eq</code> (equals) operator, with the resources:
							<code>viewId</code>, <code>ownerId</code>, and <code>workbookId</code>.</p>
                                            <p>For more information, see
								<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting in the Tableau REST API</a>.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### 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

```
<tsResponse >
  <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"/>
	</customView>
	<!--    more custom views   -->
  </customViews>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403162</td><td>Unauthorized Access</td><td>The user does not have adminstrator permissions or <b>Read</b> permissions for the custom view..</td></tr><tr><td>405</td><td>405000</td><td>Invalid Request Method</td><td>Request type was not GET.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
  <permissions>
   <parent type="Project" id="project-id"
   <datasource id="datasource-id"
     owner="owner-user-id" />
   <granteeCapabilities>
     <user id="user-id" />
     <capabilities>
       <capability name="capability-name" mode="capability-mode" />
       ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability" mode="capability-mode" />
        ... additional capabilities ...
       </capabilities>
     </granteeCapabilities>
     ... additional grantee capability sets ...
  </permissions>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/datasources/1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <parent type="Project" id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" />
  <permissions>
    <datasource id="1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b" name="USPS-rates">
      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
    </datasource>
    <granteeCapabilities>
      <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" />
      <capabilities>
        <capability name="Connect" mode="Allow"/>
        <capability name="Read" mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
  </permissions>
</tsResponse>
```

## List Data-Driven Alerts on Site

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

#### URI

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

#### URI

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

#### URI

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

#### Parameter Values

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

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

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

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

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

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

#### Request Body

None

#### Response Code

200

#### Response Body

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

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

#### Version

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

#### Errors

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

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

#### Example

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

**Example response:**

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

## 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

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

#### 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:**

```
<tsResponse>
  <permissions>
	<database id="e8d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" name="oracle.test.example.com:1521"/>
	<granteeCapabilities>
	  <user id="6265b714-7533-465d-b6db-6d0be92bfd07"/>
	  <capabilities>
		<capability name="Read" mode="Allow"/>
	  </capabilities>
	</granteeCapabilities>
  </permissions>
</tsResponse>
```

**Example response without explicit permissions set on a database asset:**

```
<tsResponse>
  <permissions>
	<database id="0f206b0e-da69-4746-bb95-87695f522b4d" name="stage"/>
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Permissions could not be returned because support for explicit permissions is available for database assets associated with published data sources only.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Support for explicit permissions is available for database assets associated with published data sources only.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The requested database could not be found.</td></tr><tr><td>409</td><td>409045</td><td>Database error</td><td>An unknown database asset error occurred.</td></tr></tbody></table>

## 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

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

#### 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**

```
<tsResponse>
  <permissions>
	<database id="e8d4aa9f-3d1a-4b49-8d6d-27f113cbd25e" name="oracle.test.example.com:1521"/>
	<granteeCapabilities>
	  <user id="6265b714-7533-465d-b6db-6d0be92bfd07"/>
	  <capabilities>
		<capability name="Read" mode="Allow"/>
	  </capabilities>
	</granteeCapabilities>
  </permissions>
</tsResponse>
		
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Permissions could not be returned because support for explicit permissions is available for database assets associated with published data sources only.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404003</td><td>Resource not found</td><td>The database LUID in the URI doesn't correspond to a database asset on the site.</td></tr></tbody></table>

## 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/current/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

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

#### 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

```
<tsResponse>
  <permissions>
	<project id="project-luid" name="project-name" />
	<granteeCapabilities>
      <user id="user-luid" />
	  <capabilities>
	    <capability name="capability" mode="capability-mode" />
	    <capability name="capability" mode="capability-mode" />
	    <... additional capabilities ...>
	  </capabilities>
	</granteeCapabilities>
	<... additional grantee capabilities ...>
  </permissions>
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403035</td><td>Querying data source permissions forbidden</td><td>The caller doesn't have permissions to query the project's default permissions for data sources.</td></tr><tr><td>403</td><td>403036</td><td>Querying workbook permissions forbidden</td><td>The caller doesn't have permissions to query the project's default permissions for workbooks.</td></tr><tr><td>403</td><td>403035</td><td>Querying flow permissions forbidden</td><td>The caller doesn't have permissions to query the project's default permissions for flows.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project LUID in the URI doesn't correspond to an existing project.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code>2.2</code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the refresh tasks.</td></tr><tr><td><span class="api-placeholder">schedule-id</span></td><td>The ID of the schedule to get extract information for.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber"
     pageSize="page-size"
     totalAvailable="total-available" />
  <extracts>
    <extract id="task-id"
      priority="task-priority"
      type="incremental-or-full" >
        <workbook id="workbook-id" />
    </extract>
    <extract id="task-id"
      priority="task-priority"
      type="incremental-or-full" >
        <datasource id="datasource-id" />
    </extract>
    <extract id="task-id"
      priority="task-priority"
      type="incremental-or-full" >
        <virtualConnection id="virtualconnection-id" />
    </extract>
    ... additional extract refresh tasks ...
  </extracts>
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>400</td><td>400047</td><td>Invalid schedule type</td><td>The schedule type does not represent an extract refresh task. (For example, it might be a subscription task.)</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td><span style="background-color:yellow;">404</span></td><td>Schedule not found</td><td>The schedule ID in the URI doesn't correspond to an existing schedule.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
<pagination pageNumber="1" pageSize="100" totalAvailable="3" />
  <extracts>
    <extract id="639c7e80-0d11-44b2-9b5b-018ffc5eddb4" priority="60" type="FullRefresh">
      <datasource />
    </extract>
    <extract id="303f6c45-fb48-47aa-88d3-0dd87f5f5c74" priority="50" type="FullRefresh">
      <workbook />
    </extract>
    <extract id="9dd16fd7-8bbc-4c0d-9f75-9c7330a29396" priority="50" type="ExtractServiceFullRefreshExtractTask">
      <virtualConnection id="e3ebe049-8f94-4501-8fb0-faba6ccbbc85" />
    </extract>
  </extracts>
</tsResponse>
```

## 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

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

#### 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.

```
<tsResponse>
  <tasks>
    <task>
      <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" />
      </extractRefresh>
    </task>
    <task>
      <!-- ... additional tasks ... -->
    </task>
  </tasks>
</tsResponse>
```

```
{
  "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.

```
<tsResponse>
  <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="Wednesday"/>
            </intervals>
          </frequencyDetails>
        </schedule>
        <workbook id="7e766949-7166-4b3d-90ba-784f7575743b"/>
      </extractRefresh>
    </task>
  </tasks>
</tsResponse>
```

```
{
  "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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>405</td><td>405000</td><td>Invalid requests method</td><td>Request type was not <b>GET</b></td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse >
    <permissions>
        <flow id="flow-id" name="flow-name">
            <owner id="owner-id"/>
        </flow>
        <granteeCapabilities>
            <group id="group-id"/>
            <capabilities>
                <capability name="Read" mode="Allow"/>
                <capability name="Write" mode="Allow"/>
                ... additional capabilities ...
            </capabilities>
        </granteeCapabilities>
    </permissions>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr></tbody></table>

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

#### Example

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

**Example response:**

```
<tsResponse xmlns= version-and-namespace-settings>
    <permissions>
        <flow id="d00700fe-28a0-4ece-a7af-5543ddf38a82" name="SQLServerUserNamePassword Good">
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
        </flow>
        <granteeCapabilities>
            <group id="6fd1dea0-e173-11e8-ae75-832f6a4756f0"/>
            <capabilities>
                <capability name="Read" mode="Allow"/>
                <capability name="Write" mode="Allow"/>
            </capabilities>
        </granteeCapabilities>
    </permissions>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the group sets.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of group sets to return. You can filter on predefined fields such as <code>name</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse version-and-namespace-settings>  <pagination pageNumber="1" pageSize="100" totalAvailable="3"/>  <groupSets>    <groupSet id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" name="All Users" groupCount="1" />    <groupSet id="9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b" name="active-directory-group-import" groupCount="2" />    <groupSet id="7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6" name="local-group-license-on-login" groupCount="3" />  </groupSets></tsResponse>
```

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter isn’t an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter isn’t an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>The request type wasn’t <span class="api-command-ref">GET</span>.</td></tr><tr><td>409</td><td>409120</td><td>Group set not found</td><td>The group set ID in the URI doesn't correspond with an existing group set.</td></tr></tbody></table>

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

## 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/current/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm) topic.

#### URI

GET api/api-version/sites/site-luid/labelCategories

#### Parameter Values

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

#### 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

<tsResponse>
  <labelCategoryList>
    <labelCategory name="label-category-name"
      description="label-category-description"/>
    <!-- ... additional labelCategory elements ... –->
  </labelCategoryList>
</tsResponse>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400188</td><td>Generic get label category error</td><td>An unknown error occurred.</td></tr></tbody></table>

## List labelValues on Site

Lists all label values on the site.

You can optionally limit the list of returned data label values using a query string in the URI.

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/current/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

GET api/api-version/sites/site-luid/labelValues

GET api/api-version/sites/site-luid/labelValues?categories=category-list

GET api/api-version/sites/site-luid/labelValues?isInternal=internal-flag

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The unique LUID of the site asset.</td></tr><tr><td><span class="api-placeholder">category-list</span></td><td>(Optional) A comma-separated list of categories for limiting the list to only one category of labels. Valid categories are the built-in categories <span class="uicontrol">warning</span>, <span class="uicontrol">certification</span>, and <span class="uicontrol">sensitivity</span>, or custom categories that an administrator created. (Custom categories were released with Tableau Cloud October 2023 and Tableau Server 2023.3.).</td></tr><tr><td><span class="api-placeholder">internal-flag</span></td><td>(Optional) A Boolean value that specifies if you want to return label values that are internal or aren't. (The data quality warnings that arise from extract refresh monitoring and flow run monitoring are internal labels.)</td></tr></tbody></table>

#### Request Body

None

#### Permissions

Any logged in user can view the label values for their site.

#### Access Scope

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

```
tableau:label_values: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 June 2023 (API 3.20) and Tableau Server 2023.3 (API 3.21).

#### Response Body

```
<tsResponse>
  <labelValueList>
    <labelValue name="label-value-name"
      category="label-value-category"
      description="label-value-description"
      internal="true-or-false"
      elevatedDefault="true-or-false"
      builtIn="true-or-false">
      <site id="site-luid"/>
    </labelValue>
    <!-- ... additional labelValue elements ... –->
  </labelValueList>
</tsResponse>				
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400172</td><td>Generic query label values error</td><td>An unknown error occurred.</td></tr><tr><td>409</td><td>409004</td><td>Bad Request</td><td>One or more values in the request are invalid. If filtering by categories in the URI, check spelling of category. If filtering by isInternal in the URI, confirm you've provided a Boolean value.</td></tr></tbody></table>

## 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](#)

## 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](#)

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the metrics.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of metrics to return. You can filter on predefined fields such as metric <code>name</code>, or attributes of the associated <code>owner</code> or <code>project</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">field-expression</span></td><td>(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 <code>_all_</code> or <code>_default_</code>, 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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_fields.htm">Using Fields in the REST API</a>.</td></tr></tbody></table>

**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

                    `<tsResponse>   <pagination pageNumber="page-number"      pageSize="page-size"      totalAvailable="total-available" />   <metrics>     <metric id="metric-id" 		name="name" 		description="metric-description" 		webpageurl="metric-webpageurl"         createdAt="datetime-created" 	    updatedAt="datetime-updated" 	    suspended="suspended-flag" > 	      <project id="project-id" name="project-name" /> 	      <owner id="user-id" /> 	      <tags> 	        <tag label="tag"/> 	        ... additional tags ... 	     </tags> 	<underlyingView" id="view-id" />    </metric>    ... additional metrics ...   </metrics> </tsResponse>`
        

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size exceeds upper limit</td><td>The page size parameter exceeds the system-wide upper limit of 1000.</td></tr><tr><td>403</td><td>403018</td><td>Read forbidden</td><td>A non-administrator user attempted to query metrics for the site, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Metrics not found</td><td>No metrics are configured for this site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/metrics" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response body:**

                    `<tsResponse version-and-namespace-settings>   <pagination pageNumber="1" pageSize="100" totalAvailable="27"/>   <metrics>     <metric id="1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" 		name="my first metric"         description="Description of my_first_metric." 		webpageUrl="https://MY-SERVER/#/site/site-name/metrics/site-num" 		createdAt="2013-03-30T22:32:35Z" updatedAt="2016-01-13T01:00:02Z" 		suspended="false" > 	      <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" name="Tableau Samples"/> 	      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/> 	      <tags/> 		underlyingView="29dae0cd-1862-4a20-a638-e2c2dfa682d4"     </metric>     <metric id="29dae0cd-1862-4a20-a638-e2c2dfa682d4a" name="my_second_metric" 		description="Description of my second metric." 		webpageUrl="https://MY-SERVER/#/site/site-name/metrics/site-num"         createdAt="2014-02-19T10:19:23Z" updatedAt="2015-12-29T013:23:45Z" 		suspended="false" > 		  <project id="08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6" name="default"/> 	      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/> 	      <tags>           <tag label="training" ></tags>     </metric> 	<!-- ...more metrics ... --:>   </metrics>   </tsResponse>`
        

## 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](#)

## 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

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

#### 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

```
<tsResponse>    <personalAccessTokens>        <personalAccessToken tokenName="user_pat1" tokenGuid="011b6267-a067-473a-9d16-b34cc58f90df" lastUsedAt="2023-06-13T16:55:46Z" expiresAt="2024-06-12T16:55:46Z"/>        <personalAccessToken tokenName="user_pat4" tokenGuid="0fb30637-b638-4ce2-bbac-ac6611104ed9" lastUsedAt="2023-06-13T16:55:51Z" expiresAt="2024-06-12T16:55:51Z"/>        <personalAccessToken tokenName="user_pat5" tokenGuid="db8c0b5d-5946-4f7c-a966-af334a3d10a5" lastUsedAt="2023-06-13T16:55:56Z" expiresAt="2024-06-12T16:55:56Z"/>    </personalAccessTokens></tsResponse>
```

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403004</td><td>Forbidden</td><td>You can only list PATs that are yours.</td></tr><tr><td>403</td><td>403010</td><td>Cross-site access is forbidden</td><td>You're a site admin and can't list PATs when you're not the site admin for all sites the PAT&nbsp;owner is a member of.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
  <permissions>
    <project id="project-id" name="project-name" />
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability" mode="capability-mode" />
        <capability name="capability" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability" mode="capability-mode" />
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capabilities ...
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the URI doesn't correspond to an existing project.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/projects/1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <permissions>
    <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" name="default">
      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
    </project>
    <granteeCapabilities>
      <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"/>
      <capabilities>
        <capability name="Read" mode="Allow"/>
        <capability name="Write" mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
  </permissions>
</tsResponse>
```

## 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 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the Recycle Bin.</td></tr><tr><td><span class="api-placeholder">content-type</span></td><td>Content type in plural form: <code>workbooks</code>, <code>datasources</code>, <code>flows</code>, or <code>projects</code>.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of recycle bin content to return. You can filter on predefined fields such as <code>name</code>, <code>ownerId</code>, <code>deleterId</code>, <code>createdAt</code>, <code>updatedAt</code>, and <code>path</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### Request Body

None

#### Response Code

200

#### Response Body

<tsResponse>
  <pagination pageNumber="1"
    pageSize="100"
    totalAvailable="1"/>
  <contentItems>
    <contentItem 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">
      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
      <deleter id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"/>
    </contentItem>
  </contentItems>
</tsResponse>

{
  "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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>Check the request body and query string parameters.</td></tr><tr><td>401</td><td>401000</td><td>No auth credentials</td><td>Check the authorization header.</td></tr><tr><td>401</td><td>401002</td><td>Invalid auth credentials</td><td>Session expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Check user permission.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>Recycle Bin disabled.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>Request type unrecognized for this method.</td></tr><tr><td>406</td><td>406000</td><td>Unacceptable media type</td><td>Bad Accept: header.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>Parameter type-mismatched, unknown content type, or malformed LUID.</td></tr><tr><td>429</td><td>429000</td><td>Too many requests</td><td>Request throttled.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>Unknown error.</td></tr><tr><td>503</td><td>500001</td><td>Internal service error</td><td>Internal service error.</td></tr></tbody></table>

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

## 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

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

#### 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:

- `<name>`: The name of the connected app.
- `<id>`: The ID of the EAS.
- `<issuerUrl>:` The issuer URL of the EAS.

**Example response:**

```
<tsResponse>
   <externalAuthorizationServerList>
	<externalAuthorizationServer>
	   <name>EAS_1</name>
	   <id>7ecc5c7c-d923-4ffd-917b-cab1bd89f03b</id>
	   <issuerUrl>https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7</issuerUrl>
	   <createdAt>2022-04-07T03:50:34Z</createdAt>
	</externalAuthorizationServer>
   <externalAuthorizationServerList>
</tsResponse>
```

#### Version

Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404047</td><td>EAS not found</td><td>The requested EAS could not be found.</td></tr></tbody></table>

## 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

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

#### Request Body

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

```
<tsResponse>
  <scimConfigurations>
    <scimConfiguration>
    <id>3400f62c-7569-4608-89c9-98c4194390ee</id>
    <idpConfigurationId>cf73f5a0-8483-42f8-89ac-91a5aeed0bcc</idpConfigurationId>
    <isApiTokenActive>true</isApiTokenActive>
    <isOwner>true</isOwner>
    <name>SCIM Employees</name>
    <createdAt>2025-08-09 15:15:02.100</createdAt>
  </scimConfiguration>
  <scimConfiguration>
    <id>065693d8-436a-4738-a8f1-375953a2a888</id>
    <idpConfigurationId>95dcdf3b-30eb-42ae-b938-7ffca3e11fdc</idpConfigurationId>
    <isApiTokenActive>false</isApiTokenActive>
    <isOwner>false</isOwner>
    <name>SCIM Contractors</name>
    <createdAt>2025-03-27 11:07:49.129</createdAt>
    </scimConfiguration>
  </scimConfigurations>
<tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header is invalid or has expired.</td></tr></tbody></table>

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

## 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

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

#### Request Body

None

#### Permissions

This method can only be called by server administrators.

#### Access Scope

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

```
tableau: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

```
<tsRequest>
  <domainList>
    <domain id="domain-id-int"
  	  name="domain-name"
	  shortName="domain-nickname" />
  </domainList>
</tsRequest>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/domains" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response body:**

```
<tsRequest>
  <domainList>
    <domain id="1045" name="domain.com" shortName="myDomainNickName" />
    < . . . more domains . . . />
  </domainList>
</tsRequest>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code>2.2</code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
   <pagination pageNumber="pageNumber" pageSize="page-size"
	totalAvailable="total-available" />
   <schedules>
  	<schedule id="schedule-id"
	   name="schedule-name"
	   state="Active-or-Suspended"
	   priority="schedule-priority"
	   createdAt="datetime-created"
	   updatedAt="datetime-last-updated"
	   type="extract-or-subscription-or-flow"
	   frequency="schedule-frequency"
	   nextRunAt ="datetime-next-run-time"
	   endScheduleAt ="datetime-expiration" />
	... additional schedules ...
   </schedules>
</tsResponse>
```

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:**

```
<tsResponse version-and-namespace-settings >
   <pagination pageNumber="1" pageSize="100" totalAvailable="3" />
   <schedules>
	<schedule id="ca3ce4f5-666c-4bb8-a763-5df24783881f"
	   name="Hourly"
	   state="Active"
	   priority="50"
	   createdAt="2011-03-30T22:32:35Z"
	   updatedAt="2016-01-13T01:00:02Z"
	   type="Extract"
	   frequency="Hourly"
	   nextRunAt="2016-01-13T23:00:00Z" />
	<schedule id="13abd238-0b22-4789-bcc4-614d31908310"
	   name="Saturday night"
	   state="Active"
	   priority="50"
	   createdAt="2010-10-28T21:11:33Z"
	   updatedAt="2016-01-10T07:00:00Z"
	   type="Extract"
	   frequency="Weekly"
	   nextRunAt="2016-01-17T07:00:00Z" />
	<schedule id="b6a6d11a-9e20-49f1-9b74-693f196b9aca"
	   name="End of the month"
	   state="Suspended"
	   priority="50"
	   createdAt="2010-10-28T21:11:33Z"
	   updatedAt="2016-01-01T07:00:03Z"
	   type="Extract"
	   frequency="Monthly"
	   nextRunAt="2016-02-01T07:00:00Z" />
   </schedules>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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](#)

## 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](#)

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the subscriptions.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>   <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" />     </subscription>     <!--   ... additional subscriptions ...   -->   </subscriptions> </tsResponse>
```

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

```
<tsResponse>  <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"/>                  </intervals>                </frequencyDetails>              </schedule>              <user id="14064b01-7d58-4978-bdeb-a5f8d7694863"                 name="me@mysite.com"/>    </subscription>  </subscriptions></tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for the sites at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### 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:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.5.xsd">
  <permissions>
	<table id="d0fe66ae-1407-4338-8520-9489d7ce959c" name="_WarehouseConfig"/>
	<granteeCapabilities>
	  <user id="6265b714-7533-465d-b6db-6d0be92bfd07"/>
	  <capabilities>
		<capability name="Read" mode="Allow"/>
	  </capabilities>
	</granteeCapabilities>
  </permissions>
</tsResponse>
```

**Example response without explicit permissions set:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.5.xsd">
  <permissions>
	<parent id="95ac9b30-5b2c-48ed-af56-cab9b0d4b064" type="Database"/>
	  <table id="4ef842be-5c90-4878-a048-99a896b59996" name="BigMachines"/>
  </permissions>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400120</td><td>Bad request</td><td>Permissions could not be returned because support for explicit permissions is available for table assets associated with published data sources (not embedded data sources) only.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The requested table asset could not be found.</td></tr><tr><td>409</td><td>409052</td><td>Table error</td><td>An unknown table asset error occurred.</td></tr><tr><td>409</td><td>409053</td><td>Unknown table query error</td><td>An unknown error occurred and the table query could not complete.</td></tr></tbody></table>

## 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

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

#### 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

```
<tsRequest><extensionsServerSettings>        <extensionsGloballyEnabled>true</extensionsGloballyEnabled>        <blockList>https://test.com</blockList>    </extensionsServerSettings></tsRequest>
```

Copy

```
{  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403000</td><td>Non-admin access forbidden</td><td>The client attempted to access an API method while signed in as a non-administrator user.</td></tr><tr><td>404</td><td>404000</td><td>Bad Request</td><td>The requested resource could not be found.</td></tr><tr><td>500</td><td>500000</td><td>Internal Server Error</td><td>The request could not be completed.</td></tr></tbody></table>

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

## 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

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

#### Request Body

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

```
<tsResponse>    <extensionsSiteSettings>        <extensionsEnabled>true</extensionsEnabled>        <useDefaultSetting>false</useDefaultSetting>        <safeList>            <url>http://localhost:9123/Dynamic.html</url>            <fullDataAllowed>true</fullDataAllowed>            <promptNeeded>true</promptNeeded>        </safeList>        <allowTrusted>true</allowTrusted>          <includeSandboxed>true</includeSandboxed>         <includeTableauBuilt>true</includeTableauBuilt>         <includePartnerBuilt>false</includePartnerBuilt>    </extensionsSiteSettings></tsResponse>
```

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403000</td><td>Non-admin access forbidden</td><td>The client attempted to access an API method while signed in as a non-administrator user.</td></tr><tr><td>404</td><td>404000</td><td>Site Not Found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>500</td><td>500000</td><td>Internal Server Error</td><td>The request could not be completed.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse >  <pagination pageNumber="1"     pageSize="100"     totalAvailable="1"/>      <users>        <user id="5c9a81df-7ec0-4752-a057-82cd2bb22c44"/>      </users></tsResponse>
```

Copy

```
{  "pagination": {    "pageNumber": "1",    "pageSize": "100",    "totalAvailable": "1"  },  "users": {    "user": [      {        "id": "5c9a81df-7ec0-4752-a057-82cd2bb22c44"      }    ]  }}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403162</td><td>Unauthorized Access</td><td>The user does not have adminstrator permissions.</td></tr><tr><td>404</td><td>404008</td><td>Resource Not Found</td><td>A custom view with the requested LUID could not be found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid Request Method</td><td>Request type was not GET.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
  <parent type="Project" id="project-id" />
  <permissions>
    <view id="view-id"/>
      <owner id="owner-id"/>
    </view>
    <granteeCapabilities>
      <user id="user-id"/>
      <capabilities>
        <capability name="capability-name" mode="capability-mode"/>
        <capability name="capability-name" mode="capability-mode"/>
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <user id="user-id"/>
      <capabilities>
        <capability name="capability-name" mode="capability-mode"/>
        <capability name="capability-name" mode="capability-mode"/>
        ... additional capabilities ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id"/>
      <capabilities>
        <capability name="capability-name" mode="capability-mode"/>
        ... additional capabilities ...
      </capabilities>
      </granteeCapabilities>
  </permissions>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to set permissions on the view.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the URI doesn't correspond to an existing view.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/views/0524c7ce-250b-45b1-adf2-d08f1648643c/permissions" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse>
  <permissions>
    <view id="0524c7ce-250b-45b1-adf2-d08f1648643c"/>
      <owner id="1a5dffe8-2439-4862-9eb0-46d055ef7379"/>
    </view>
    <granteeCapabilities>
      <group id="9e617a5c-a733-11e8-8ec3-b748ab3bf3d6"/>
      <capabilities>
        <capability name="ViewComments" mode=mode="Allow"/>
        <capability name="ExportData" mode=mode="Allow"/>
        <capability name="AddComment" mode=mode="Allow"/>
        <capability name="Filter" mode=mode="Allow"/>
        <capability name="ViewUnderlyingData" mode=mode="Allow"/>
        <capability name="Read" mode=mode="Allow"/>
        <capability name="ShareView" mode=mode="Allow"/>
        <capability name="ExportImage" mode=mode="Allow"/>
      </capabilities>
      </granteeCapabilities>
    <granteeCapabilities>
      <user id="1a5dffe8-2439-4862-9eb0-46d055ef7379"/>
      <capabilities>
        <capability name="ExportImage" mode=mode="Allow"/>
        <capability name="AddComment" mode=mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <user id="ff43cb47-f208-4d2f-9a22-0fbb6d29f7f1"/>
      <capabilities>
        <capability name="AddComment" mode=mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
  </permissions>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID for the site that contains the virtual connection.</td></tr><tr><td><span class="api-placeholder">virtual-connection-id</span></td><td>The LUID for the virtual connection that includes the database connections.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>  <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"/>  </virtualConnectionConnections></tsResponse>
```

```
{  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for virtual connections at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>GET</b>.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
    <permissions>
        <parent id="project-id"
            type="Project"/>
        <virtualConnection id="virtualconnection-id"
            name="virtualconnection-name">
            <owner id="owner-id"/>
        </virtualConnection>
        <granteeCapabilities>
            <group id="group-id"/>
            <capabilities>
                <capability name="capability-name"
                    mode="capability-mode"/>
                <!--   ...additional capabilities...   -->
            </capabilities>
        </granteeCapabilities>
        <granteeCapabilities>
            <user id="user-id"/>
            <capabilities>
                <capability name="capability-name"
                    mode="capability-mode"/>
                <!--   ...additional capabilities...   -->
            </capabilities>
        </granteeCapabilities>
        <!--   ...additional granteeCapability sets...   -->
    </permissions>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Virtual Connection not found</td><td>The virtual connection ID in the URI doesn't correspond to an existing virtual connection.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">virtual-connection-id</span></td><td>The LUID for the virtual connection.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="page-number" pageSize="page-size" totalAvailable="page-count"/>
  <revisions>
    <revision revisionNumber="revision-number" publishedAt="datetime" deleted="deleted-flag" current="current-flag">
      <publisher id="publisher-id" name="publisher-username"/>
    </revision>
    <revision revisionNumber="revision-number" publishedAt="datetime" deleted="deleted-flag" current="current-flag">
      <publisher id="publisher-id" name="publisher-username"/>
    </revision>
    <!-- ...Additional revisions... -->
</revisions>
</tsResponse>
```

```
"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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400058</td><td>Generic error</td><td>An unknown error occurred.</td></tr><tr><td>403</td><td>403054</td><td>User not authorized.</td><td>User doesn't have permissions to revisions on this virtual connection. Check the user's permissions.</td></tr><tr><td>403</td><td>403173</td><td>User not authorized.</td><td>User forbidden from listing virtual connection revisions. Check the user's permissions and site role.</td></tr><tr><td>403</td><td>403053</td><td>Revision history is disabled on the site.</td><td>Check the revision history setting.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found</td><td>Check the virtual connection LUID.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID for the site that contains the virtual connection.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>   <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"/>  </virtualConnections></tsResponse>
```

```
{  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for virtual connections at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>400</td><td>400008</td><td>Invalid parameter value</td><td>A parameter in the request body is missing or invalid.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>GET</b>.</td></tr></tbody></table>

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

## List Webhooks

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

#### URI

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

#### Parameter Values

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

#### Request Body

None

#### Permissions

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

#### Access Scope

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

```
tableau:webhooks:read
```

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

#### Response Code

200

#### Response Body

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

## List 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

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

#### 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

```
<tsResponse>
  <parent type="Project" id="project-id" />
  <permissions>
    <workbook id="workbook-id" name="workbook-name >
      <owner="owner-user-id" />
    </workbook>
    <granteeCapabilities>
      <user id="user-id" />
      <capabilities>
        <capability name="capability" mode="capability-mode" />
         ... additional capabilities for users ...
      </capabilities>
    </granteeCapabilities>
    <granteeCapabilities>
      <group id="group-id" />
      <capabilities>
        <capability name="capability" mode="capability-mode" />
         ... additional capabilities for groups ...
      </capabilities>
    </granteeCapabilities>
    ... additional grantee capability sets ...
  </permissions>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr></tbody></table>

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

#### Example

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

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <parent type="Project" id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" />
  <permissions>
    <workbook id="1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" name="Finance">
      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
    </workbook>
    <granteeCapabilities>
      <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"/>
      <capabilities>
        <capability name="Read" mode="Allow"/>
        <capability name="Filter" mode="Allow"/>
        <capability name="ViewUnderlyingData" mode="Allow"/>
        <capability name="ExportImage" mode="Allow"/>
        <capability name="ExportData" mode="Allow"/>
        <capability name="AddComment" mode="Allow"/>
        <capability name="ViewComments" mode="Allow"/>
        <capability name="ShareView" mode="Allow"/>
      </capabilities>
    </granteeCapabilities>
  </permissions>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">bridge-client-id</span></td><td>The unique identifier for the Bridge client to move.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <bridgeClientMoveRequest>
    <moveToNamedPool poolId="abc-123-def-456" />
  </bridgeClientMoveRequest>
</tsRequest>
```

```
{
  "bridgeClientMoveRequest": {
    "moveToNamedPool": {
      "poolId": "abc-123-def-456"
    }
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">poolId</span></td><td>Required when using <code>moveToNamedPool</code>. The UUID of the Bridge pool to move the client to.</td></tr><tr><td><span class="api-placeholder">moveToDefaultPool</span></td><td>Set to <code>true</code> to move the Bridge client to the default pool. Use in place of <code>moveToNamedPool</code>.</td></tr><tr><td><span class="api-placeholder">moveToUnassigned</span></td><td>Set to <code>true</code> to move the Bridge client to unassigned status. Use in place of <code>moveToNamedPool</code>.</td></tr></tbody></table>

#### Response Code

204 No Content

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>BAD_REQUEST</td><td>Multiple operations specified</td><td>Cannot specify more than one move operation in a single request.</td></tr><tr><td>400</td><td>BAD_REQUEST</td><td>No operation / Missing poolId / Invalid poolId</td><td>Request must contain exactly one valid move operation; poolId required for moveToNamedPool and must be a valid UUID.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>404</td><td>503001</td><td>Bridge client not found</td><td>Bridge client with the specified ID does not exist on this site.</td></tr><tr><td>404</td><td>503005</td><td>Pool not found</td><td>The specified poolId does not exist on this site.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503004</td><td>Unexpected server error</td><td>An unexpected error occurred while moving the Bridge client.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <contentLocationRequest>
    <location id="project-luid" type="location-type" />
    <contentAction action="action-type" />
    <resourceList>
      <resource id="database-luid" contentType="asset-type"/>
      <!-- ... more database resources ... -->
    </resourceList>
  </contentLocationRequest>
</tsRequest>
```

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

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">project-luid</span>
                                    </td>
                                    <td>The LUID of the destination project.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">location-type</span>
                                    </td>
                                    <td>
                                        <p>The destination type.  Currently, this value must be "<span class="api-command-ref">PROJECT</span>".</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">action-type</span>
                                    </td>
                                    <td>To move a database without moving its tables, this value must be "<span class="api-command-ref">MoveDatabaseOnly</span>".</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">database-luid</span>
                                    </td>
                                    <td>The LUID of the database.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">asset-type</span>
                                    </td>
                                    <td>The type of asset being moved.  Currently, this value must be "<span class="api-command-ref">DATABASE</span>".</td>
                                </tr>
                            </tbody>
                        </table>

#### 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:**

```
<tsResponse />
```

**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:

```
<tsResponse>
  <error code="400000">
    <summary>Bad Request</summary>
    <detail>There was a problem completing one or more requests.</detail>
  </error>
  <warnings>
    <warning message="Database '12ab34cd-56ef-78ab-90cd-12ef34ab56cd' could not be found."
        id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd"
        errorCode="404031"/>
  </warnings>
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>409100</td><td>Invalid location type</td><td>The <span class="api-command-ref">location</span> element's type attribute must be "<span class="api-command-ref">PROJECT</span>".</td></tr><tr><td>400</td><td>409103</td><td>Invalid content type</td><td>The <span class="api-command-ref">resource</span> element's <span class="api-command-ref">contentType</span> attribute must be "<span class="api-command-ref">DATABASE</span>".</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Insufficient permissions or operation not allowed. Make sure Tableau Catalog is enabled.</td></tr><tr><td>403</td><td>403030</td><td>Permissions denied</td><td>The user does not have permission to move the database.</td></tr><tr><td>403</td><td>403112</td><td>Invalid Operation</td><td>The database may be embedded, and therefore cannot be moved.</td></tr><tr><td>403</td><td>403156</td><td>External assets can not be moved</td><td>The user does not have appropriate permissions.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project LUID doesn't correspond to an existing project.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The 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.</td></tr></tbody></table>

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

#### Example

`curl --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:**

```
<tsRequest>
  <contentLocationRequest>
  <location id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" type="PROJECT" />
    <resourceList>
      <resource id="dd9eb9de-50b3-4f90-a224-e6170e044766" contentType="DATABASE"/>
    </resourceList>
  </contentLocationRequest>
</tsRequest>
```

**Example response:**

```
<tsresponse />
```

## 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

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

#### Request Body

```
<tsRequest>
  <contentLocationRequest>
    <location id="project-luid" type="location-type" />
      <resourceList>
        <resource id="table-luid" contentType="asset-type"/>
        <!-- ...more resources... -->
      </resourceList>
  </contentLocationRequest>
</tsRequest>
```

The resourceList element can contain a minimum of 1 and a maximum of 1000 resource elements.

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">project-luid</span>
                                    </td>
                                    <td>The LUID of the destination project.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">location-type</span>
                                    </td>
                                    <td>
                                        <p>The destination type.  Currently, this value must be "<span class="api-command-ref">PROJECT</span>".</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">table-luid</span>
                                    </td>
                                    <td>The LUID of the table.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">asset-type</span>
                                    </td>
                                    <td>The type of asset being moved.  Currently, this value must be "<span class="api-command-ref">TABLE</span>".</td>
                                </tr>
                            </tbody>
                        </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:**

```
<tsResponse />
```

**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:

```
<tsResponse>
  <error code="400000">
    <summary>Bad Request</summary>
    <detail>There was a problem completing one or more requests.</detail>
  </error>
  <warnings>
    <warning message="Table '12ab34cd-56ef-78ab-90cd-12ef34ab56cd' could not be found."
      id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd"
      errorCode="404032"/>
    </warnings>
</tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>409100</td><td>Invalid location type</td><td>The <span class="api-command-ref">location</span> element's type attribute must be "<span class="api-command-ref">PROJECT</span>".</td></tr><tr><td>400</td><td>409103</td><td>Invalid content type</td><td>The <span class="api-command-ref">resource</span> element's <span class="api-command-ref">contentType</span> attribute must be "<span class="api-command-ref">TABLE</span>".</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Insufficient permissions or operation not allowed. Make sure Tableau Catalog is enabled.</td></tr><tr><td>403</td><td>403030</td><td>Permissions denied</td><td>The user does not have permission to move the table.</td></tr><tr><td>403</td><td>403112</td><td>Invalid Operation</td><td>The table may belong to an embedded database, and therefore cannot be moved.</td></tr><tr><td>403</td><td>403156</td><td>External assets can not be moved</td><td>The user does not have appropriate permissions.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project LUID doesn't correspond to an existing project.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The 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.</td></tr></tbody></table>

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

#### Example

`curl --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:**

```
<tsRequest>
  <contentLocationRequest>
  <location id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" type="PROJECT" />
    <resourceList>
      <resource id="ac353e22-3e78-43a7-914f-73e9bd05ec97" contentType="TABLE"/>
    </resourceList>
  </contentLocationRequest>
</tsRequest>
```

**Example response:**

```
<tsresponse />
```

## Organize Favorites

Move an item to organize a user's favorites.

#### URI

PUT /api/api-version/sites/site-id/orderFavorites/user-id

#### Parameter Values

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

#### Request Body

```
<tsRequest>
   <favoriteOrderings>
	<favoriteOrdering favoriteId="favorite-id" favoriteType="content-type" favoriteIdMoveAfter="favorite-id-after" favoriteTypeMoveAfter="content-type" />
   </favoriteOrderings>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">favorite-id</span>
                                            </td>
                                            <td>The ID&nbsp;of the favorite you want to move.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">content-type</span>
                                            </td>
                                            <td>

                                    The content type of a favorite. To specify the type, use one of the following values:
                                <ul><li><span class="uicontrol">datasource</span></li><li><span class="uicontrol">workbook</span></li><li><span class="api-command-ref">view</span></li><li><span class="api-command-ref">project</span></li><li><span class="api-command-ref">flow</span></li></ul>                                These values are not case sensitive.
                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">favorite-id-after</span>
                                            </td>
                                            <td>The ID&nbsp;of the favorite that should follow, or come after, the favorite you want to move.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><td>403</td><td>403004</td><td>Forbidden Favorites access</td><td>A non-administrator user called this method but doesn't have permission to view the specified user's favorites.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404010</td><td>Favorite not found</td><td>The favorite ID&nbsp;specified doesn't correspond to a user's favorite.</td></tr></tbody></table>

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

## 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/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#update_data_source) or [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 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/current/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/current/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/current/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

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">api-version</span>
                                    </td>
                                    <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">site-luid</span>
                                    </td>
                                    <td>The LUID of the site to publish to.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">overwrite-flag</span>
                                    </td>
                                    <td><span class="api-command-ref">true</span> to overwrite a data source that has the same name, or <span class="api-command-ref">false</span>
                                        to fail if the specified data source already exists. The default is <span class="api-command-ref">false</span>. If <span class="api-placeholder">overwrite-flag</span>
                                        is set to <span class="api-command-ref">true</span> but the data source doesn't already exist, the operation succeeds.
                                        <p>You can include both the  <span class="api-command-ref">overwrite</span> and <span class="api-command-ref">append</span> parameters in a request, but they cannot both be <span class="api-command-ref">true.</span></p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">replace-flag</span>
                                    </td>
                                    <td>(New in 2025.1) A boolean value (<strong>true </strong>or <strong>false</strong>). Set to <strong>true </strong>to replace the data in an existing data source. The default is <strong>false</strong>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">asJob-value</span>
                                    </td>
                                    <td>A Boolean value that is used to publish data sources asynchronously. If you set this value to <i>false</i> (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 <i>true</i>, 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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#query_job">Query Job</a>.
									</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">append-flag</span>
                                    </td>
                                    <td><span class="api-command-ref">true</span> to append the data being published to an existing data source that has the same name. The default
                                        is <span class="api-command-ref">false</span>. If <span class="api-placeholder">append-flag</span>
                                        is set to <span class="api-command-ref">true</span> but the data source doesn't already exist, the operation fails.
                                <p>
									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 <code>.hyper</code> or <code>.tde</code>. The schema of the source and the published extract must match.
								</p><p>If an extract was stored using the multiple tables option, you can't append data to it.</p><p>You can include both the  <span class="api-command-ref">overwrite</span> and <span class="api-command-ref">append</span> parameters in a request, but they cannot both be <span class="api-command-ref">true.</span></p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">upload-session-luid</span>
                                    </td>
                                    <td>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
                                        <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload"><span class="api-command-ref">Initiate File Upload</span></a>. If this value is not included, the server assumes
                                        that the body of the request contains the file to be published.
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-file-type</span>
                                    </td>
                                    <td><span class="api-command-ref">hyper</span>, <span class="api-command-ref">tds</span>, <span class="api-command-ref">tdsx</span>, or <span class="api-command-ref">tde</span> the kind of file
                                        that you are uploading. This value is required if you are calling <span class="api-command-ref">Publish Data Source</span> in order to
                                        commit a file that was previously uploaded using <span class="api-command-ref">Append to File Upload</span>. The value is not used if you upload a file in the
                                        body of the request.
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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
<tsRequest>
	<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</parentDataSourceUrls>
	</datasource>
</tsRequest>
--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
<tsRequest>
	<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</parentDataSourceUrls>
	</datasource>
</tsRequest>
	--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

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">boundary-string</span>
                                    </td>
                                    <td>(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:
                                        <p><code>Content-type: multipart/mixed; boundary=boundary-string</code></p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-name</span>
                                    </td>
                                    <td>(Required) The name to assign to the data source when it is saved on the server.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">remote-query-agent-flag</span>
                                    </td>
                                    <td>(Optional) When <code>true</code>, this flag will <a href="https://help.tableau.com/current/online/en-us/to_enable_bridge_live_connections.htm" target="_blank">allow your Tableau Cloud site to use Tableau Bridge clients</a>. Bridge allows you to maintain data sources with live connections to supported on-premises data sources.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-description</span>
                                    </td>
                                    <td>(Optional) A description of the data source.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">connection-username</span>
                                    </td>
                                    <td>(Optional) If the data source connection requires credentials, the <span class="api-command-ref">&lt;connectionCredentials&gt;</span> 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.<p>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.)</p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">connection-password</span>
                                    </td>
                                    <td>(Optional) If the data source connection requires credentials, the <span class="api-command-ref">&lt;connectionCredentials&gt;</span> 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.<p>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.)</p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">embed-flag</span>
                                    </td>
                                    <td>(Optional) If the data source connection requires credentials, the <span class="api-command-ref">&lt;connectionCredentials&gt;</span> element is included. Setting this attribute to <span class="api-command-ref">true</span> instructs the server to save the credentials.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">oauth-flag</span>
                                    </td>
                                    <td>(Optional) If the data source connection is configured to use OAuth, set this to <code class="api-command-ref">true</code> to specify
									that the value of the <span class="api-command-ref">name</span> attribute in the
									<span class="api-command-ref">connectionCredentials</span> element is an OAuth username. In that case, no password is
									required and the value of the <span class="api-command-ref">embed</span> attribute specifies whether to embed the OAuth
									credential with the data source.<p>If your auth type allows secrets to be passed as generic username and password variables, set the <span class="api-command-ref">oAuth</span> attribute to <code>false</code>. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)</p><p>For more information on OAuth, see the OAuth Connections section of the <a href="https://help.tableau.com/current/online/en-us/protected_auth.htm" target="_blank">Tableau Cloud</a> or <a href="https://help.tableau.com/current/server/en-us/protected_auth.htm" target="_blank">Tableau Server</a> Product Help.</p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">project-id</span>
                                    </td>
                                    <td>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.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">datasource-file-name</span>
                                    </td>
                                    <td>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.
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">	content-of-datasource-file</span>
                                    </td>
                                    <td>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&nbsp;MB.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">askDataEnablement</span>
                                    </td>
                                    <td>
									This attribute is not available in API 3.12 and later (Tableau Cloud September 2021 / Server 2021.3).
								</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">parentDataSourceUrls</span>
                                    </td>
                                    <td>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.
</td>
                                </tr>
                            </tbody>
                        </table>

#### 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**:

```
<tsRequest>
  <datasource name="datasource1" description="This is a data source named datasource1." >
    <project id="522dc5c5-e1da-47b9-8e07-f02929ff5ceb" />
  </datasource>
</tsRequest>
```

#### Response Code

201

#### Response Body

```
<tsResponse>
  <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/>
  </datasource>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The request message is missing or incomplete, or contains malformed XML. Make sure that the <span class="api-command-ref">Content-Length</span> value is set.</td></tr><tr><td>400</td><td>400000</td><td>Missing data source</td><td>There is no attachment in the request for the data source.</td></tr><tr><td>400</td><td>400008</td><td>Invalid <span class="api-command-ref">overwrite</span> value</td><td>The <span class="api-command-ref">overwrite</span> parameter must be set to <span class="api-command-ref">true</span> or <span class="api-command-ref">false</span>.</td></tr><tr><td>400</td><td>400008</td><td>Invalid <span class="api-command-ref">append</span> value</td><td>The <span class="api-command-ref">append</span> parameter must be set to <span class="api-command-ref">true</span> or <span class="api-command-ref">false</span>.</td></tr><tr><td>400</td><td>400008</td><td>Invalid <span class="api-command-ref">embed</span> value</td><td>The request body contains a <span class="api-command-ref">&lt;connectionCredentials&gt;</span> element and it has an <span class="api-command-ref">embed</span>&nbsp;attribute whose value is not <span class="api-command-ref">true</span>&nbsp;or&nbsp;<span class="api-command-ref">false</span>.</td></tr><tr><td>400</td><td>400010</td><td>Invalid data source filename</td><td>The name of the data source file did not end with the suffix <code>.hyper</code>, <code>.tds</code>, <code>.tdsx</code>, or <code>.tde</code>.</td></tr><tr><td>400</td><td>400010</td><td>Missing or invalid file type</td><td>The request included an <span class="api-command-ref">uploadSessionId</span>&nbsp;parameter but no file type, or the file type was something other than <span class="api-command-ref">hyper</span>, <span class="api-command-ref">tds</span>, <span class="api-command-ref">tdsx</span>, or <span class="api-command-ref">tde</span>.</td></tr><tr><td>400</td><td>400010</td><td>Unexpected attachments</td><td>The message had both a <span class="api-placeholder">uploadSessionId</span> parameter and an attachment, or the message contained more than one attachment.</td></tr><tr><td>400</td><td>400011</td><td>Publishing error</td><td>The data source could not be published for some other reason than those specified earlier.</td></tr><tr><td>400</td><td>400011</td><td>Bad Request</td><td>The request is invalid. This can occur if more than one of the conflict resolution parameters (<strong>overwrite</strong>, <strong>append</strong>, or <strong>replace</strong>) is set to <code>true</code>. Only one of these parameters can be true in a single request.</td></tr><tr><td>400</td><td>400019</td><td>Malformed request body</td><td>The request message is missing or incomplete, or contains malformed XML. Make sure that the <span class="api-command-ref">Content-Length</span> value is set.</td></tr><tr><td>400</td><td>400055</td><td>Incompatible <span class="api-command-ref">overwrite</span> and <span class="api-command-ref">append</span> values</td><td>The <span class="api-command-ref">overwrite</span> and <span class="api-command-ref">append</span> parameter cannot both be set to <span class="api-command-ref">true</span>.</td></tr><tr><td>400</td><td>400129</td><td>Invalid Ask Data enablement</td><td>The enablement setting in the request body is not valid for the current server configuration.</td></tr><tr><td>403</td><td>403007</td><td>Insufficient publishing permission</td><td>A non-administrator user attempted to publish a data source, but the caller doesn't have sufficient project permissions.</td></tr><tr><td>403</td><td>403007</td><td>Unlicensed publishing forbidden</td><td>A non-administrator user who is unlicensed attempted to publish a data source. This is disallowed for all projects (including the default project).</td></tr><tr><td>403</td><td>403007</td><td>Overwrite forbidden</td><td>A data source with the specified name already exists and the <span class="api-command-ref">overwrite</span> parameter was not set to <span class="api-command-ref">true</span>.</td></tr><tr><td>403</td><td>403007</td><td>Problem connecting to data source</td><td>There was a problem connecting to a data source.&nbsp;This can be due to missing or invalid connection credentials or because the referenced data source is not available on the server.</td></tr><tr><td>403</td><td>403008</td><td>Insufficient storage quota</td><td>The data source could not be published because there is not enough storage remaining on the server to accommodate its size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The <span class="api-command-ref">append</span> parameter is <span class="api-command-ref">true</span> but the data source name specified in the request body does not correspond to an existing data source.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the request body doesn't correspond to an existing project on the site.</td></tr><tr><td>404</td><td>404015</td><td>File upload not found</td><td>The file upload session ID in the request body doesn't correspond to an existing file upload on the site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

## Publish Flow

Publishes a flow on the specified site.

To make other changes to a published flow, call [Update Flow](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#update_flow) or [Update Flow Connection](https://help.tableau.com/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site to publish to.</td></tr><tr><td><span class="api-placeholder">overwrite-flag</span></td><td>(Optional) <span class="api-command-ref">true</span> to overwrite a flow that has the same name, or <span class="api-command-ref">false</span> to fail if the specified flow already exists. The default is <span class="api-command-ref">false</span>. If overwrite-flag is set to <span class="api-command-ref">true</span> but the flow doesn't already exist, the operation succeeds.</td></tr><tr><td><span class="api-placeholder">upload-session-id</span></td><td>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.</td></tr><tr><td><span class="api-placeholder">flow-file-type</span></td><td><span class="api-command-ref">tfl</span> or <span class="api-command-ref">tflx</span> 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.</td></tr></tbody></table>

#### Publishing a file in the Request Body

```
--boundary-string
Content-Disposition: name="request_payload"
Content-Type: text/xml
<tsRequest>
	<flow name="flow-name" >
		<project id="project-id" />
	</flow>
	<connections>
      <connection id="connection-id"
        serverAddress="server-address"
        serverPort="port-number">
          <connectionCredentials
            name="connection-username"
            password="connection-password"
            embed="embed-flag"
            oAuth="oauth-flag" />
		</connection>
	</connections>
</tsRequest>

--boundary-string
Content-Disposition: name="tableau_flow"; filename="flow-file-name"
Content-Type: application/octet-stream
content-of-flow-file
--boundary-string--
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">boundary-string</span>
                                    </td>
                                    <td>(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:
                                        <p><code>Content-type: multipart/mixed; boundary=boundary-string</code></p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">name</span>
                                    </td>
                                    <td>The name to assign to the flow when it is saved on the server.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">description</span>
                                    </td>
                                    <td>The description of the flow.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">server-address</span>
                                    </td>
                                    <td>Specify the server address for an input connections.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">port-number</span>
                                    </td>
                                    <td>Specify the port number for input connections.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">connection-username</span>
                                    </td>
                                    <td>(Optional) If the flow input connections require credentials, the &lt;connectionCredentials&gt; 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.<p>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.)</p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">connection-password</span>
                                    </td>
                                    <td>(Optional) If the flow input connections require credentials, the &lt;connectionCredentials&gt; 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.<p>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.)</p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">embed-flag</span>
                                    </td>
                                    <td>(Optional) If the flow input connection requires credentials, the &lt;connectionCredentials&gt; element is included. Setting this attribute to <span class="api-command-ref">true</span> instructs the server to save the credentials. </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">oauth-flag</span>
                                    </td>
                                    <td>
                                        <p>(Optional) If the flow input connection is configured to use OAuth, set this to <code>true</code> to specify that the value of the name attribute in the <span class="api-command-ref">connectionCredentials</span> element is an OAuth username. In that case, no password is required and the value of the <span class="api-command-ref">embed</span> attribute specifies whether to embed the OAuth credential with the data source.</p>
                                        <p>If your auth type allows secrets to be passed as generic username and password variables, set the <span class="api-command-ref">oAuth</span> attribute to <code>false</code>. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)</p>
                                        <p>For more information on OAuth, see the OAuth Connections section of the <a href="https://help.tableau.com/current/online/en-us/protected_auth.htm" target="_blank">Tableau Cloud</a> or <a href="https://help.tableau.com/current/server/en-us/protected_auth.htm" target="_blank">Tableau Server</a> Product Help.

                                    </p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">project-id</span>
                                    </td>
                                    <td>The ID of the project to assign the flow to.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">content-of-flow-file</span>
                                    </td>
                                    <td>The file itself if you are including it in the request body.</td>
                                </tr>
                            </tbody>
                        </table>

#### Response Code

201

#### Response Body

```
<tsResponse>
      <flow id="770a1cf8-6abe-4bc3-b0b8-59c4b15ce959"
            name="ShortTermRentalNola222"
            description=""
            webpageUrl="http://localhost/#/flows/3"
            fileType="tflx" createdAt="2018-11-20T19:28:58Z"
            updatedAt="2018-11-20T19:28:58Z">
           <project id="9077e04c-ece4-11e8-aa58-df538c72f42f"
            name="Default" />
           <owner id="5a39de9c-4eb0-47a7-88f7-2e78ddd58c6b" />
      </flow>
</tsResponse>
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Malformed request body</td><td>The XML content in the MIME multipart request is not empty.</td></tr><tr><td>400</td><td>400089</td><td>Missing flow name</td><td>Flow name is required and was not specified.</td></tr><tr><td>403</td><td>403007</td><td>Invalid permissions</td><td>The caller does not have the necessary permissions to publish the flow.&nbsp;</td></tr><tr><td>400</td><td>400090</td><td>Missing flow payload</td><td>The flow information (the structure containing the flow description, flow project) was not included in the request body.</td></tr><tr><td>400</td><td>400086</td><td>Invalid flow attachment</td><td>The name of the flow doesn't end in .tfl or .tflx.</td></tr><tr><td>400</td><td>400087</td><td>Generic flow publishing error</td><td>The flow could not be published for some other reason than those specified earlier.</td></tr><tr><td>409</td><td>409041</td><td>Flow already found in destination</td><td>The flow name should be unique, or the overwrite flag parameter should be set to <span class="api-command-ref">true</span>.</td></tr><tr><td>403</td><td>403008</td><td>Insufficient storage quota</td><td>The flow could not be published because there is not enough storage remaining on the server to accommodate its size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the request body doesn't correspond to an existing project on the site.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

## 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/current/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/current/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/current/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/current/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/current/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

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">api-version</span>
                                    </td>
                                    <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">site-id</span>
                                    </td>
                                    <td>The LUID of the site to publish to.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">publish-as-draft-flag</span>
                                    </td>
                                    <td>(Optional) <span class="api-command-ref">true</span> to publish the virtual connection as a draft, or <span class="api-command-ref">false</span> to publish it as an active virtual connection. The default is <span class="api-command-ref">true</span>. This parameter applies only when you publish a JSON representation. The parameter is case sensitive.
                        <p>If the virtual connection contains an extract, the <span class="api-command-ref">publishAsDraft</span> parameter value is ignored and the virtual connection is published as a draft.</p><p class="note"><b>Note:</b> If you are using the REST&nbsp;API to publish a virtual connection as a draft, note the virtual connection's LUID (<code>virtualconnection id</code>) 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"&nbsp;in the <a href="https://help.tableau.com/current/online/en-us/dm_vconn_publish_save.htm#draft-in-progress" target="_blank">Tableau Cloud Product Help</a> and <a href="https://help.tableau.com/current/server/en-us/dm_vconn_publish_save.htm#draft-in-progress" target="_blank">Tableau Server Product Help</a>.</p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">overwrite-flag</span>
                                    </td>
                                    <td><span class="api-command-ref">true</span> to overwrite a virtual connection that has the same name in the target project, or <span class="api-command-ref">false</span>
                                        to fail if the specified virtual connection already exists. The default is <span class="api-command-ref">false</span>. If <span class="api-placeholder">overwrite-flag</span>
                                        is set to <span class="api-command-ref">true</span> but the virtual connection doesn't already exist, the operation succeeds.
                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">upload-session-id</span>
                                    </td>
                                    <td>(Optional, <code>.tvcx</code> 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
                                        <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload"><span class="api-command-ref">Initiate File Upload</span></a>. If this value is not included, the server assumes
                                        that the body of the request contains the file to be published.
                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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

<tsRequest>
  <virtualConnection name="virtualconnection-name">
    <project id="project-id" />
    <owner id="owner-id" />
  </virtualConnection>
</tsRequest>
--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

<tsRequest>
  <virtualConnection name="virtualconnection-name">
    <project id="project-id" />
    <owner id="owner-id" />
  </virtualConnection>
</tsRequest>
--boundary-string--
```

**Publishing a JSON representation**

```
<tsRequest>
  <virtualConnection name="virtualconnection-name">
    <project id="project-id" />
    <owner id="owner-id" />
    <content>virtualconnection-as-json</content>
  </virtualConnection>
</tsRequest>
```

```
{
  "virtualConnection": {
    "project": {
      "id": "project-id"
    },
    "owner": {
      "id": "owner-id"
    },
    "content": "virtualconnection-as-json",
    "name": "virtualconnection-name"
  }
}
```

#### Request Attributes

**For a .tvcx file**

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">boundary-string</span>
                                    </td>
                                    <td>(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:
                                        <p><code>Content-type: multipart/mixed; boundary=boundary-string</code></p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnection-name</span>
                                    </td>
                                    <td>(Required) The name to assign to the virtual connection when it is saved on the server. This is typically derived from the file name.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">project-id</span>
                                    </td>
                                    <td>(Optional) The LUID of the project to publish to. If you omit it, the virtual connection is published to the default project.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">owner-id</span>
                                    </td>
                                    <td>(Optional) The LUID of the owner of the virtual connection. If you omit it, the authenticated user becomes the owner.</td>
                                </tr>
                                <tr>
                                    <td><code>tableau_virtual_connection</code> file part
                    </td>
                                    <td>The <code>.tvcx</code> 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 <code>uploadSessionId</code> parameter, or if you include neither, the request fails.</td>
                                </tr>
                            </tbody>
                        </table>

**For a JSON representation**

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnection-name</span>
                                    </td>
                                    <td>The name of the virtual connection you are publishing. If publishing an existing virtual connection as a revision, the virtual connection name is ignored.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">project-id</span>
                                    </td>
                                    <td>The LUID of the project you are publishing to.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">owner-id</span>
                                    </td>
                                    <td>This attribute is required, but is ignored.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">virtualconnection-as-json</span>
                                    </td>
                                    <td>
                                        <p>The virtual connection schema rendered as JSON, as obtained using the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json">Download Virtual Connection as JSON</a> or <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_revision_as_json">Download Virtual Connection Revision as JSON</a> method. The schema appears in the <span class="uicontrol">content</span> element (for XML output) or <span class="uicontrol">content</span> property (for JSON output).</p>
                                        <p><strong>Note:</strong> Changing the downloaded schema and then using it with this method isn't supported.</p>
                                        <p>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.</p>
                                        <p>In other words:</p>
                                        <ul>
                                            <li>If the output of the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json">Download Virtual Connection as JSON</a> method was XML (except for the <code>content</code> element, which is always a form of JSON), use XML when using this Publish Virtual Connection method.</li>
                                            <li>If the output of the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#download_virtual_connection_as_json">Download Virtual Connection as JSON</a> method was JSON (in which case it will have escape characters in the <code>content</code> property), use JSON when using this Publish Virtual Connection method.</li>
                                            <li>Alternatively, you can escape or unescape the schema yourself if you are downloading and publishing using different formats.</li>
                                        </ul>
                                        <p>For more information on the difference between using XML and using JSON with the REST&nbsp;API, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_fundamentals.htm#Using" class="xref">Fundamentals of the Tableau Server REST API</a>.</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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**:

```
<tsRequest>
  <virtualConnection name="Batters">
    <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e"/>
    <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
    <content>virtualconnection-as-json</content>
  </virtualConnection>
</tsRequest>
```

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/current/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.

```
<tsResponse>
  <virtualConnection id="virtualconnection-id" name="virtualconnection-name">
    <project id="project-id" />
  </virtualConnection>
</tsResponse>
```

```
{
  "virtualConnection": {
    "project": {
      "id": "project-id"
    },
    "id": "virtualconnection-id",
    "name": "virtualconnection-name"
  }
}
```

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad request</td>
                                    <td>
                                        <p>When you publish a .tvcx file, the request is not valid for one of these reasons:</p>
                                        <ul>
                                            <li>The request does not include <code>request_payload</code> or the <code>virtualConnection</code> element.</li>
                                            <li>The <code>virtualConnection</code> element does not include a <code>name</code>.</li>
                                            <li>The request includes both the .tvcx file and <code>uploadSessionId</code>, or it includes neither. Include only one.</li>
                                            <li>The file for the <code>uploadSessionId</code> is no longer available.</li>
                                            <li>The .tvcx file is not valid.</li>
                                            <li>The virtual connection could not be published with the extract in the .tvcx file.</li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400201</td>
                                    <td>Publish virtual connection error</td>
                                    <td>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.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403008</td>
                                    <td>Insufficient site storage</td>
                                    <td>The content would exceed the site's storage quota. Applies when publishing a .tvcx file.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403175</td>
                                    <td>Publish virtual connection forbidden</td>
                                    <td>The user does not have permission to publish the virtual connection.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404015</td>
                                    <td>File upload not found</td>
                                    <td>The <code>uploadSessionId</code> does not match an upload owned by the user. Applies when publishing a .tvcx file.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404049</td>
                                    <td>Virtual connection not found</td>
                                    <td>The virtual connection could not be found while publishing it with the extract in the .tvcx file.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>Request type was not <span class="api-command-ref">POST</span>.</td>
                                </tr>
                                <tr>
                                    <td>409</td>
                                    <td>409123</td>
                                    <td>Virtual connection exists</td>
                                    <td>A virtual connection with the same name already exists in the project and <code>overwrite</code> is false. Applies when publishing a .tvcx file.</td>
                                </tr>
                            </tbody>
                        </table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (<code>authUser.getSiteLuid()</code>).</td></tr><tr><td><span class="api-placeholder">workcopy-luid</span></td><td>The LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching <code>[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}</code>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <datasource name="Quarterly Sales" description="Quarterly sales rollup." />
</tsRequest>
```

```
{
  "datasource": {
    "name": "Quarterly Sales",
    "description": "Quarterly sales rollup."
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">datasource</span></td><td>Required. Published data source name and optional description. Other data source fields are not read by this method.</td></tr><tr><td><span class="api-placeholder">datasource.name</span></td><td>Required. Name of the data source to publish. A null, empty, or whitespace-only value is HTTP 400 with error code <code>400008</code>.</td></tr><tr><td><span class="api-placeholder">datasource.description</span></td><td>Optional. Description of the published data source. May be null, empty, or whitespace.</td></tr></tbody></table>

#### Response Code

201 Created

#### Response Body

Returns the published data source's identifiers in `tdsWorkCopy`. The response includes `datasourceLuid` but not `workCopyLuid`.

```
<tsResponse>
  <tdsWorkCopy>
    <datasourceLuid>a1b2c3d4-e5f6-4321-8765-1234567890ab</datasourceLuid>
  </tdsWorkCopy>
</tsResponse>
```

```
{
  "tdsWorkCopy": {
    "datasourceLuid": "a1b2c3d4-e5f6-4321-8765-1234567890ab"
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsWorkCopy</span></td><td>Required. Work copy and published data source identifiers.</td></tr><tr><td><span class="api-placeholder">tdsWorkCopy.workCopyLuid</span></td><td>Optional. LUID of the work copy. Not returned by this method; returned by Create Work Copy.</td></tr><tr><td><span class="api-placeholder">tdsWorkCopy.datasourceLuid</span></td><td>LUID of the newly published data source.</td></tr></tbody></table>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Datasource name missing</td><td>The published data source name is missing or blank.</td></tr><tr><td>400</td><td></td><td>Invalid work copy LUID</td><td>The work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Data Management Bundle not licensed</td><td>On Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.</td></tr><tr><td>403</td><td>403004</td><td>Unable to resolve tenant</td><td>On Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.</td></tr><tr><td>403</td><td>403004</td><td>No cloud entitlements</td><td>On Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td>403004</td><td>Subscription not entitled</td><td>On Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>404</td><td></td><td>Work copy not found or not visible to the caller</td><td>The work copy LUID in the URI doesn't correspond to an existing work copy, or the caller doesn't have permission to access it.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The HTTP method is not supported for this resource.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td></td><td>Unknown error</td><td>There was an internal server error.</td></tr><tr><td>503</td><td></td><td>Service unavailable</td><td>Service unavailable.</td></tr></tbody></table>

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

## Publish Workbook

Publishes a workbook on the specified site.

To make changes to a published workbook, call [Update Workbook](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#update_workbook) or [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 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/current/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/current/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/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site to publish to.</td></tr><tr><td><span class="api-placeholder">overwrite-flag</span></td><td>(Optional) <span class="api-command-ref">true</span> to overwrite a workbook that has the same name, or <span class="api-command-ref">false</span> to fail if the specified workbook already exists. The default is <span class="api-command-ref">false</span>. If <span class="api-placeholder">overwrite-flag</span> is set to <span class="api-command-ref">true</span> but the workbook doesn't already exist, the operation succeeds.</td></tr><tr><td><span class="api-placeholder">asJob-value</span></td><td>(Optional, boolean) If <code>false</code>, 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 <i>true</i>, 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 <a href="#query_job">Query Job</a>. Default value is <code>false</code>.</td></tr><tr><td><span class="api-placeholder">skip-connection-check-flag</span></td><td>(Optional, boolean) If <code>true</code>, 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 <a href="https://help.tableau.com/current/online/en-us/to_keep_data_fresh.htm" rel="noopener" target="_blank">Keep Data Fresh guidelines</a>. Default value is <code>false</code>.</td></tr><tr><td><span class="api-placeholder">upload-session-id</span></td><td>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload"><span class="api-command-ref">Initiate File Upload</span></a>. If this value is not included, the server assumes that the body of the request contains the file to be published.</td></tr><tr><td><span class="api-placeholder">workbook-file-type</span></td><td><span class="api-command-ref">twb</span> or <span class="api-command-ref">twbx</span> to indicate whether you have uploaded a workbook file (twb) or a packaged workbook file (twbx). This value is required if you are calling <span class="api-command-ref">Publish Workbook</span> in order to commit a file that was previously uploaded using <span class="api-command-ref">Append to File Upload</span>. The value is not used if you upload a file in the body of the request.</td></tr></tbody></table>

#### 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
<tsRequest>
  <workbook
    name="workbook-name"
    showTabs="show-tabs-flag"
    description="workbook-description"
    thumbnailsUserId="user-luid">
    <connections>
      <connection
        serverAddress="server-address"
        serverPort="port-number">
        <connectionCredentials
          name="connection-username"
          password="connection-password"
          embed="embed-flag"
          oAuth="oauth-flag" />
      </connection>
    </connections>
    <project id="project-id"/>
  </workbook>
</tsRequest>
--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
<tsRequest>
  <workbook
    name="workbook-name"
    showTabs="show-tabs-flag"
    description="workbook-description"
    thumbnailsUserId="user-luid" >
    <connections>
      <connection
        serverAddress="server-address"
        serverPort="port-number">
        <connectionCredentials
          name="connection-username"
          password="connection-password"
          embed="embed-flag"
          oAuth="oauth-flag" />
      </connection>
    </connections>
    <project id="project-id"/>
  </workbook>
</tsRequest>
--boundary-string--
```

**Hiding a view when publishing a workbook**

```
--boundary-string
Content-Disposition: name="request_payload"
Content-Type: text/xml
<tsRequest>
  <workbook
    name="workbook-name"
    showTabs="show-tabs-flag"
    description="workbook-description"
    thumbnailsUserId="user-luid" >
    <connections>
      <connection
        serverAddress="server-address"
        serverPort="port-number">
        <connectionCredentials
          name="connection-username"
          password="connection-password"
          embed="embed-flag"
          oAuth="oauth-flag" />
	  </connection>
	</connections>
	<views>
      <view
        name="view-name"
        hidden="hide-view-flag" />
	</views>
	<project id="project-id"/>
  </workbook>
</tsRequest>
--boundary-string--
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">boundary-string</span>
                                    </td>
                                    <td>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:
                                        <p><code>Content-type: multipart/mixed; boundary=<span class="api-placeholder">boundary-string</span></code></p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">workbook-name</span>
                                    </td>
                                    <td>The name to assign to the workbook when it is saved on the server.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">workbook-description</span>
                                    </td>
                                    <td>(Optional) Starting in API&nbsp;3.20, the description for the workbook.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">show-tabs-flag</span>
                                    </td>
                                    <td>(Optional) Specify <span class="api-command-ref">true</span> to have the published workbook show views in tabs; otherwise, <span class="api-command-ref">false</span>. The default is <span class="api-command-ref">false</span>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">user-luid</span>
                                    </td>
                                    <td>(Optional) The LUID of the user to generate thumbnails as. You can get the user LUID by calling <a href="#get_users_on_site">Get Users on Site</a>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">server-address</span>
                                    </td>
                                    <td>(Optional) Specify the server address for a data source connection if that data source does not use OAuth.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">port-number</span>
                                    </td>
                                    <td>(Optional) Specify the port number for a data source connection if that data source does not use OAuth.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">connection-username</span>
                                    </td>
                                    <td>(Optional) If the workbook's data source connections require credentials, the
								    <span class="api-command-ref">&lt;connectionCredentials&gt;</span> 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.<p>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.)</p><p><b>Note:</b> 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.</p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">connection-password</span>
                                    </td>
                                    <td>(Optional) If the workbook's data source connections require credentials, the
									<span class="api-command-ref">&lt;connectionCredentials&gt;</span> 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.<p>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.)</p><p><b>Note:</b> 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.</p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">embed-flag</span>
                                    </td>
                                    <td>(Optional) If the workbook's data source connection requires credentials, the <span class="api-command-ref">&lt;connectionCredentials&gt;</span> element is included.
                                        Setting this attribute to <span class="api-command-ref">true</span> instructs the server to save the credentials for when the data source is used.
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">oauth-flag</span>
                                    </td>
                                    <td>(Optional) If the workbook's data source connection is configured to use OAuth, set this to <code>true</code> to specify that the value of the <span class="api-command-ref">name</span> attribute
                                    in the <span class="api-command-ref">&lt;connectionCredentials&gt;</span> element is an
                                        OAuth username. In that case, no password is required and the value of the <span class="api-command-ref">embed</span> attribute specifies
                                        whether to embed the OAuth credential with the workbook, and the server address and port number are not required.<p>If your auth type allows secrets to be passed as generic username and password variables, set the <span class="api-command-ref">oAuth</span> attribute to <code>false</code>. (Example auth types include 2-legged OAuth, like Service Principal OAuth with Databricks and Client Credentials OAuth with Snowflake.)</p><p>For more information on OAuth, see the OAuth Connections section of the <a href="https://help.tableau.com/current/online/en-us/protected_auth.htm" target="_blank">Tableau Cloud</a> or <a href="https://help.tableau.com/current/server/en-us/protected_auth.htm" target="_blank">Tableau Server</a> Product Help.

                                    </p></td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">hide-view-flag</span>
                                    </td>
                                    <td>Setting this flag to <code>true</code> will cause the named view to be hidden in the published workbook. The default value is <code>false</code>.
							You can specify any number of views to hide. If all views in a workbook are hidden the server will not perform a publish.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">project-id</span>
                                    </td>
                                    <td>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.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">workbook-file-name</span>
                                    </td>
                                    <td>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.
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">content-of-workbook-file</span>
                                    </td>
                                    <td>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&nbsp;MB.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">encryptExtracts</span>
                                    </td>
                                    <td>(Optional) <b>true</b> to encrypt the extracts or <b>false</b> to not encrypt extracts. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm" class="xref">Extract and Encryption Methods</a>.</td>
                                </tr>
                            </tbody>
                        </table>

#### Response Code

201

#### Response Body

```
<tsResponse>
  <workbook
    id="workbook-id"
	  name="workbook-name"
	  contentUrl="site-content-url"
	  webpageUrl="server-address"
	  showTabs="show-tabs-flag"
	  size="num-size"
	  createdAt="workbook-publish-date-time"
	  updatedAt="workbook-update-date-time"
	  encryptExtracts="encryptExtracts" >
 	    <project id="project-id" name="project-name"/>
	    <owner id="workbook-owner-id"/>
	    <tags/>
	    <views>
	      <view
	        id="view-id"
	     	name="view-name"
	        contentUrl="view-content-url"
	        createdAt="view-publish-date-time"
	        updatedAt="view-update-date-time" >
	          <tags/>
	 	  </view>
	  <materializedViewsEnablementConfig materializedViewsEnabled="materialized-views-enabled-flag"/>
  </workbook>
</tsResponse>
```

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):

```
<tsRequest>
	<workbook name="test1" showTabs="true" >
	<project id=""/>
	<views>
	<view name="Test Sheet 1" hidden="true" />
	</views>
	</workbook>
</tsRequest>
```

**Example response:**

```
<tsResponse>
	<workbook
		id="1e40f015-ac41-4377-8238-544f70d36150"
		name="test1" contentUrl="test1"
		webpageUrl="http://MY_SERVER/#/workbooks/3"
		showTabs="true"
		size="1"
		createdAt="2019-04-03T21:24:58Z"
		updatedAt="2019-04-03T21:25:02Z"
		encryptExtracts="false">
		  <project id="e6e94e18-349f-11e9-a794-13e5e0f21c22" name="Default"/>
		  <owner id="1473347e-b0c6-4f1f-bcac-7927ee1a690e"/>
	 	  <tags/>
		  <views>
			<view
			  id="0f0d33ac-027d-42a7-94bf-4f0b13e07652"
			  name="Sheet 1"
			  contentUrl="test1/sheets/Sheet1"
			  createdAt="2019-04-03T21:25:02Z"
		      updatedAt="2019-04-03T21:25:02Z">
			  <tags/>
			</view>
		 <materializedViewsEnablementConfig materializedViewsEnabled="false"/>
	</workbook>
</tsResponse>
```

#### Response Headers

Location: /api/3.29/sites/site-id/workbooks/workbook-id

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Malformed request body</td><td>The XML content in the MIME multipart request is not empty.</td></tr><tr><td>400</td><td>400000</td><td>Missing workbook</td><td>There is no attachment in the request and no <span class="api-command-ref">uploadSessionID</span> parameter.</td></tr><tr><td>400</td><td>400000</td><td>Unexpected attachments</td><td>The message had both an <span class="api-command-ref">uploadSessionId</span> parameter and an attachment, or the request body contained more than one attachment.</td></tr><tr><td>400</td><td>400008</td><td>Invalid <span class="api-command-ref">embed</span> value</td><td>The request body contains a <span class="api-command-ref">&lt;connectionCredentials&gt;</span> element and it has an <span class="api-command-ref">embed</span>&nbsp;attribute whose value is not <span class="api-command-ref">true</span>&nbsp;or&nbsp;<span class="api-command-ref">false</span>.</td></tr><tr><td>400</td><td>400008</td><td>Invalid overwrite value</td><td>The overwrite parameter must be <span class="api-command-ref">true</span> or <span class="api-command-ref">false</span>.</td></tr><tr><td>400</td><td>400011</td><td>Publishing error</td><td>The workbook could not be published for some other reason than those specified earlier.</td></tr><tr><td>400</td><td>400020</td><td>Invalid workbook file name</td><td>The name of the workbook doesn't end in <code>.twb</code> or <code>.twbx</code>.</td></tr><tr><td>400</td><td>400035</td><td>Missing or invalid file type</td><td>The request included an <span class="api-command-ref">uploadSessionId</span> parameter but no file type, or the file type was something other than <code>.twb</code> or <code>.twbx</code>.</td></tr><tr><td>403</td><td>403007</td><td>Insufficient publishing permission</td><td>A non-administrator user attempted to publish a workbook, but the caller doesn't have sufficient project permissions.</td></tr><tr><td>403</td><td>403007</td><td>Unlicensed publishing forbidden</td><td>A non-administrator user attempted to publish a workbook. This is disallowed for all projects (including the default project).</td></tr><tr><td>403</td><td>403007</td><td>Overwrite forbidden</td><td>A workbook with the specified name already exists and the <span class="api-command-ref">overwrite</span> parameter was not set to <span class="api-command-ref">true</span>.</td></tr><tr><td>403</td><td>403007</td><td>Problem connecting to data source</td><td>There was a problem connecting to a data source used by the workbook.&nbsp;This can be due to missing or invalid connection credentials or because the referenced data source is not available on the server.</td></tr><tr><td>403</td><td>403008</td><td>Insufficient storage quota</td><td>The workbook could not be published because there is not enough storage remaining on the server to accommodate its size.</td></tr><tr><td>403</td><td>403130</td><td>Publishing overwrite</td><td>A workbook with the same name already exists.</td></tr><tr><td>403</td><td>403131</td><td>Concurrent update</td><td>The workbook is already being published in another process.</td></tr><tr><td>403</td><td>403132</td><td>Failed connection check</td><td>One or more data sources used by the workbook could not be reached.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the request body doesn't correspond to an existing project on the site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The user specified overwrite as <span class="api-command-ref">true</span> but no workbook with the specified name exists on the site.</td></tr><tr><td>404</td><td>404015</td><td>File upload not found</td><td>The file upload session ID in the <span class="api-command-ref">uploadSessionId</span> parameter doesn't correspond to an existing file upload on the site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-id</span>
                                        </td>
                                        <td>The unique ID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-type</span>
                                        </td>
                                        <td>
                                            <p>
                            The type of content that the quality warning trigger has been applied to. To specify the  type, use one of the following values:
</p>
                                            <ul>
                                                <li> <span class="uicontrol">datasource</span></li>
                                                <li><span class="uicontrol">flow</span>
                                                </li>
                                            </ul>
                                            <p>These values are not case sensitive.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-luid</span>
                                        </td>
                                        <td>
                            The unique ID of the asset. This is the same as the content ID.
                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### 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**

```
<tsResponse>
  <dataQualityTriggerList>
	<dataQualityTrigger id="{trigger-luid}" siteId="{site-luid}"
		userId="f95180e7-0c64-4a58-86da-b9f4d3db2583" userDisplayName="Mark Nguyen" contentId="a34884d0-1d80-4505-bf21-c6b7ce10814a"
		contentType="DATASOURCE" message=" This message is specified by the user."
		type="EXTRACT_REFRESH" active="true" createdAt="Wed Sep 22 05:49:52 UTC 2020"
		updatedAt="Wed Sep 22 05:49:52 UTC 2020" severe="false"/>
  </dataQualityTriggerList>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400134</td><td>Generic quality warning trigger error</td><td>The quality warning triggers could not be queried for some other reason than those specified below.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404037</td><td>Quality warning not found</td><td>The requested quality warning trigger was not found.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

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

#### 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:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.5.xsd">
	<column id="0b589fc9-1523-4aae-b711-62d48672ac6a" name="StateProvinceID" remoteType="I4" parentTableId="75029ee7-935a-4f57-8717-58c2339dd219">
	  <site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
	</column>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>409</td><td>409059</td><td>Unknown column error</td><td>An unknown column asset error occurred.</td></tr><tr><td>409</td><td>409060</td><td>Unknown column query error</td><td>An unknown error occurred and the column query could not complete.</td></tr><tr><td>409</td><td>409066</td><td>Column not found</td><td>The requested column asset could not be found.</td></tr></tbody></table>

## 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

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

#### 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:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.5.xsd">
  <columns>
	<column id="38cb9944-4b81-4107-8946-5adf9e047d23" name="AddressID" remoteType="I4" parentTableId="75029ee7-935a-4f57-8717-58c2339dd219">
		<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
	</column>
	<column id="c6dcdb0e-9b2a-4224-bf3b-58662fe72b09" name="AddressLine1" remoteType="WSTR" parentTableId="75029ee7-935a-4f57-8717-58c2339dd219">
		<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
	</column>
  </columns>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>409</td><td>409059</td><td>Unknown column error</td><td>An unknown column asset error occurred.</td></tr><tr><td>409</td><td>409060</td><td>Unknown column query error</td><td>An unknown error occurred and the column query could not complete.</td></tr><tr><td>409</td><td>409066</td><td>Column not found</td><td>The requested column assets could not be found.</td></tr></tbody></table>

## 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

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

#### 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**

```
<tsResponse>
   <dataQualityIndicator>
	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"
   </dataQualityIndicator>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400103</td><td>Generic data quality certification error</td><td>The data quality certification could not be queried for some reason other than those specified in this table.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404030</td><td>Data quality indicator not found</td><td>The requested data quality certification was not found.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-id</span>
                                        </td>
                                        <td>The unique ID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-type</span>
                                        </td>
                                        <td>
                                            <p>
								The type of content the data quality certification has been applied to. To specify the  type, use one of the following values:
							</p>
                                            <ul>
                                                <li><span class="uicontrol">database</span>
                                                </li>
                                                <li><span class="uicontrol">table</span>
                                                </li>
                                                <li><span class="uicontrol">datasource</span>
                                                </li>
                                                <li><span class="uicontrol">virtualconnection</span>
                                                </li>
                                                <li><span class="uicontrol">virtualconnectiontable</span>
                                                </li>
                                            </ul>
                                            <p>These values are not case sensitive.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-luid</span>
                                        </td>
                                        <td>The LUID of the content (database, table, published data source, flow, virtual connection, or virtual connection table).					</td>
                                    </tr>
                                </tbody>
                            </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**

```
<tsResponse>
   <dataQualityIndicator>
	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"
   </dataQualityIndicator>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400104</td><td>Generic data quality certification error</td><td>The data quality certification could not be queried for some reason other than those specified in this table.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Data quality indicator not found</td><td>The requested data quality certification was not found.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-id</span>
                                        </td>
                                        <td>The unique ID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-type</span>
                                        </td>
                                        <td>
                            The type of asset that the data quality warning is being attached to. To specify the  type, use one of the following values:
                            <ul><li><span class="uicontrol">database</span></li><li><span class="uicontrol">table</span></li><li><span class="uicontrol">column</span> <i>- Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)</i></li><li><span class="uicontrol">datasource</span></li><li><span class="uicontrol">flow</span></li><li><span class="uicontrol">virtualconnection</span></li><li><span class="uicontrol">virtualconnectiontable</span></li></ul><p>These values are not case sensitive.</p></td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-luid</span>
                                        </td>
                                        <td>The LUID of the content (database, table, column, published data source, flow, virtual connection, or virtual connection table).</td>
                                    </tr>
                                </tbody>
                            </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:**

```
<tsResponse>
   <dataQualityWarningList>
	<dataQualityWarning id="3b9fa2df-0915-4cda-9e29-bccb64a2eb7b" userDisplayName="Steve Nguyen" contentId="924ae707-a915-498d-b909-a86cd5135b8d" contentType="DATABASE" message="Talk to admin" type="WARNING" isActive="true" createdAt="2021-01-12T01:04:55Z" updatedAt="2021-01-12T01:04:55Z" isSevere="false">
	   <site id="3d512018-64c4-4b66-a1fa-1c83710e323c"/>
	   <owner id="2bfe6c21-17e0-449a-8e5c-382e740eca85"/>
	</dataQualityWarning>
   </dataQualityWarningList>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400104</td><td>Unknown data quality warning query error</td><td>An unknown error occurred and the data quality warning query could not complete.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The requested asset could not be found.</td></tr><tr><td>404</td><td>404030</td><td>Data quality warning not found</td><td>The data quality warning for the requested asset could not be found.</td></tr></tbody></table>

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The unique ID of the site asset.</td></tr><tr><td><span class="api-placeholder">dataqualitywarning-id</span></td><td>The unique ID of the data quality warning.</td></tr></tbody></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:**

```
<tsResponse>
   <dataQualityWarning id="1c8ebdfc-270a-4414-812c-3306a1c95e07" userDisplayName="Steve Nguyen" contentId="0d7465f2-4989-417e-b88d-f787359edc63" contentType="DATABASE" message="Delayed" type="WARNING" isActive="true" createdAt="2020-10-08T00:00:35Z" updatedAt="2020-10-08T00:00:35Z" isSevere="false">
	<site id="a946d998-2ead-4894-bb50-1054a91dcab3"/>
	<owner id="cdfe8548-84c8-418e-9b33-2c0728b1234a"/>
   </dataQualityWarning>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400103</td><td>Unknown data quality warning query error</td><td>An unknown error occurred and the data quality warning query could not complete.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404030</td><td>Data quality warning not found</td><td>The data quality warning for the requested asset could not be found.</td></tr></tbody></table>

## 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

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

#### 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

```
<tsResponse>
  <datasource id="datasource-id"
	certificationNote="certification-note"
	name="datasource-name"
	description="data-source-description"
	type="datasource-type"
    contentUrl="datasource-content-url"
    createdAt="datetime-created"
    updatedAt="datetime-updated"
    encryptExtracts="encryptExtracts"
	hasExtracts="has-extracts-flag"
 	isCertified="is-certified-flag"
	useRemoteQueryAgent="use-remote-query-agent-flag"
	webpageUrl="web-page-url" >
      <project id="project-id" name="project-name" />
      <owner id="datasource-owner-id"  />
      <tags>
        <tag label="tag"/>
        ... additional tags ...
      </tags>
      <askData enablement="enablement-setting"/>
  </datasource>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A non-administrator user attempted to query a data source, but the caller doesn't have <span class="api-command-ref">Connect</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
  <datasource id="1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b" name="Activity rates and healthy living"
    certificationNote="This is a note about the datasource certification."
	contentUrl="activity-dates-and-healthy-living"
	encryptExtracts="true"
	description="The Activity and Health data source."
	isCertified="true"
	type="excel-direct"
	createdAt="2011-03-30T22:32:35Z"
	updatedAt="2016-01-13T01:00:02Z">
	useRemoteQueryAgent="false"
	webpageUrl="https://MYSERVER/#/datasources/4414"
      <project id="1f2f3e4e5-d6d7-c8c9-b0b1-a2a3f4f5e6e" name="default"/>
      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
      <tags>
      </tags>
	  <askData enablement="Enabled"/>
  </datasource>
</tsResponse>
```

**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/current/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

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

#### 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

```
<tsResponse>
  <connections>
    <connection id="connection-id" type="connection-type"
      serverAddress="server-address" serverPort="port"
      userName="connection-user-name"
      queryTaggingEnabled="query-tagging-enabled"
      authenticationType="authentication-type"
      useOAuthManagedKeychain="using-OAuth-managed-keychain-or-not /> />
	< ... additional connections ... >
  </connections>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403021</td><td>Read forbidden</td><td>A user who is not a server administrator user attempted to query the data source connections, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404011</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
  <connections>
    <connection id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd" type="dataengine" />
    <connection id="374371c0-ffe9-4e16-b48e-6b868e3026ca" type="dataengine" />
    <connection id="08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6" type="dataengine" />
  </connections>
</tsResponse>
```

**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/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the data sources.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of data sources to return. You can filter on predefined fields such as <code>name</code> and <code>updatedAt</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">field-expression</span></td><td>(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 <code>_all_</code> or <code>_default_</code>, 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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_fields.htm">Using Fields in the Rest API</a>.</td></tr></tbody></table>

**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

```
<tsResponse>
  <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>
          <tag label="tag"/>
          <!-- potential additional tags -->
        </tags>
    </datasource>
    <!-- potential additional data sources -->
  </datasources>
</tsResponse>
```

```
{
  "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:**

```
<tsResponse version-and-name-space-settings>
  <pagination pageNumber="1" pageSize="100" totalAvailable="2"/>
  <datasources>
    <datasource id="1a2a3b4b-5c6c-7d8d-9e0e-1f2f3a4a5b6b"
      name="Sample - Coffee Chain (Access)"
      size="1"
      type="googledrive"
      contentUrl="coffee-chain"
      description="The Sample - Coffee Chain data source."
      type="msaccess"
      createdAt="2011-03-30T22:32:35Z"
      updatedAt="2016-01-13T01:00:02Z"
      encryptExtracts="false"
      isCertified="false"
      useRemoteQueryAgent="false"
      webpageUrl="https://my-server.com/#/site/my-site/datasources/1275708" >
        <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" name="Default"/>
        <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
        <tags>
	  	  <tag label="test"/>
        </tags>
    </datasource>
  </datasources>
</tsResponse>
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## Query Database

Get information about a database asset.

#### URI

GET api/_api-version_/sites/_site-luid_/databases/_database-luid_

#### Parameter Values

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

#### 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:**

```
<tsResponse>
  <database id="c495c67b-2a17-4706-991c-b3b14f881e20" name="dataengine_42020_789079537040lea.hyper" connectionType="hyper" isEmbedded="true" isCertified="true" certificationNote="Verified" type="File" filePath="dataengine_42020_789079537040lea.hyper" contentPermissions="ManagedByOwner">
    <site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
    <contact id="95656dcf-c669-46c0-81fb-8f278e4806b2" name="fsuzuki"/>
    <certifier id="2c5ea058-6408-46a6-9aa2-09f795a31237" name="snguyen"/>
    <location id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" type="PROJECT"/>
    <tags/>
  </database>
</tsResponse>
```

**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/current/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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The requested database could not be found.</td></tr><tr><td>409</td><td>409045</td><td>Database error</td><td>An unknown database asset error occurred.</td></tr><tr><td>409</td><td>409046</td><td>Unknown database query error</td><td>An unknown error occurred and the database query could not complete.</td></tr></tbody></table>

## Query Databases

Get information about all database assets for a site.

#### URI

GET api/_api-version_/sites/_site-luid_/databases

#### Parameter Values

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

#### 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:**

```
<tsResponse>
  <databases>
	<pagination pageNumber="1" pageSize="100" totalAvailable="496">
	<database id="b749a80e-43eb-4805-9e6d-44c615ee10e2" name="airlines" connectionType="sqlserver" isEmbedded="false" description="This is about airlines and other stuff but mainly airlines"
		isCertified="true" certificationNote="THIS IS ALSO FROM THE REST API"
        type="DatabaseServer" hostName="mssql.test.example.com" contentPermissions="ManagedByOwner">
		<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
		<contact id="95656dcf-c669-46c0-81fb-8f278e4806b2" name="jsmith"/>
        <certifier id="2c5ea058-6408-46a6-9aa2-09f795a31237" name="snguyen"/>
        <location id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" type="PROJECT"/>
        <tags/>
	</database>
	<database id="522f8295-5a07-4ba7-89be-cbbd9617928d" name="small.csv" connectionType="textscan" isEmbedded="true"
        isCertified="false"
         type="File" filePath="small.csv" contentPermissions="ManagedByOwner">
		<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
		<contact id="95656dcf-c669-46c0-81fb-8f278e4806b2" name="fsuzuki"/>
        <tags/>
	</database>
	<database id="fcd0f91e-8c8d-45c4-848a-0aa3b42990c6" name="ows.json" connectionType="semistructpassivestore-direct" isEmbedded="true"
        isCertified="false"
        type="File" filePath="ows.json" contentPermissions="ManagedByOwner">
		<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
        <tags/>
	</database>
	<database id="24010777-0e17-43ed-8624-577a85e8043b" name="/Users/awang/Dropbox (Tableau Software)/911_calls_short.csv" connectionType="textscan" isEmbedded="false"
        isCertified="false"
        type="File" filePath="/Users/jsmith/Dropbox (Tableau Software)/911_calls_short.csv" contentPermissions="ManagedByOwner">
		<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
        <location id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" type="PROJECT"/>
        <tags/>
	</database>
	<database id="1d1879b2-789d-46c2-950f-f82a4d77e150" name="911_calls_short.csv" connectionType="textscan" isEmbedded="true"
        isCertified="false"
        type="File" filePath="911_calls_short.csv" contentPermissions="ManagedByOwner">
		<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
        <tags/>
	</database>
	<database id="bc872610-aa3e-4071-8a39-2c1a847cf39c" name="Prince.xlsx" connectionType="excel-direct" isEmbedded="true"
        isCertified="false"
        type="File" filePath="Prince.xlsx" contentPermissions="ManagedByOwner">
		<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
        <tags/>
	</database>
  </databases>
</tsResponse>
```

**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/current/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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The requested databases could not be found.</td></tr><tr><td>409</td><td>409045</td><td>Database error</td><td>An unknown database asset error occurred.</td></tr><tr><td>409</td><td>409046</td><td>Unknown database query error</td><td>An unknown error occurred and the database query could not complete.</td></tr></tbody></table>

## 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

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

#### 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

```
<tsResponse>
   <flowOutputSteps>
     <flowOutputStep id = "flow-output-step id"
      name = "flow-name">
        ...additional output steps...
    </flowOutputSteps>
    <flow id = "flow-id">
      <project id = "project-id">
      <owner id = "owner-id">
      <tags/>
      <parameters>
	 <parameter id="parameter-id" type="data type" name="parameter name" description=" parameter description" value="current value" isRequired="true/false">
	   <domain xsi:type="flowParameterDomainType" domainType="domain type">
	   </domain>
        <parameter>
	 ...additional parameters...
      <parameters>
    </flow>
</tsResponse>
```

**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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A non-administrator user attempted to query the flow, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not GET.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
    <flowOutputSteps>
        <flowOutputStep id="5e4c9a74-d29a-4f62-baa5-97c443440dfc" name="CoffeeChainOutputCSV"/>
        <flowOutputStep id="baa85bce-6aab-434a-8070-72625ded8cb6" name="CoffeeChainOutputHyper"/>
        <flowOutputStep id="2f5da1ba-4a40-44a4-9201-7db6ce089811" name="CoffeeChainOutputTDE"/>
    </flowOutputSteps>
    <flow id="d00700fe-28a0-4ece-a7af-5543ddf38a82" name="SQLServerUserNamePassword Good" description="" webpageUrl="http://tpqawin01/#/flows/3" fileType="tflx" createdAt="2018-11-06T04:57:55Z" updatedAt="2018-11-06T21:31:00Z">
        <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
        <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
	 <tags/>
	<parameters>
		<parameter id="d6785a99-e997-4f9c-b0eb-91a02371621b" type="string" name="String Param" description="String test parameter" value="string 2" isRequired="false">
		  <domain xsi:type="flowParameterListDomainType" domainType="all">
		</parameter>
	</parameters>
    </flow>
</tsResponse>  
```

## 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

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

#### 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

```
<tsResponse >
    <connections>
        <connection id="connection-id"
           type="connection-type"
           serverAddress="server-address"
           userName="user-name"
           embedPassword="true-or-false"/>
        ... additional connections ...
    </connections>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403092</td><td>Read forbidden</td><td>A user who is not a server administrator user attempted to query the flow connections, but the caller doesn't have <span class="api-command-ref">Read</span>permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
    <connections>
        <connection id="5fd1c1db-572f-4ebd-94e7-a09e212bc147" type="sqlserver" serverAddress="mySQLServer" userName="test" embedPassword="true"/>
        <connection id="ed358ca5-f25b-43b4-8791-2dbf34631df6" type="tableau-server-site" serverAddress="http://testserver01" userName="" embedPassword="false"/>
       </connections>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the flows.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr></tr></tbody></table>

**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

```
<tsResponse>
   <pagination pageNumber="page-number"
    pageSize="page-size"
    totalAvailable="total-available"/>
     <flows>
       <flow id="flow-id"
        name="flow-name"
        description="flow-description"
        webpageUrl="web-page-url"
        fileType="file-type"
        createdAt="datetime-created"
        updatedAt="datetime-updated">
         <project id="project-id" name="project-name"/>
         <owner id="owner-id"/>
	  <tags/>
	  <parameters>
           <parameter id="parameter-id" type="data type" name="parameter name" description="parameter description" value="current value" isRequired="false">
	      <domain xsi:type="flowParameterListDomainType" domainType="all">
	      </domain>
	      </parameter>
	    <parameters>
         </flow>
        ... additional flows ...
     </flows>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403101</td><td>Read forbidden</td><td>A non-administrator user attempted to query flows for the site, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9954070a-581d-40fa-ae73-e815ce8b0562/flows" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

<tsResponse version-and-namespace-settings>
    <pagination pageNumber="1" pageSize="100" totalAvailable="7"/>
    <flows>
        <flow id="d00700fe-28a0-4ece-a7af-5543ddf38a82" name="SQLServerUserNamePassword Good" description="" webpageUrl="http://tpqawin01/#/flows/3" fileType="tflx" createdAt="2018-11-06T04:57:55Z" updatedAt="2018-11-06T21:31:00Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
	     <tags/>
	     <parameters/>
        </flow>
        <flow id="c1e82fe3-e7cf-4bd5-afd3-799b1e8aac27" name="broken\_loom\_doc\_2" description="" webpageUrl="http://tpqawin01/#/flows/26" fileType="tflx" createdAt="2018-11-06T18:19:54Z" updatedAt="2018-11-06T18:19:54Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
	     <tags/>
	     <parameters>
		<parameter id="d6785a99-e997-4f9c-b0eb-91a02371621b" type="string" name="String Param" description="String parameter test" value="string 2" isRequired="false">
		  <domain xsi:type="flowParameterListDomainType" domainType="all">
		</parameter>
	     </parameters>
        </flow>
        <flow id="d4eccc71-5cbd-4753-a807-d3ea9256aee1" name="Partner Influence" description="configured by ibeekun" webpageUrl="http://tpqawin01/#/flows/34" fileType="tflx" createdAt="2018-11-06T22:46:57Z" updatedAt="2018-11-06T22:46:57Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
	     <tags/>
	     <parameters/>
        </flow>
        <flow id="82aefd39-ae37-4ad8-a44c-391563f12e18" name="Omniture logs" description="configured by testuser" webpageUrl="http://mytestServer/#/flows/35" fileType="tflx" createdAt="2018-11-06T22:47:18Z" updatedAt="2018-11-06T22:47:18Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
	     <tags>
	     <parameters/>
        </flow>
        <flow id="b527d896-b71e-4953-b085-2afecccea427" name="NY Parking Tickets" description="configured by ibeekun" webpageUrl="http://tpqawin01/#/flows/37" fileType="tflx" createdAt="2018-11-07T00:19:48Z" updatedAt="2018-11-07T00:19:48Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
	     <tags/>
	     <parameters/>
        </flow>
        <flow id="ddcd4f53-76b6-4af7-a050-fe3eef702317" name="Flow1" description="" webpageUrl="http://tpqawin01/#/flows/40" fileType="tfl" createdAt="2018-11-07T00:38:48Z" updatedAt="2018-11-07T00:38:48Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
        </flow>
        <flow id="868eab1a-2b60-448a-9913-82e4522ab952" name="local-postgres-bad-pw" description="" webpageUrl="http://tpqawin01/#/flows/78" fileType="tflx" createdAt="2018-11-07T22:18:04Z" updatedAt="2018-11-07T22:18:04Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
	     <tags/>
	     <parameters/>
        </flow>
    </flows>
</tsResponse>

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the user.</td></tr><tr><td><span class="api-placeholder">user-id</span></td><td>The ID of the user to get flows for.</td></tr><tr><td><span class="api-placeholder">isOwner</span></td><td>(Optional) <span class="api-command-ref">true</span>to return only flows that the specified user owns, or <span class="api-command-ref">false</span>to return all flows that the specified user has at least read access to. The default is <span class="api-command-ref">false</span>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
   <pagination pageNumber="page-number"
    pageSize="page-size"
    totalAvailable="total-available"/>
    <flows>
      <flow id="flow-id"
       name="flow-name" description="flow-description"
       webpageUrl="URL"
       fileType="flow-file-type"
       createdAt="Datetime-created"
       updatedAt="Datetime-updated">
        <project id="project-id" name="project-name"/>
        <owner id="owner-id"/>
	 <tags/>
	 <parameters>
          <parameter id="parameter-id" type="data type" name="parameter name" description="parameter description" value="current value" isRequired="false">
            <domain xsi:type="flowParameterListDomainType" domainType="all">
	     </domain>
	   </parameter>
	 <parameters>
      </flow>
        ... additional flows...
    </flows>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for flows at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size exceeds upper limit</td><td>The page size parameter exceeds the system-wide upper limit of 1000.</td></tr><tr><td>403</td><td>403101</td><td>Read forbidden</td><td>A non-administrator user attempted to query flows for the user, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
    <pagination pageNumber="1" pageSize="100" totalAvailable="41"/>
    <flows>
        <flow id="00795e57-0c0b-43c9-843f-6635d6577dec" name="several_excel_input_union2" description="" webpageUrl="http://tpqawin01/#/flows/263" fileType="tflx" createdAt="2018-11-09T20:01:04Z" updatedAt="2018-11-09T20:01:04Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="303379e9-3b66-419c-a022-7179bc13892c"/>
        </flow>
        <flow id="467242c7-3d5a-4ba8-b4c3-58b5aecc084d" name="Superstore_Test_ER" description="testing direct connection" webpageUrl="http://tpqawin01/#/flows/124" fileType="tfl" createdAt="2018-11-08T21:30:44Z" updatedAt="2018-11-08T21:30:44Z">
            <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3" name="Default"/>
            <owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
	     <tags/>
	     <parameters>
		<parameter id="d6785a99-e997-4f9c-b0eb-91a02371621b" type="string" name="String Param" description="String parameter test" value="string 2" isRequired="false">
		  <domain xsi:type="flowParameterListDomainType" domainType="all">
		</parameter>
	     </parameters>
        </flow>
   </flows>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the groups.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of groups to return. You can filter on predefined fields such as <code>name</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber"
    pageSize="page-size"
    totalAvailable="total-available" />
  <groups>
    <group id="group-id"
      name="group-name">
        <domain name="domain-for-group" />
    </group>
    <group id="group-id"
      name="group-name">
        <domain name="domain-for-group" />
		<import source="import-source"
		  domainName="active-directory-domain-name"
		  siteRole="minimum-site-role"
		  grantLicenseMode="license-mode" />
    </group>
    ... additional groups ...
  </groups>
</tsResponse>
```

Notes:

- If the group was imported from Active Directory, the name attribute of the <domain> 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 <group> 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/groups/" -X GET -H "X-Tableau-Auth:e35Z608JMPHgZfVyJncnedlUeXSX8bmb"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <pagination pageNumber="1" pageSize="100" totalAvailable="3"/>
  <groups>
    <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" name="All Users">
      <domain name="local"/>
    </group>
    <group id="9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b" name="active-directory-group-import">
      <domain name="MYDOMAIN.net"/>
	  <import domainName="MYDOMAIN.net" siteRole="ExplorerCanPublish" grantLicenseMode="onLogin"/>
    </group>
    <group id="7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6" name="local-group-license-on-login">
      <domain name="local"/>
      <import domainName="local" siteRole="ExplorerCanPublish" grantLicenseMode="onLogin"/>
    </group>
  </groups>
</tsResponse>
```

## 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/current/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/current/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

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

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
    <job id="job-id"
     mode="job-mode"
     type="job-type"
     progress="percent-completed"
     createdAt="time-job-created"
     updatedAt="time-job-last-updated"
     completedAt="time-job-completed"
     finishCode="status-code">
        <extractRefreshJob>
            <notes> ... view, workbook, or datasource id and name ... </notes>
        </extractRefreshJob>
        <statusNotes>
            <statusNote type="classifier"
             value="value"
             text="note" /> ... additional job notes ...
        </statusNotes>
    </job>
</tsResponse>
```

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/current/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).

<table class="api-error-table"><colgroup><col style="width: 197px;"> <col style="width: 187px;"> <col></colgroup><tbody><tr class="TableStyle-Basic-Border-Body-Body1"><th class="TableStyle-Basic-Border-BodyE-Column1-Body1" style="text-align: left;">Type</th><th class="TableStyle-Basic-Border-BodyE-Column1-Body1">Value</th><th class="TableStyle-Basic-Border-BodyD-Column1-Body1">Text</th></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersAddedToGroup</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">Description of how many users were added to the group during the import.</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersAddedToSite</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">Description of how many users were added to the site during the import.</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersWithInsufficientLicenses</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">Description of how many users could not have their site role updated due to server lacking sufficient licenses for them.</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersInActiveDirectoryGroup</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">Description of the total number of users in the Active Directory group being imported or synchronized</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersProcessed</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">Description of the total number of users processed during the import or synchronization process.</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersSkipped</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">Description of the total number of users skipped during the import or synchronization process</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersInformationUpdated</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">Description of the total number of users whose information was updated during the import or synchronization process.</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersSiteRoleUpdated</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">Description of the total number of users whose site role was updated during the import or synchronization process.</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyE-Column1-Body1"><span class="api-command-ref">CountOfUsersRemovedFromGroup</span></td><td class="TableStyle-Basic-Border-BodyE-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyD-Column1-Body1">(Synchronization process only)&nbsp;Description of the number of users removed from the group during the synchronization process.</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyB-Column1-Body1"><span class="api-command-ref">CountOfUsersUnlicensed</span></td><td class="TableStyle-Basic-Border-BodyB-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyA-Column1-Body1">(Synchronization process only)&nbsp;Description of the number of users who were unlicensed during the synchronization process.</td></tr><tr class="TableStyle-Basic-Border-Body-Body1"><td class="TableStyle-Basic-Border-BodyB-Column1-Body1"><span class="api-command-ref">SiteDelete</span></td><td class="TableStyle-Basic-Border-BodyB-Column1-Body1">Integer</td><td class="TableStyle-Basic-Border-BodyA-Column1-Body1">Description of the site deletion progress. Can include a general error or <code>errorCode=9</code> when a site can't be deleted.</td></tr></tbody></table>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404018</td><td>Job not found</td><td>The job ID in the URI doesn't correspond to an existing job.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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/current/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

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

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
  <pagination pageNumber="page-number" pageSize="page-size"/>
  <backgroundJobs>
    <backgroundJob id="job-id" status="status-value" createdAt="date-time" startedAt="date-time" endedAt="date-time" priority="priority-value" jobType="type-value"/>
	<!-- . . . more backgroundJobs . . . -->
  </backgroundJobs>
</tsResponse>
```

#### Errors

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

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/jobs" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse>
  <pagination pageNumber="1" pageSize="100" totalAvailable="48999"/>
  <backgroundJobs>
	<backgroundJob id="919055e5-25db-4a2b-9611-1408dd06632d" status="Failed" createdAt="2018-04-17T23:00:15Z" startedAt="2018-04-17T23:00:15Z" endedAt="2018-04-17T23:00:15Z" priority="50" jobType="increment_extracts"/>
	<backgroundJob id="b5cadda9-2b32-447a-acb6-1c1b8c06caf9" status="Failed" createdAt="2018-04-17T23:00:15Z" startedAt="2018-04-17T23:00:15Z" endedAt="2018-04-17T23:00:15Z" priority="50" jobType="increment_extracts"/>
	<backgroundJob id="d281297b-9834-44a1-b71a-a2cab6060df6" status="Failed" createdAt="2018-04-17T23:00:15Z" startedAt="2018-04-17T23:00:24Z" endedAt="2018-04-17T23:00:32Z" priority="50" jobType="refresh_extracts"/>
  </backgroundJobs>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the projects.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of data sources to return. You can filter on predefined fields such as <code>name</code>, <code>ownerName</code>, and <code>parentProjectId</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber"
    pageSize="page-size"
    totalAvailable="total-available" />
  <projects>
    <project id="project-id"
      name="project-name"
      description="project-description"
      topLevelProject="top-level-project-flag"
      writeable="writeable-flag"
      controllingPermissionsProjectId="controlling-permissions-project-id"
      createdAt="created-date-and-time"
      updatedAt="updated-date-and-time"
      contentPermissions="content-permissions"
      parentProjectId="parent-project-id">
        <owner email="owner-email"
          fullName="owner-full-name"
          id="owner-id"
          lastLogin="owner-last-login-date"
          name="owner-username"
          siteRole="owner-site-role"/>
        <contentCounts projectCount="number-of-projects"
          workbookCount="number-of-workbooks"
          viewCount="number-of-views"
          datasourceCount="number-of-data-sources"/>
    </project>
    <project id="project-id"
      name="project-name"
      description="project-description"
	  contentPermissions="content-permissions"
	  controllingPermissionsProjectId="controlling-permissions-project-id" />
	... additional attributes and projects ...
  </projects>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example: 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:**

```
<tsResponse version-and-namespace-settings>
	<pagination pageNumber="1" pageSize="100" totalAvailable="1"/>
    <projects>
        <project id="fae56e51-fbee-4eab-a9af-d8283cc0ed77" name="TestNestProject" description="" createdAt="2018-11-15T17:14:45Z" updatedAt="2018-11-15T17:14:45Z" contentPermissions="LockedToProject" parentProjectId="711d4c5d-60b7-4f77-a9a6-bbf05021b6ec">
            <owner id="4d8308f7-ec47-4eb1-a383-429374a8d9cb"/>
        </project>
    </projects>
</tsResponse>
```

#### 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:**

```
<tsResponse version-and-namespace-settings>
    <pagination pageNumber="1" pageSize="100" totalAvailable="1"/>
    <projects>
        <project id="fae56e51-fbee-4eab-a9af-d8283cc0ed77"
            name="TestNestProject"
            description="A project."
            topLevelProject="false"
            writeable="true"
            createdAt="2018-11-15T17:14:45Z"
            updatedAt="2018-13-15T17:12:30Z"
            contentPermissions="ManagedByOwner"
            parentProjectId="711d4c5d-60b7-4f77-a9a6-bbf05021b6ec"
            controllingPermissionsProjectId="57646e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" />
        <owner id="4d8308f7-ec47-4eb1-a383-429374a8d9cb" email="rkawal@tableau.com" fullName="Reena Kawal" lastLogin="2020-06-02T16:23:49Z" name="rkawal" siteRole="SiteAdministratorCreator"/>
        <contentCounts projectCount="2" workbookCount="3" viewCount="10" datasourceCount="2" />
        </project>
    </projects>
</tsResponse>
```

## Query Quality Warning Trigger

Get information about a quality warning trigger.

#### URI

GET api/_api-version_/sites/_site-id_/dataQualityTriggers/_trigger-id_

#### Parameter Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">api-version</span>
                                        </td>
                                        <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">site-id</span>
                                        </td>
                                        <td>The unique ID of the site asset.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">content-type</span>
                                        </td>
                                        <td>
                                            <p>
                            The type of content the quality warning trigger has been applied to. To specify the  type, use on of the following values:
</p>
                                            <ul>
                                                <li><span class="uicontrol">datasource</span>
                                                </li>
                                                <li><span class="uicontrol">flow</span>
                                                </li>
                                            </ul>
                                            <p>These values are not case sensitive.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">trigger-id</span>
                                        </td>
                                        <td>
                            The unique ID of the quality warning trigger.
</td>
                                    </tr>
                                </tbody>
                            </table>

#### 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**

```
<tsResponse>
  <dataQualityTriggerList>
	<dataQualityTrigger id="{trigger-luid}" siteId="{site-luid}"
		userId="1c8ebdfc-270a-4414-812c-3306a1c95e07" userDisplayName="Joe Nguyen" contentId="{content-luid}"
		contentType="DATASOURCE" message=" This message is specified by the user."
		type="EXTRACT_REFRESH" active="true" createdAt="Wed Sep 22 05:49:52 UTC 2020"
		updatedAt="Wed Sep 22 05:49:52 UTC 2020" severe="false"/>
  </dataQualityTriggerList>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400134</td><td>Generic quality warning trigger error</td><td>The quality warning trigger could not be queried for some reason other than those specified below.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404037</td><td>Quality warning not found</td><td>The requested quality warning trigger was not found.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site to get information for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-name</span>
                                            </td>
                                            <td>The name of the site to get information for. If you specify a site name, you must also include the parameter <code>key=name</code>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">content-url</span>
                                            </td>
                                            <td>The URL of the site to get information for. If you specify a content URL, you must also include the parameter <code>key=contentUrl</code>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">include-usage-flag</span>
                                            </td>
                                            <td>The boolean flag to include site usage metrics in the response body. If <span class="api-command-ref">true</span>, then the site element  								of the response will contain a <code>usage</code> node with the attributes <code>numUsers</code> (number of users) and  								<code>storage</code> (storage in megabytes).  								 							<p>To set the flag to include usage in the response, append <code>includeUsage=true</code> as a querystring element any valid query site URI.</p></td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <site id="site-id"
    name="site-name"
    contentUrl="content-url"
    adminMode="admin-mode"
    disableSubscriptions="new-disable-subscriptions"
    state="active-or-suspended"
    revisionHistoryEnabled="revision-history-enabled-flag"
    revisionLimit="revision-limit"
    subscribeOthersEnabled="subscribe-others-enabled-flag"
    allowSubscriptionAttachments="allow-subcription-attachments-flag"
    userQuota="num-users"
    guestAccessEnabled="guest-access-enabled-flag"
    cacheWarmupEnabled="cache-warmup-enabled-flag [REMOVED IN API 3.19]"
    commentingEnabled="commenting-enabled-flag"
    storageQuota="limit-in-megabytes"
    editingFlowsEnabled="editing-flows-enabled-flag"
    schedulingFlowsEnabled="scheduling-flows-enabled-flag"
    extractEncryptionMode="encryption-mode"
    catalogingEnabled="cataloging-enabled-flag"
    derivedPermissionsEnabled="derived-permissions-enabled-flag"
    requestAccessEnabled="request-access-enabled-flag"
    runNowEnabled="run-now-enabled-flag"
    usage numUsers="number-of-users"
    storage="storage-in-megabytes"
    userQuota="all-license-limit-total"
    tierCreatorCapacity="creator-license-limit"
    tierExplorerCapacity="explorer-license-limit"
    tierViewerCapacity="viewer-license-limit"
    isDataAlertsEnabled="data-alerts-enabled-flag"
    askDataMode="ask-data-mode"
    useDefaultTimeZone="default-time-zone-flag"
    timeZone="time-zone"
    autoSuspendRefreshEnabled="auto-suspend-refresh-enabled-flag"
    autoSuspendRefreshInactivityWindow="auto-suspend-refresh-inactivity-window"
    explainDataEnabled="explain-data-enabled"
    dqwSubscriptionsEnabled="dqw-subscriptions-enabled"
    attributeCaptureEnabled="attribute-capture-enabled"/>
  </site>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

**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:**

```
<tsResponse>
  <site id="1234abcd-12ab-12ab-12ab-1234abcd1234"
    name="new_site_name"
    contentUrl="new_site_url"
    adminMode="ContentAndUsers"
    storageQuota="100"
    disableSubscriptions="true"
    state="Active"
    revisionHistoryEnabled="true"
    revisionLimit="25"
    subscribeOthersEnabled="false"
    allowSubscriptionAttachments="true"
    guestAccessEnabled="false"
    cacheWarmupEnabled="true"
    commentingEnabled="true"
    editingFlowsEnabled="false"
    schedulingFlowsEnabled="false"
    extractEncryptionMode="enabled"
    catalogingEnabled="true"
    derivedPermissionsEnabled="false"
    requestAccessEnabled ="false"
    runNowEnabled="true"
    usage numUsers="0" storage="0"
    userQuota="4"
    tierCreatorCapacity="2"
    tierExplorerCapacity="1"
    tierViewerCapacity="1"
    isDataAlertsEnabled="true"
    askDataMode="DisabledByDefault"
    useDefaultTimeZone="false"
    timeZone="America/Los_Angeles"
    explainDataEnabled="true"
    dqwSubscriptionsEnabled="false"
    attributeCaptureEnabled="false" />
  </site>
</tsResponse>
```

**Command:**

```
curl "http://MY-SERVER/api/3.29/sites/Default?key=name" -X GET \
-H "X-Tableau-Auth:ABCD1234abcdABCD|ABCD1234abcdABCDABCD1234abcd-1"
```

**Example response:**

```
<tsResponse>
  <site id="1234abcd-12ab-12ab-12ab-1234abcd1234"
    name="new_site_name"
    contentUrl=""
    adminMode="ContentAndUsers"
    storageQuota="100"
    disableSubscriptions="true"
    state="Active"
    revisionHistoryEnabled="true"
    revisionLimit="25"
    subscribeOthersEnabled="false"
    allowSubscriptionAttachments="true"
    guestAccessEnabled="false"
    cacheWarmupEnabled="true"
    commentingEnabled="true"
    editingFlowsEnabled="false"
    schedulingFlowsEnabled="false"
    extractEncryptionMode="enabled"
    catalogingEnabled="true"
    derivedPermissionsEnabled="false"
    requestAccessEnabled ="false"
    runNowEnabled="true"/>
    userQuota="4"
    tierCreatorCapacity="2"
    tierExplorerCapacity="1"
    tierViewerCapacity="1"
    askDataMode="DisabledByDefault"
    useDefaultTimeZone="false"
    timeZone="America/Los_Angeles" />
  </site>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber"
	pageSize="page-size"
	totalAvailable="total-available" />
  <sites>
	<site id="site-id"
      name="site-name"
      contentUrl="content-url"
      adminMode="admin-mode"
      disableSubscriptions="disable-subscriptions-flag"
      userQuota="num-users"
      storageQuota="limit-in-megabytes"
      state="active-or-suspended"
      statusReason="reason-for-state"
      revisionHistoryEnabled="revision-history-flag"
      revisionLimit="num-revisions"
      subscribeOthersEnabled="subscribe-others-flag"
      allowSubscriptionAttachments="allow-subcription-attachments-flag"
      guestAccessEnabled="guest-access-enabled-flag"
      cacheWarmupEnabled="cache-warmup-enabled-flag [REMOVED IN API 3.19]"
      commentingEnabled="enable-commenting-flag"
      editingFlowsEnabled="editing-flows-enabled-flag"
      schedulingFlowsEnabled="scheduling-flows-enabled-flag"
      extractEncryptionMode="extract-encryption-mode"
      catalogingEnabled="enable-cataloging-flag"
      derivedPermissionsEnabled="derived-permissions-enabled-flag"
      requestAccessEnabled ="request-access-enabled-flag"
      runNowEnabled="run-now-enabled-flag"
      isDataAlertsEnabled="data-alerts-enabled-flag"
      askDataMode="ask-data-mode"
      useDefaultTimeZone="default-time-zone-flag"
      timeZone="time-zone"
      explainDataEnabled="explain-data-enabled"
      dqwSubscriptionsEnabled="dqw-subscriptions-enabled" />
	<!--   ... additional sites ... -->
  </sites>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for the sites at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

```
curl "http://MY-SERVER/api/3.29/sites?pageSize=1&pageNumber=1" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"
```

**Example response:**

```
<tsResponse>
  <pagination pageNumber="1"
    pageSize="1"
    totalAvailable="2"/>
  <sites>
    <site id="abcd1234-ab12-ab12-ab12-abcd1234abcd"
    name="Default"
    contentUrl=""
    adminMode="ContentAndUsers"
    disableSubscriptions="true"
    state="Active"
    revisionHistoryEnabled="true"
    revisionLimit="25"
    subscribeOthersEnabled="false"
    allowSubscriptionAttachments="true"
    guestAccessEnabled="true"
    cacheWarmupEnabled="true" [REMOVED IN API 3.19]
    commentingEnabled="true"
    editingFlowsEnabled="false"
    schedulingFlowsEnabled="false"
    extractEncryptionMode="enabled"
    catalogingEnabled="true"
    derivedPermissionsEnabled="false"
    requestAccessEnabled ="false"
    runNowEnabled="true"
    isDataAlertsEnabled="true"
    askDataMode="DisabledByDefault"
    useDefaultTimeZone="false"
    timeZone="America/Los_Angeles"
    explainDataEnabled="true"
    dqwSubscriptionsEnabled="false" />
  </sites>
</tsResponse>
```

## Query Table

Get information about a table asset.

#### URI

GET api/_api-version_/sites/_site-id_/tables/_table-id_

#### Parameter Values

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

#### 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:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.5.xsd">
  <table id="917b1438-7000-4a9e-a949-13b90a0237dd" name="[Orders$]" isEmbedded="true" isCertified="false">
	<site id="3dd2f0ef-4a9b-44a7-bec5-a50598f41792"/>
  </tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The requested table could not be found.</td></tr><tr><td>409</td><td>409052</td><td>Unknown table error</td><td>An unknown table asset error occurred.</td></tr><tr><td>409</td><td>409053</td><td>Unknown table query error</td><td>An unknown error occurred and the table query could not complete.</td></tr></tbody></table>

## Query Tables

Get information about all table assets for a site.

#### URI

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

#### Parameter Values

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

#### 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:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.5.xsd">
  <tables>
	<table id="6a9b6058-671d-44bc-ad6d-c58b225f5d4c" name="Culture" isEmbedded="false" isCertified="false">
	  <site id="3dd2f0ef-4a9b-44a7-bec5-a50598f41792"/>
 	</table>
	<table id="917b1438-7000-4a9e-a949-13b90a0237dd" name="[Orders$]" isEmbedded="true" isCertified="false">
	  <site id="3dd2f0ef-4a9b-44a7-bec5-a50598f41792"/>
	</table>
	<table id="58d94f3f-1339-4721-8674-e53dc9dfe02e" name="Batters" isEmbedded="false" isCertified="false">
	  <site id="3dd2f0ef-4a9b-44a7-bec5-a50598f41792"/>
	</table>
	<table id="5e8ca1e3-9752-430c-abae-11104084b469" name="[911_calls_short#csv]" isEmbedded="false" isCertified="false">
	  <site id="3dd2f0ef-4a9b-44a7-bec5-a50598f41792"/>
	</table>
  </tables>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The requested tables could not be found.</td></tr><tr><td>409</td><td>409052</td><td>Unknown table error</td><td>An unknown table asset error occurred.</td></tr><tr><td>409</td><td>409053</td><td>Unknown table query error</td><td>An unknown error occurred and the table query could not complete.</td></tr></tbody></table>

## 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

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

#### 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

```
<tsResponse>
  <user id="user-id"
        name="user-name"
        siteRole="site-role"
        lastLogin="last-login-date"
        externalAuthUserId="authentication-id-from-external-provider"
		 fullName="user-full-name"
		 authSetting="auth-setting"
		 language="language-code"
        locale="locale-code"
		 idpConfigurationId="idp-configuration-id"
		 email="email-address"
        domain name="user-domain" />
</tsResponse>
```

**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 <domain> 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>403</td><td>403133</td><td>Query user permissions forbidden</td><td>The user does not have permissions to query user information for other users.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
  <user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" name="Alan"
    siteRole="ExplorerCanPublish"
    fullName="Alan Wang"
    authSetting="ServerDefault"
    lastLogin="2015-01-05T03:24:36Z"
	language="en-GB"
	locale="GB"
	idpConfigurationId="00000000-0000-0000-0000-0000000000" />
</tsResponse>
```

## 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/current/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\_<fieldname>=_filter-value_

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the view.</td></tr><tr><td><span class="api-placeholder">view-id</span></td><td>The ID of the view to render as data.</td></tr><tr><td><span class="api-placeholder">max-age-minutes</span></td><td>(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.</td></tr><tr><td><span class="api-placeholder">filter-value</span></td><td>The value of the field that you want to use to filter the workbook view. For example, a workbook with the filter <code>/data?vf_year=2017</code> would only display data from the year 2017. To learn more, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views">View filter queries</a>.</td></tr></tbody></table>

#### 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

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400080</td>
                                            <td>Bad Request</td>
                                            <td>The view ID in the URI doesn't correspond to a view available on the specified site.</td>
                                        </tr>
                                        <tr>
                                            <td>401</td>
                                            <td>401002</td>
                                            <td>Unauthorized</td>
                                            <td>The authentication token provided in the request header was invalid or has expired.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403032</td>
                                            <td>Read forbidden</td>
                                            <td>A non-administrator user attempted to query workbook views, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">GET</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>429</td>
                                            <td>429000</td>
                                            <td>Concurrent request limit exceeded</td>
                                            <td>
                                                <p>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.</p>
                                                <p>Introduced September 2021.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

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

## 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/current/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\_<fieldname>=_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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the view.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">view-id</span>
                                            </td>
                                            <td>The ID of the view to return an image for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">viz-height</span>
                                            </td>
                                            <td>
                                                <p><span style="font-weight: normal;font-style: italic;"> Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later:</span>&nbsp;</p>
                                                <p>(Optional) The height of the rendered pdf image in pixels that, along with the value of <code>vizWidth</code> determine its
							resolution and aspect ratio.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">viz-width</span>
                                            </td>
                                            <td>
                                                <p><span style="font-weight: normal;font-style: italic;"> Available in API 3.23 (Tableau Cloud December 2024 / Server 2024.3) and later:</span>
                                                </p>
                                                <p>(Optional) The width of the rendered pdf image in pixels that, along with the value of <code>vizHeight</code> determine its
							resolution and aspect ratio.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">image-resolution</span>
                                            </td>
                                            <td>(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 <code>high</code> to ensure maximum pixel density.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">max-age-minutes</span>
                                            </td>
                                            <td>(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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">filter-value</span>
                                            </td>
                                            <td>The value of the field that you want to use to filter the workbook view.
										For example, a workbook with the filter <code>/data?vf_year=2017</code> would only display data from the year 2017.
									To learn more, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views">View filter queries</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">image-format</span>
                                            </td>
                                            <td>(Optional) The format of the returned image. Valid values are <code>png</code> (default) or <code>svg</code>. Available in API 3.29 and later.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400010</td><td>Bad request</td><td>Invalid query parameter. For example, attempting to query 'jpg' <code>image-format</code>.</td></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A non-administrator user attempted to query a view preview image, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>403</td><td>403068</td><td>Forbidden</td><td>The endpoint has been disabled on the server. To enable the endpoint, a server administrator must use tsm to configure the <code>sheet_image.enabled</code> setting. For more information, see <a href="https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm">tsm configuration set Options</a> in the Tableau Server help.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the URI doesn't correspond to an existing view in the specified workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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/current/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\_<fieldname>=_filter-value_

#### Parameter Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the view.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">view-id</span>
                                            </td>
                                            <td>The ID of the view to render as a .pdf file.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">filter-value</span>
                                            </td>
                                            <td>The value of the field that you want to use to filter the workbook view.
									For example, a workbook with the filter <code>/data?vf_year=2017</code> would only display data from the year 2017.
									To learn more, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#Filter-query-views">View filter queries</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">viz-height</span>
                                            </td>
                                            <td>(Optional) The height of the rendered pdf image in pixels that, along with the value of <code>vizWidth</code>, determines its
							resolution and aspect ratio.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">viz-width</span>
                                            </td>
                                            <td>(Optional) The width of the rendered pdf image in pixels that, along with the value of <code>vizHeight</code>, determines its
				resolution and aspect ratio.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">max-age-minutes</span>
                                            </td>
                                            <td>(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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">orientation</span>
                                            </td>
                                            <td>(Optional) The orientation of the pages in the .pdf file produced. The value can be
								<code>Portrait</code>
								or <code>Landscape</code>. If this parameter is not present the page orientation will default to <code>Portrait</code>.
							</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">page-type</span>
                                            </td>
                                            <td>
                                                <p>(Optional) The type of page, which determines the page dimensions of the .pdf file returned. The value can be:
								<code>A3</code>,
								<code>A4</code>,
								<code>A5</code>,
								<code>B5</code>,
								<code>Executive</code>,
								<code>Folio</code>,
								<code>Ledger</code>,
								<code>Legal</code>,
								<code>Letter</code>,
								<code>Note</code>,
								<code>Quarto</code>,
								or <code>Tabloid</code>.</p>
                                                <p>If this parameter is not present the page type will default to <code>Legal</code>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400080</td><td>Bad Request</td><td>The view ID in the URI doesn't correspond to a view available on the specified site.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403032</td><td>Read forbidden</td><td>A non-administrator user attempted to query workbook views, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A non-administrator user attempted to query a view preview image, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID in the URI doesn't correspond to an existing view in the specified workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code>2.2</code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the views.</td></tr><tr><td><span class="api-placeholder">get-usage-information</span></td><td>(Optional) <span class="api-command-ref">true</span> to return usage statistics. The default is <span class="api-command-ref">false</span>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) Fields and operators that you can use to filter results. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#filter_expressions" class="xref">Filter expressions</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(Optional) Field and direction to sort results. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm#sort_expressions" class="xref">Sorting</a>.</td></tr><tr><td><span class="api-placeholder">field-expression</span></td><td>(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 <code>_all_</code> or <code>_default_</code>, 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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_fields.htm">Using Fields in the REST API</a>.</td></tr></tbody></table>

**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

```
<tsResponse>
  <pagination pageNumber="1" pageSize="100" totalAvailable="2" />
  <views>
    <view 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" />
    </view>
    <view 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" />
    </view>
  </views>
</tsResponse>
```

```
{
  "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 <usage> element is included in the response only if the method has `includeUsageStatistics=true` in the URI.

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>400</td><td>400008</td><td>Invalid parameter value</td><td>The <span class="api-command-ref">includeUsageStatistics</span> was provided with a value other than <span class="api-command-ref">true</span> or <span class="api-command-ref">false</span>.</td></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A non-administrator user attempted to query workbook views, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook to get the views for.</td></tr><tr><td>(Optional) <span class="api-placeholder">get-usage-information</span></td><td><span class="api-command-ref">true</span> to return usage statistics. The default is <span class="api-command-ref">false</span>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <views>
    <view id="view-id" name="view-name"
        contentUrl="content-url" >
      <usage totalViewCount="total-count" />
    </view>
     ... additional views ...
  </views>
</tsResponse>
```

The <usage> 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Invalid parameter value</td><td>The <span class="api-command-ref">includeUsageStatistics</span> was provided with a value other than <span class="api-command-ref">true</span> or <span class="api-command-ref">false</span>.</td></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A non-administrator user attempted to query workbook views, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
  <views>
    <view id="1f1e1d1c-2b2a-2f2e-3d3c-3b3a4f4e4d4c" name="Tale of 100 Start-ups"
          contentUrl="Finance/sheets/Taleof100Start-ups"/>
    <view id="9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b" name="Economic Indicators"
          contentUrl="Finance/sheets/EconomicIndicators"/>
    <view id="7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6" name="Investing in the Dow"
          contentUrl="Finance/sheets/InvestingintheDow"/>
  </views>
</tsResponse>
```

## 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

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

#### 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

```
<tsResponse>
  <connections>
    <connection id="connection-id" type="connection-type"
      serverAddress="server-address" serverPort="port"
      userName="connection-user-name"
      queryTaggingEnabled="query-tagging-enabled"
      authenticationType="authentication-type"
      useOAuthManagedKeychain="using-OAuth-managed-keychain-or-not />
    < ... additional connections ... >
  </connections>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403021</td><td>Read forbidden</td><td>A user who is not a server administrator user attempted to query the workbook connections, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
  <connections>
    <connection id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd" type="dataengine" />
    <connection id="9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b" type="dataengine" />
    <connection id="7b6b59a8-ac3c-4d1d-2e9e-0b5b4ba8a7b6" type="dataengine" />
    <connection id="374371c0-ffe9-4e16-b48e-6b868e3026ca" type="dataengine" />
    <connection id="08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6" type="dataengine" />
  </connections>
</tsResponse>
```

**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/current/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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A non-administrator user attempted to query the workbook preview image, but the caller doesn't have <span class="api-command-ref">Read</span> permission for the workbook.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbooks.</td></tr><tr><td><span class="api-placeholder">filter-expression</span></td><td>(Optional) An expression that lets you specify a subset of workbooks to return. You can filter on predefined fields such as <code>name</code>, <code>tags</code>, and <code>createdAt</code>. You can include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">sort-expression</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">field-expression</span></td><td>(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 <code>_all_</code> or <code>_default_</code>, 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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_fields.htm">Using Fields in the REST API</a>.</td></tr></tbody></table>

**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

```
<tsResponse>
  <pagination pageNumber="page-number"
     pageSize="page-size"
     totalAvailable="total-available" />
  <workbooks>
    <workbook id="workbook-id"
		name="name"
		description ="workbook-description"
		webpageurl="workbook-webpageurl"
		contentUrl="content-url"
        showTabs="show-tabs-flag"
        size="size-in-megabytes"
        createdAt="datetime-created"
	    updatedAt="datetime-updated"
	    defaultViewId="default-view-id" >
	      <project id="project-id" name="project-name" />
	      <owner id="user-id" />
	      <tags>
	        <tag label="tag"/>
	        ... additional tags ...
	     </tags>
	<dataAccelerationConfig accelerationEnabled="accelerationEnabled" lastUpdatedAt="update-date-time" accelerationStatus="accelerationStatus" />
   </workbook>
   ... additional workbooks ...
  </workbooks>
</tsResponse>
```

The datetime-created and datetime-updated attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ).

#### Response Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col style="width:27%;">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">accelerationEnabled</span>
                                            </td>
                                            <td><span class="api-command-ref">true</span> if data acceleration is enabled, otherwise  <span class="api-command-ref">false</span>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_data_acceleration.htm" class="xref">Data Acceleration (Retired)</a>.
								<i>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.</i></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">accelerationStatus</span>
                                            </td>
                                            <td>The status can be:<ul><li><span class="api-command-ref">accelerated</span>: The acceleration job succeeded.
									</li><li><span class="api-command-ref">failed</span>: The acceleration job failed.
									</li><li><span class="api-command-ref">inProgress</span>: The acceleration job is running.
									</li><li><span class="api-command-ref">notUseful</span>: The acceleration job completed but none of the queries in the workbook were supported for acceleration.
									</li><li><span class="api-command-ref">waiting</span>: The workbook is enabled for acceleration but no background job has been submitted yet to accelerate it.
								</li></ul><i>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.</i></td>
                                        </tr>
                                    </tbody>
                                </table>

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number is not an integer, is less than one, or is greater than the final page number for users at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size exceeds upper limit</td><td>The page size parameter exceeds the system-wide upper limit of 1000.</td></tr><tr><td>403</td><td>403018</td><td>Read forbidden</td><td>A non-administrator user attempted to query workbooks for the site, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example: 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:**

```
<tsResponse version-and-namespace-settings>
  <pagination pageNumber="1" pageSize="100" totalAvailable="27"/>
  <workbooks>
    <workbook id="1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d"
		name="Finance"
        description="The finance workbook."
		contentUrl="Finance" showTabs="true"
		webpageUrl="http://MY_SERVER/#/worbooks/1" size="2"
		createdAt="2013-03-30T22:32:35Z" updatedAt="2016-01-13T01:00:02Z"
		defaultViewId="abcd1234-fa4a-4e3f-85fe-db746f44bf4c" >
	      <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" name="Tableau Samples"/>
	      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
	      <tags/>
    </workbook>
    <workbook id="59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" name="World Indicators"
		description="The world indicators workbook."
		contentUrl="WorldIndicators" showTabs="true"
		webpageUrl="http://MY_SERVER/#/worbooks/2" size="1"
        createdAt="2014-02-19T10:19:23Z" updatedAt="2015-12-29T013:23:45Z"
		defaultViewId="edd01d90-fa4a-4e3f-85fe-db746f44bf4c" >
	      <project id="08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6" name="default"/>
	      <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
	      <tags>
          <tag label="training" ></tags>
    </workbook>
  </workbooks>
  ...more workbooks ...
  </tsResponse>
```

#### 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the user.</td></tr><tr><td><span class="api-placeholder">user-id</span></td><td>The ID of the user to get workbooks for.</td></tr><tr><td><span class="api-placeholder">isOwner</span></td><td>(Optional) <span class="api-command-ref">true</span> to return only workbooks that the specified user owns, or <span class="api-command-ref">false</span> to return all workbooks that the specified user has at least read access to. The default is <span class="api-command-ref">false</span>.</td></tr><tr><td><span class="api-placeholder">page-size</span></td><td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr><tr><td><span class="api-placeholder">page-number</span></td><td>(Optional) The offset for paging. The default is 1. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_paging.htm">Paginating Results</a>.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <pagination pageNumber="pageNumber" pageSize="page-size"
         totalAvailable="total-available" />
  <workbooks>
    <workbook id="workbook-id"
	  name="name"
	  description ="workbook-description"
	  webpageurl="workbook-webpageurl"
	  contentUrl="content-url"
      showTabs="show-tabs-flag"
      size="size-in-megabytes"
      createdAt="datetime-created"
      updatedAt="datetime-updated"
      defaultViewId="default-view-id" >
	    <project id="project-id" name="project-name" />
	    <owner id="user-id" />
	    <tags>
	      <tag label="tag"/>
	        ... additional tags ...
	      </tags>
   </workbook>
   ... additional workbooks ...
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for data sources at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403014</td><td>Page size exceeds upper limit</td><td>The page size parameter exceeds the system-wide upper limit of 1000.</td></tr><tr><td>403</td><td>403018</td><td>Read forbidden</td><td>A non-administrator user attempted to query workbooks for the user, but the caller doesn't have <span class="api-command-ref">Read</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

#### Example

`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:**

```
<tsResponse version-and-namespace-settings>
  <pagination pageNumber="1" pageSize="100" totalAvailable="2"/>
  <workbooks>
    <workbook id="1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" name="Finance"
	  webpageUrl="https://MY_SERVER/#/worbooks/1"
      contentUrl="Finance" showTabs="true" size="2" description="The Finance workbook."
      createdAt="2013-03-30T22:32:35Z" updatedAt="2016-01-13T01:00:02Z"
      defaultViewId="edd01d90-fa4a-4e3f-85fe-db746f44bf4c" >
	    <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" name="Tableau Samples"/>
	    <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
	    <tags></tags>
    </workbook>
    <workbook id="59a8a7b6-be3a-4d2d-1e9e-08a7b6b5b4ba" name="World Indicators"
	  webpageUrl="https://MY_SERVER/#/worbooks/2"
	  contentUrl="WorldIndicators" showTabs="true" size="1"  description="The World Indicators workbook."
	  createdAt="2014-02-19T10:19:23Z" updatedAt="2015-12-29T013:23:45Z"
	  defaultViewId="edd01d90-fa4a-4e3f-85fe-db746f44bf4c" >
        <project id="08a7b6b5-b4ba-be3a-4d2d-1e9e59a8a7b6" name="default"/>
        <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
        <tags></tags>
    </workbook>
  </workbooks>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (<code>authUser.getSiteLuid()</code>).</td></tr><tr><td><span class="api-placeholder">datasource-luid</span></td><td>The LUID of the data source. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching <code>[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}</code>.</td></tr><tr><td><code>elementType</code></td><td>Required. The kind of element to return. Allowed values are <code>Column</code>, <code>FieldDescription</code>, and <code>TableDescription</code>.</td></tr><tr><td><code>name</code></td><td>Optional. The name of a single element to read. When omitted, the call lists elements of the requested <code>elementType</code>. When this value is non-empty and the TDS service returns gRPC <code>NOT_FOUND</code>, the API responds 404 with error code <code>404065</code>.</td></tr></tbody></table>

#### 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.

```
<tsResponse>
  <tdsElementList>
    <elementType>Column</elementType>
    <name>Sales</name>
    <column>
      <caption>Sales</caption>
      <role>MEASURE</role>
      <type>REAL</type>
    </column>
  </tdsElementList>
  <tdsElementList>
    <elementType>FieldDescription</elementType>
    <name>Sales</name>
    <description>Total sales amount.</description>
  </tdsElementList>
  <tdsElementList>
    <name>Orders</name>
    <error>
      <code>5</code>
      <message>NOT_FOUND</message>
    </error>
  </tdsElementList>
</tsResponse>
```

```
{
  "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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsElementList[]</span></td><td>Required. Elements read from the data source or work copy. Empty when the TDS service returns no records.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].elementType</span></td><td>Optional. Element type. Not set by the read converter for this operation.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].name</span></td><td>Required. Name of the element, set from the gRPC read result or from the failure record when the record failed.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column</span></td><td>Optional. Present when the read result is a column. Mutually exclusive with <code>description</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.caption</span></td><td>Optional. Column display caption from the TDS service.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.role</span></td><td>Optional. Column role, <code>FieldRole.name()</code> from the TDS service.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.type</span></td><td>Optional. Column field type, <code>FieldType.name()</code> from the TDS service.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].description</span></td><td>Optional. Description text. Present when the read result is a field description or a table description. Mutually exclusive with <code>column</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].error</span></td><td>Optional. Present only when this read record failed. The HTTP status of the read stays 200.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].error.code</span></td><td>Required (within <code>error</code>). The raw gRPC status code for the failed record — not a translated HTTP code and not a Tableau 6-digit error code.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].error.message</span></td><td>Optional. Error message from the TDS service.</td></tr></tbody></table>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td></td><td>Invalid data source LUID</td><td>The data source LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).</td></tr><tr><td>400</td><td></td><td>Invalid elementType</td><td><code>elementType</code> must be <code>Column</code>, <code>FieldDescription</code>, or <code>TableDescription</code>.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Data Management Bundle not licensed</td><td>On Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.</td></tr><tr><td>403</td><td>403004</td><td>Unable to resolve tenant</td><td>On Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.</td></tr><tr><td>403</td><td>403004</td><td>No cloud entitlements</td><td>On Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td>403004</td><td>Subscription not entitled</td><td>On Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>404</td><td>404065</td><td>TDS element not found</td><td>No element with the requested name exists. Returned only when the <code>name</code> query parameter is non-empty. A missing data source or work copy is not given this code.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The HTTP method is not supported for this resource.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td></td><td>Unknown error</td><td>There was an internal server error.</td></tr><tr><td>503</td><td></td><td>Service unavailable</td><td>Service unavailable.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (<code>authUser.getSiteLuid()</code>).</td></tr><tr><td><span class="api-placeholder">workcopy-luid</span></td><td>The LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching <code>[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}</code>.</td></tr><tr><td><code>elementType</code></td><td>Required. The kind of element to return. Allowed values are <code>Column</code>, <code>FieldDescription</code>, and <code>TableDescription</code>.</td></tr><tr><td><code>name</code></td><td>Optional. The name of a single element to read. When omitted, the call lists elements of the requested <code>elementType</code>. When this value is non-empty and the TDS service returns gRPC <code>NOT_FOUND</code>, the API responds 404 with error code <code>404065</code>.</td></tr></tbody></table>

#### 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.

```
<tsResponse>
  <tdsElementList>
    <elementType>FieldDescription</elementType>
    <name>Sales</name>
    <description>Total sales amount, updated on the work copy.</description>
  </tdsElementList>
  <tdsElementList>
    <elementType>TableDescription</elementType>
    <name>Orders</name>
    <description>Order line items.</description>
  </tdsElementList>
  <tdsElementList>
    <name>Region</name>
    <error>
      <code>5</code>
      <message>NOT_FOUND</message>
    </error>
  </tdsElementList>
</tsResponse>
```

```
{
  "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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsElementList[]</span></td><td>Required. Elements read from the data source or work copy. Empty when the TDS service returns no records.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].elementType</span></td><td>Optional. Element type. Not set by the read converter for this operation.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].name</span></td><td>Required. Name of the element, set from the gRPC read result or from the failure record when the record failed.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column</span></td><td>Optional. Present when the read result is a column. Mutually exclusive with <code>description</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.caption</span></td><td>Optional. Column display caption from the TDS service.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.role</span></td><td>Optional. Column role, <code>FieldRole.name()</code> from the TDS service.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.type</span></td><td>Optional. Column field type, <code>FieldType.name()</code> from the TDS service.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].description</span></td><td>Optional. Description text. Present when the read result is a field description or a table description. Mutually exclusive with <code>column</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].error</span></td><td>Optional. Present only when this read record failed. The HTTP status of the read stays 200.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].error.code</span></td><td>Required (within <code>error</code>). The raw gRPC status code for the failed record — not a translated HTTP code and not a Tableau 6-digit error code.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].error.message</span></td><td>Optional. Error message from the TDS service.</td></tr></tbody></table>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td></td><td>Invalid work copy LUID</td><td>The work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).</td></tr><tr><td>400</td><td></td><td>Invalid elementType</td><td><code>elementType</code> must be <code>Column</code>, <code>FieldDescription</code>, or <code>TableDescription</code>.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Data Management Bundle not licensed</td><td>On Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.</td></tr><tr><td>403</td><td>403004</td><td>Unable to resolve tenant</td><td>On Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.</td></tr><tr><td>403</td><td>403004</td><td>No cloud entitlements</td><td>On Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td>403004</td><td>Subscription not entitled</td><td>On Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>404</td><td>404065</td><td>TDS element not found</td><td>No element with the requested name exists. Returned only when the <code>name</code> query parameter is non-empty. A missing data source or work copy is not given this code.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The HTTP method is not supported for this resource.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td></td><td>Unknown error</td><td>There was an internal server error.</td></tr><tr><td>503</td><td></td><td>Service unavailable</td><td>Service unavailable.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <externalAuthorizationServer
	issuerUrl="URL" jwksUri="URI" name="name"/>
</tsRequest>
```

#### Attribute Values

A combination of attributes inside the <externalAuthorizationServer> element is valid, however issuerUrl is required.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">URL</span>
                                    </td>
                                    <td>
                        The entity id of your identity provider (IdP) or URL&nbsp;that uniquely identifies your IdP.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">URI</span>
                                    </td>
                                    <td>
                                        <p>(Optional) The JSON Web Key (JKWS) of the EAS.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">name</span>
                                    </td>
                                    <td>
                                        <p>(Optional) The name of the connected app. If the name attribute is not specified, the connected app name defaults to "External Authorization Server."</p>
                                        <p>This attribute is available  starting from API version 3.22 (February 2024).</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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:

- `<name>`: The name of the connected app.
- `<id>`: The ID of the EAS.
- `<issuerUrl>:` The issuer URL of the EAS.

- `<jwksUri>:` The JSON web key set (JWKS) of the EAS.

You can use the returned EAS ID (`<id>`) in [Update EAS](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#update_connectedapp_eas) and [Delete EAS](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_connected_app.htm#delete_connectedapp_eas) requests.

**Example response:**

```
<tsResponse>
   <externalAuthorizationServer>
	<name>EAS_1</name>
	<id>50bdc8cd-1aa4-48fe-a0e7-68982d85daa8</id>
	<issuerUrl>https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7</issuerUrl>
	<jwksUri>https://dev-57741098.okta.com/jwks.json</jwksUri>
	<createdAt>2022-04-07T03:50:34Z</createdAt>
   </externalAuthorizationServer>
</tsResponse>
```

#### Version

Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.1 (API 3.23).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Issuer URL&nbsp;missing</td><td>The required issuer URL is missing from the request body.</td></tr><tr><td>400</td><td>400157</td><td>Unexpected EAS&nbsp;error</td><td>There was a unexpected error when creating the connected app.</td></tr><tr><td>400</td><td>400161</td><td>EAS limit exceeded</td><td>The site has reached its limit of EAS&nbsp;that can be registered or the external&nbsp;authorization server (EAS)&nbsp;ID is not in the correct format.</td></tr><tr><td>400</td><td>400194</td><td>Issuer URL already configured</td><td>Another connected app on the site is using the same issuer URL.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr></tbody></table>

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The requested table asset could not be found.</td></tr><tr><td>409</td><td>409059</td><td>Column error</td><td>An unknown column asset error occurred.</td></tr><tr><td>409</td><td>409061</td><td>Unknown column delete error</td><td>An unknown error occurred and the column could not be deleted.</td></tr><tr><td>409</td><td>409066</td><td>Column not found</td><td>The requested column asset could not be found.</td></tr></tbody></table>

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the group.</td></tr><tr><td><span class="api-placeholder">datasource-id</span></td><td>The ID of the data source to remove the revision for.</td></tr><tr><td><span class="api-placeholder">revision-number</span></td><td>The revision number of the data source to remove. To determine what versions are available, call <a href="#get_data_source_revisions">Get Data Source Revisions</a>.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Deletion forbidden</td><td>A non-administrator user attempted to remove a data source revision, but the caller doesn't have required permissions.</td></tr><tr><td>403</td><td>403053</td><td>Version history not enabled</td><td>version history is not enabled for the specified site.</td></tr><tr><td>403</td><td>403055</td><td>Cannot delete head revision</td><td>The head (first) version cannot be deleted. To remove the data source, call <a href="#delete_data_source">Delete Data Source</a>.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404024</td><td>Data source revision not found</td><td>The revision number in the URI doesn't correspond to an existing data source revision.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The requested database could not be found.</td></tr><tr><td>409</td><td>409045</td><td>Database error</td><td>An unknown database asset error occurred.</td></tr><tr><td>409</td><td>409047</td><td>Database delete error</td><td>An unknown error occurred and the database asset could not be deleted.</td></tr></tbody></table>

## 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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400032</td><td>Deletion failed</td><td>A problem arose that prevented the group from being removed from the group set.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group ID in the URI doesn't correspond to an existing group.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type wasn’t <span class="api-command-ref">DELETE</span>.</td></tr><tr><td>409</td><td>409120</td><td>Group set not found</td><td>The group set ID in the URI doesn't correspond to an existing user.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">idp-configuration-id</span></td><td>The ID of the configuration. To get the <span class="api-command-ref">idpConfigurationId</span> value, use the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site" class="xref">List Authentication Configurations for Site</a> method.</td></tr></tbody></table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">routing-rule-id</span></td><td>The unique identifier (UUID) of the allow rule to remove projects from.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <routingRuleProjects mode="remove">
    <project id="11111111-2222-3333-4444-555555555555" />
  </routingRuleProjects>
</tsRequest>
```

```
{
  "routingRuleProjects": {
    "mode": "remove",
    "project": [
      { "id": "11111111-2222-3333-4444-555555555555" }
    ]
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">mode</span></td><td>Required. The operation mode; must be <code>remove</code> for this method.</td></tr><tr><td><span class="api-placeholder">project</span></td><td>Required. One or more project IDs to remove. Each entry requires an <code>id</code>.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

Returns the updated `routingRule` with the removed projects no longer present in `project`.

```
<tsResponse>
  <routingRule id="d9e8f7a6-b5c4-3210-fedc-ba9876543210" domain="example.com" isBlocked="false" poolId="ebae40a5-d7e4-4214-b3d5-b0715c627b71" poolName="WindowsPool">
  </routingRule>
</tsResponse>
```

```
{
  "routingRule": {
    "id": "d9e8f7a6-b5c4-3210-fedc-ba9876543210",
    "domain": "example.com",
    "isBlocked": false,
    "poolId": "ebae40a5-d7e4-4214-b3d5-b0715c627b71",
    "poolName": "WindowsPool",
    "project": []
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>503909</td><td>Validation failed</td><td>Missing or empty project list, or invalid project or rule UUID.</td></tr><tr><td>400</td><td>503910</td><td>Invariant violation</td><td>Attempted to remove projects from a block rule.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>503923</td><td>Permission denied</td><td>Caller is not a site administrator for the site.</td></tr><tr><td>404</td><td>503915</td><td>Routing rule not found</td><td>No routing rule exists with the given ID on this site.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503922</td><td>Unexpected server error</td><td>An unexpected error occurred while removing projects.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The requested table asset could not be found.</td></tr><tr><td>409</td><td>409052</td><td>Table error</td><td>An unknown table asset error occurred.</td></tr><tr><td>409</td><td>409054</td><td>Unknown table delete error</td><td>An unknown error occurred and the table could not be deleted.</td></tr></tbody></table>

## 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

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

#### Request Body

**Remove a single user from a group**

None

**Bulk remove users from a group** (beginning in API 3.21)

```
<tsRequest>
  <users>
	<user id="user-id1" />
	<user id="user-id2" />
	<user id="user-id2" />
  </users>
</tsRequest>
```

#### Attribute Values (bulk remove users only)

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>
                                                <p>
                                    The ID (not name) of the user to add. You can get the user ID by calling <a href="#get_users_on_site">Get Users on Site</a> .
</p>
                                                <p>Beginning in API 3.21, you can bulk remove users from a group by specifying multiple user IDs. </p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400032</td><td>Deletion failed</td><td>A problem arose that prevented the user from being removed from the site.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user name in the URI doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>The group name in the URI doesn't correspond to an existing group.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### Example

##### 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:**

```
<tsRequest>
  <users>
	<user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" />
	<user id="1z4e8n7q-6t8t-8f8e-7d7c-1b1a2f2d2e2d" />
  </users>
</tsRequest>
```

**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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that is associated with the user you want to remove from the identity pool.</td></tr><tr><td><span class="api-placeholder">user-id</span></td><td>The ID of the user to remove from the identity pool.</td></tr><tr><td><span class="api-placeholder">idpool-uuid</span></td><td>The ID&nbsp;of the identity pool to remove the user from. You can get the identity pool ID by calling the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/TAG/index.html#tag/Identity-Pools-Methods/operation/AuthnService_ListIdentityPools" target="_blank">List Identity Pools</a> endpoint in the Tableau REST&nbsp;OpenAPI.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr><tr><td>429</td><td>429003</td><td>Can't remove user</td><td>There was a problem and the user couldn't be removed from the identity pool.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the user.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-id</span>
                                            </td>
                                            <td>The ID of the user to remove.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">mapAssetsTo</span>
                                            </td>
                                            <td>
								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 <span class="api-placeholder">mapAssetsTo</span> is provided, the value of the owner is changed to <span class="api-placeholder">unknown user</span>. If a user owns only subscriptions, you can delete them from either server or site without having to set  <span class="api-placeholder">mapAssetsTo</span> a different user.
								<p>If a user owns only subscriptions, you can delete the user from the server or site without setting this value.</p><p class="note"><strong>Note</strong>:&nbsp;Even though both server administrators and site administrators can call this method, only server administrators can use the <span class="api-placeholder">mapAssetsTo</span> 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.</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">new-user-id</span>
                                            </td>
                                            <td>The ID of a user that receives ownership of contents of the user being remove.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Deletion failed</td><td>Some other problem arose that prevented the user from being removed from the site.</td></tr><tr><td>403</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user ID in the URI doesn't correspond to an existing user.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr><tr><td>409</td><td>409003</td><td>User asset conflict</td><td>The specified user still owns content on Tableau Server and cannot be deleted.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the group.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook to remove the revision for.</td></tr><tr><td><span class="api-placeholder">revision-number</span></td><td>The revision number of the workbook to remove. To determine what versions are available, call <a href="#get_workbook_revisions">Get Workbook Revisions</a>.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Deletion forbidden</td><td>A non-administrator user attempted to remove a data source revision, but the caller doesn't have required permissions.</td></tr><tr><td>403</td><td>403053</td><td>Version history not enabled</td><td>version history is not enabled for the specified site.</td></tr><tr><td>403</td><td>403055</td><td>Cannot delete head revision</td><td>The head (first) version cannot be deleted. To remove the workbook, call <a href="#delete_workbook">Delete Workbook</a>.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404024</td><td>Workbook revision not found</td><td>The revision number in the URI doesn't correspond to an existing workbook revision.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">datasourc-luid</span></td><td>The LUID for the data source.</td></tr><tr><td><span class="api-placeholder">flow-luid</span></td><td>The LUID for the flow.</td></tr><tr><td><span class="api-placeholder">project-luid</span></td><td>The LUID for the project.</td></tr><tr><td><span class="api-placeholder">view-luid</span></td><td>The LUID for the view.</td></tr><tr><td><span class="api-placeholder">workbook-luid</span></td><td>The LUID for the workbook.<br>(Optional, but can be included for compatibility with older versions.)</td></tr></tbody></table>

#### Request Body

Copy

```
<tsRequest>  <permissions>    <granteeCapabilities>      <user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" />      <capabilities>        <capability name="AddComment" mode="Allow" />        <!-- ... additional capabilities ... -->      </capabilities>    </granteeCapabilities>    <granteeCapabilities>      <group id="2aa47cfa-9f2b-11e8-a260-af4a26124661" />      <capabilities>        <capability name="ViewComments" mode="Allow" />        <!-- ...  additional capabilities ... -->      </capabilities>    </granteeCapabilities>    <!-- ... additional grantee capability sets ...  -->  </permissions></tsRequest>
```

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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">workbook-id</span></td><td>The <span class="api-command-ref">&lt;workbook&gt;</span> element is not required, but can be included for compatibility with earlier versions of the REST API. If the <span class="api-command-ref">&lt;workbook&gt;</span> element is included, the <span class="api-placeholder">workbook-id</span> value must match the workbook ID in the URI. Any other attributes in the <span class="api-command-ref">&lt;workbook&gt;</span> element are ignored.</td></tr><tr><td><span class="api-placeholder">user-id</span></td><td>The ID (not name) of the user to add permissions for.</td></tr><tr><td><span class="api-placeholder">group-id</span></td><td>The ID (not name) of the group to add permissions for.</td></tr></tbody></table>

#### cURL Request Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/datasources/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @replace-view-permissions.xml`

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400009</td><td>Invalid capability</td><td>The capability in the URI is invalid for a workbook resource. Valid capabilities for a workbook are <span class="api-command-ref">AddComment</span>, <span class="api-command-ref">ChangeHierarchy</span>, <span class="api-command-ref">ChangePermissions</span>, <span class="api-command-ref">CreateRefreshMetrics</span>, <span class="api-command-ref">Delete</span>, <span class="api-command-ref">ExportData</span>, <span class="api-command-ref">ExportImage</span>, <span class="api-command-ref">ExportXml</span>, <span class="api-command-ref">Filter</span>, <span class="api-command-ref">Read</span> (view), <span class="api-command-ref">RunExplainData</span>, <span class="api-command-ref">ShareView</span>, <span class="api-command-ref">ViewComments</span>, <span class="api-command-ref">ViewUnderlyingData</span>, <span class="api-command-ref">WebAuthoring</span>, and <span class="api-command-ref">Write</span>.</td></tr><tr><td>403</td><td>403004</td><td>Permissions setting forbidden</td><td>A non-administrator user called this method but doesn't have permission to set permissions on the workbook.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>A user ID in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the URI doesn't correspond to an existing project.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view ID&nbsp;in the ID&nbsp;doesn't correspond to an existing view.</td></tr><tr><td>404</td><td>404012</td><td>Group not found</td><td>A group ID in the request body doesn't correspond to an existing group.</td></tr><tr><td>404</td><td>404013</td><td>Capability not found</td><td>The specified capability doesn't correspond to a defined capability. This can apply to either an invalid capability name or a capability other than <span class="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID&nbsp;in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>The request type was not <b>POST</b>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

Copy

```
<tsRequest>  <permissions>    <granteeCapabilities>      <user id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" />      <capabilities>        <capability name="AddComment" mode="Allow" />        <!-- ... additional capabilities ... -->      </capabilities>    </granteeCapabilities>    <granteeCapabilities>      <group id="2aa47cfa-9f2b-11e8-a260-af4a26124661" />      <capabilities>        <capability name="ViewComments" mode="Allow" />        <!-- ...  additional capabilities ... -->      </capabilities>    </granteeCapabilities>    <!-- ... additional grantee capability sets ...  -->  </permissions></tsRequest>
```

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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">user-luid</span>
                                            </td>
                                            <td>The LUID of the user to add default permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-luid</span>
                                            </td>
                                            <td>The LUID of the group to add permissions for.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">capability-name</span>
                                            </td>
                                            <td>
                                                <p>The capability to assign. Valid capabilities for a workbook are
					<span class="api-command-ref">AddComment</span>,
					<span class="api-command-ref">ChangeHierarchy</span>,
					<span class="api-command-ref">ChangePermissions</span>,
						<span class="api-command-ref">Delete</span>,
					<span class="api-command-ref">ExportData</span>,
					<span class="api-command-ref">ExportImage</span>,
					<span class="api-command-ref">ExportXml</span>,
					<span class="api-command-ref">Filter</span>,
					<span class="api-command-ref">Read</span> (view),
					<span class="api-command-ref">RunExplainData</span>,
					<span class="api-command-ref">ShareView</span>,
					<span class="api-command-ref">ViewComments</span>,
					<span class="api-command-ref">ViewUnderlyingData</span>,
					<span class="api-command-ref">WebAuthoring</span>, and
					<span class="api-command-ref">Write</span>.

				</p>
                                                <p>Valid capabilities for a data source are
					<span class="api-command-ref">ChangePermissions</span>,
					<span class="api-command-ref">Connect</span>,
					<span class="api-command-ref">Delete</span>,
					<span class="api-command-ref">ExportXml</span>,
					<span class="api-command-ref">SaveAs</span>,
					<span class="api-command-ref">Read</span> (view), and
					<span class="api-command-ref">Write</span>.</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm" class="xref">Permissions</a>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400009</td>
                                    <td>Invalid capability</td>
                                    <td>                                         The capability in the URI is invalid for a data source.                                       <p>Valid capabilities for a workbook are                                     <span class="api-command-ref">AddComment</span>,                                     <span class="api-command-ref">ChangeHierarchy</span>,                                     <span class="api-command-ref">ChangePermissions</span>,                                    <span class="api-command-ref">Delete</span>,                                     <span class="api-command-ref">ExportData</span>,                                     <span class="api-command-ref">ExportImage</span>,                                     <span class="api-command-ref">ExportXml</span>,                                     <span class="api-command-ref">Filter</span>,                                     <span class="api-command-ref">Read</span> (view),        <span class="api-command-ref">RunExplainData</span>,                             <span class="api-command-ref">ShareView</span>,                                     <span class="api-command-ref">ViewComments</span>,                                     <span class="api-command-ref">ViewUnderlyingData</span>,                                     <span class="api-command-ref">WebAuthoring</span>, and                                     <span class="api-command-ref">Write</span>.</p><p>Valid capabilities for a data source are                                     <span class="api-command-ref">ChangePermissions</span>,                                     <span class="api-command-ref">Connect</span>,                                     <span class="api-command-ref">Delete</span>,                                     <span class="api-command-ref">ExportXml</span>,                                     <span class="api-command-ref">Read</span> (view), and                                     <span class="api-command-ref">Write</span>.</p><p>For detailed information about capabilities for each content type, see <a href="https://help.tableau.com/current/online/en-us/permissions_capabilities.htm#capabilities">Capabilities</a>.</p></td>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400042</td>
                                    <td>Malformed permissions qualifier</td>
                                    <td>The request body includes a <span class="api-command-ref">&lt;workbook&gt;</span> or <span class="api-command-ref">&lt;datasource&gt;</span> element.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403004</td>
                                    <td>Permissions setting forbidden</td>
                                    <td>A non-administrator user called this method but doesn't have permission to add permissions on the project.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Site not found</td>
                                    <td>The site LUID in the URI doesn't correspond to an existing site.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404002</td>
                                    <td>User not found</td>
                                    <td>A user LUID in the request body as the grantee doesn't correspond to an existing user.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404005</td>
                                    <td>Project not found</td>
                                    <td>The project LUID in the URI doesn't correspond to an existing project.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404009</td>
                                    <td>Project ID mismatch</td>
                                    <td>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.)</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404012</td>
                                    <td>Group not found</td>
                                    <td>A group LUID in the request body doesn't correspond to an existing group.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404013</td>
                                    <td>Capability not found</td>
                                    <td>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                                         <span sclass="api-command-ref">Allow</span> or <span class="api-command-ref">Deny</span> for any mode value.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>The request type wasn’t <b>POST</b>.</td>
                                </tr>
                            </tbody>
                        </table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID of the site that contains the Recycle Bin.</td></tr><tr><td><span class="api-placeholder">content-type</span></td><td>Content type in plural form: <code>workbooks</code>, <code>datasources</code>, <code>flows</code>, or <code>projects</code>.</td></tr><tr><td><span class="api-placeholder">content-id</span></td><td>The LUID of the recycle bin content item to restore.</td></tr><tr><td><span class="api-placeholder">project-id</span></td><td>The LUID of the project to restore the content to.</td></tr></tbody></table>

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>Check the request body and query string parameters.</td></tr><tr><td>401</td><td>401000</td><td>No auth credentials</td><td>Check the authorization header.</td></tr><tr><td>401</td><td>401002</td><td>Invalid auth credentials</td><td>Session expired or invalid.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Check user permission.</td></tr><tr><td>403</td><td>403008</td><td>Insufficient site storage remaining</td><td>Restore would exceed site storage quota.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>Recycle Bin disabled.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404003</td><td>Unknown resource</td><td>Requested content item not found.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>Request type unrecognized for this method.</td></tr><tr><td>406</td><td>406000</td><td>Unacceptable media type</td><td>Bad Accept: header.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>Parameter type-mismatched, unknown content type, or malformed LUID.</td></tr><tr><td>429</td><td>429000</td><td>Too many requests</td><td>Request throttled.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>Unknown error.</td></tr><tr><td>503</td><td>500001</td><td>Internal service error</td><td>Internal service error.</td></tr></tbody></table>

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Revoke server admin tokens forbidden,</td><td>The user does not have the server administrator permissions required to call this method.</td></tr><tr><td>404</td><td>404000</td><td>Server not found</td><td>The Tableau Server in the URI doesn't correspond to an existing server.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">user-luid</span></td><td>The LUID of the user. The user LUID is returned after you successfully authenticate to the Tableau REST&nbsp;API.</td></tr><tr><td><span class="api-placeholder">pat-name</span></td><td>The name of the PAT you want to revoke.</td></tr></tbody></table>

#### 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

<table class="api-error-table">
                                <colgroup>
                                    <col class="api-error-table-col-1">
                                    <col class="api-error-table-col-2">
                                    <col class="api-error-table-col-3">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <th>HTTP status</th>
                                        <th><code>error</code> Code</th>
                                        <th>Condition</th>
                                        <th>Details</th>
                                    </tr>
                                    <tr>
                                        <td>401</td>
                                        <td>401002</td>
                                        <td>Unauthorized Access</td>
                                        <td>The credentials token provided in the request header was invalid or has expired.</td>
                                    </tr>
                                    <tr>
                                        <td>403</td>
                                        <td>403004</td>
                                        <td>Forbidden</td>
                                        <td>You can only revoke PATs that are yours.</td>
                                    </tr>
                                    <tr>
                                        <td>403</td>
                                        <td>403010</td>
                                        <td>Cross-site access is forbidden</td>
                                        <td>You're a site admin and can't revoke a PAT when you're not the site admin for all sites the PAT&nbsp;owner is a member of.</td>
                                    </tr>
                                    <tr>
                                        <td>404</td>
                                        <td>404051</td>
                                        <td>Personal access token not found</td>
                                        <td>The PAT couldn't be revoked because it does not exist.</td>
                                    </tr>
                                    <tr>
                                        <td>405</td>
                                        <td>405000</td>
                                        <td>Not supported</td>
                                        <td>This error can occur for the following reasons:
                            <ul><li>The URI&nbsp;contains an incorrect PAT&nbsp;name or  the PAT&nbsp;name is missing</li><li>The request type is not <span class="api-command-ref">DELETE</span></li></ul></td>
                                    </tr>
                                </tbody>
                            </table>

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

## 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

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

#### 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.

```
<tsRequest/>
```

#### 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.

```
  <tsResponse>
    <job id="a1b2c3d4-0000-0000-0000-000000000001" mode="Asynchronous" type="RefreshExtract" createdAt="2026-10-11T18:04:12Z">
      <extractRefreshJob>
        <workbook id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd" name="Sales Dashboard" />
      </extractRefreshJob>
    </job>
  </tsResponse>
```

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400047</td><td>Extract refresh error</td><td>The task specified is not an extract refresh task.</td></tr><tr><td>400</td><td>409090</td><td>Extract operation not allowed</td><td>The extract operation is not allowed for the asset that the task refreshes.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>The user is not authorized to run the task.</td></tr><tr><td>403</td><td>409082</td><td>Run now disabled</td><td>The Run Now setting is disabled for the site.</td></tr><tr><td>404</td><td>404003</td><td>Unknown resource</td><td>The task ID in the URI doesn't correspond to an existing task.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found</td><td>The virtual connection that the task refreshes no longer exists.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The request type was not <b>POST</b>.</td></tr><tr><td>409</td><td>409093</td><td>Operation already in queue</td><td>The extract refresh job is already in the queue.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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

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

#### Request Body

```
<tsRequest>
  <flowRunSpec
   flowId="flow id"
   runMode="run mode">
    <flowParameterSpecs>
      <flowParameterSpec
	   parameterId="parameter id"
       overrideValue="override value" />
    </flowParameterSpecs>
    <flowOutputSteps>
      <flowOutputStep
       id="flow output step id" />
    </flowOutputSteps>
  </flowRunSpec>
</tsRequest>
```

A request body with for running a flow with no parameters:

```
<tsRequest>
  <flowRunSpec
   flowId="flow id"
   runMode="run mode">
    <flowOutputSteps>
      <flowOutputStep
	   id="flow output step id" />
    </flowOutputSteps>
  </flowRunSpec>
</tsRequest>
```

A request body for running a flow but not specifying output step (effectively running all output steps):

```
<tsRequest>
  <flowRunSpec
   flowId="flow id"
   runMode="run mode">
    <flowParameterSpecs>
      <flowParameterSpec
	   parameterId="parameter id"
       overrideValue="override value" />
    </flowParameterSpecs>
  </flowRunSpec>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">flow-id</span>
                                            </td>
                                            <td>
                                                <p>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.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">flow-outputstep-id</span>
                                            </td>
                                            <td>
                                                <p>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 <a href="#Query" class="xref">List Metrics for Site - Retired in API 3.22</a> method to get the list of flow-outputstep-ids.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">flow-run-mode</span>
                                            </td>
                                            <td>
                                                <p>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.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">parameter-id</span>
                                            </td>
                                            <td>
                                                <p>The ID of the flow parameter. Use the <a href="#Query" class="xref">List Metrics for Site - Retired in API 3.22</a> 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. </p>
                                                <p class="note"><b>Note:</b> Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/prep/en-us/prep_parameters.htm#run-flows-with-parameters">Run flows with parameters</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">overrideValue</span>
                                            </td>
                                            <td>
                                                <p>The run-time value for the flow parameter. You must specify this if the parameter is required. Use the <a href="#Query" class="xref">List Metrics for Site - Retired in API 3.22</a> 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.</p>
                                                <p class="note"><b>Note:</b> Parameters are optional and only relevant for flows that contain parameters and the parameter setting is enabled.</p>
                                                <p>For more information, see <a href="https://help.tableau.com/current/prep/en-us/prep_parameters.htm#run-flows-with-parameters">Run flows with parameters</a>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

**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

```
<tsResponse>
   <job id="job-id"
    mode="Asynchronous"
    type="RunFlow"
    createdAt="DateTime-CreatedAt">
   <runFlowJobType flowRunId="flow-run-id">
     <flow id="flow-id" name="flow-name"/>

   </runFlowJobType>
   </job>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400132</td><td>Invalid flow run mode</td><td>The specified flow run mode is not valid.</td></tr><tr><td>400</td><td>400148</td><td>Invalid parameter override value</td><td>The run-time value specified is not valid.</td></tr><tr><td>400</td><td>400149</td><td>Parameter override value missing</td><td>The run-time value for the parameter was not specified and is required.</td></tr><tr><td>403</td><td>403149</td><td>Flow cannot be run</td><td>The flow parameter setting is disabled on the site preventing the flow run.</td></tr><tr><td>403</td><td>403150</td><td>Flow cannot be run</td><td>The flow cannot be run because flow parameters contain parameter domain type "any" but the <span class="uicontrol">Allow parameters that can accept any input</span> setting is disabled on the site.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI is unknown.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>404</td><td>404043</td><td>Flow parameter not found</td><td>The parameter ID specified in the request body does not match any of the existing parameters for this flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/1edc53ac-e247-4870-9fd3-6fad0ce5f84d/flows/ d00700fe-28a0-4ece-a7af-5543ddf38a82/run?flowRunMode=incremental" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
    <job id="57a8d2f6-899c-4c0f-9b25-fe0d007c5ad0" mode="Asynchronous" type="RunFlow" createdAt="2018-11-12T19:14:08Z">
        <runFlowJobType flowRunId="34b9f6d3-222a-2f2f-6a22-dd2f228a6ff2">
            <flow id="d00700fe-28a0-4ece-a7af-5543ddf38a82" name="SQLServerUserNamePassword Good"/>
        </runFlowJobType>
    </job>
</tsResponse>
```

## 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

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

#### 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

```
<tsResponse >
    <job id="job-id"
         mode="Asynchronous"
         type="RunFlow"
         createdAt="Datetime-CreatedAt">
        <runFlowJobType flowRunId="flow-run-id">
            <flow id="flow-id" name="flow-name"/>
        </runFlowJobType>
    </job>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400084</td><td>Flow run task error</td><td>The task specified is not a flow run task.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/tasks/runFlow/9f8e7d6c-5b4a-3f2e-1d0c-9b8a7f6e5d4c/runNow" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse version-and-namespace-settings>
    <job id="50afe58f-b719-4858-8b4b-e31700685c12" mode="Asynchronous" type="RunFlow" createdAt="2018-11-12T19:43:00Z">
        <runFlowJobType flowRunId="34b9f6d3-222a-2f2f-6a22-dd2f228a6ff2">
            <flow id="6f4bc5a1-3905-45a7-abbc-cdb735d0b79f" name="allUseCaseTFLX"/>
        </runFlowJobType>
    </job>
</tsResponse> 
```

## 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

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

#### 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

```
<tsResponse>
   <linkedTaskJob id="765dfdfc-26ec-47ea-b53b-54419c8f6b61"
    linkedTaskId="cde24429-6217-48e5-8ff5-f5dcd6a7006b"
    status="InProgress"
    createdAt="2022-02-15T00:22:22Z"/>
</tsResponse>.
```

```
{
    "linkedTaskJob": {
		"id": "765dfdfc-26ec-47ea-b53b-54419c8f6b61",
		"linkedTaskId": "cde24429-6217-48e5-8ff5-f5dcd6a7006b",
		"status": "InProgress",
		"createdAt": "2022-02-15T00:22:22Z"
	}
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400153</td><td>Generic error</td><td>Unable to run the linked task for some reason other than the ones specified below.</td></tr><tr><td>403</td><td>403155</td><td>Linked task cannot be run</td><td>The linked task setting is disabled on the site.</td></tr><tr><td>404</td><td>404045</td><td>Linked task not found</td><td>The linked task ID in the URI doesn't correspond to an existing linked task.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409082</td><td>Run now forbidden</td><td>Run now setting has been disabled.</td></tr></tbody></table>

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

## 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

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

#### 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

```
<tsResponse>
    <serverInfo>
        <productVersion build="build-number">product-version</productVersion>
        <restApiVersion>api-version</restApiVersion>
    </serverInfo>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

Copy

```
<tsRequest>  <users >    <user id="5c9a81df-7ec0-4752-a057-82cd2bb22c44"/>  </users></tsRequest>
```

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 '<tsRequest><users><user id="5c9a81df-7ec0-4752-a057-82cd2bb22c44" /></users></tsRequest>'
```

#### Response Code

200

#### Response Body

Copy

```
<tsResponse>  <customViewAsUserDefaultResults>    <customViewAsUserDefaultViewResult success="true">      <user id="5c9a81df-7ec0-4752-a057-82cd2bb22c44"/>    </customViewAsUserDefaultViewResult>  </customViewAsUserDefaultResults></tsResponse>
```

Copy

```
{  "customViewAsUserDefaultResults": {    "customViewAsUserDefaultViewResult": {      "success": "true",      "user": {        "id": "5c9a81df-7ec0-4752-a057-82cd2bb22c44"      }    }  }}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403162</td><td>Unauthorized Access</td><td>The user does not have adminstrator permissions.</td></tr><tr><td>404</td><td>404008</td><td>Resource Not Found</td><td>A custom view with the requested LUID could not be found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid Request Method</td><td>Request type was not GET.</td></tr></tbody></table>

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

## 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/current/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/current/api/rest_api/en-us/REST/rest_api_concepts_auth.htm#pod).

#### Parameter Values

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

#### 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).

```
<tsRequest>
  <credentials personalAccessTokenName="personal-access-token-name"
    personalAccessTokenSecret="personal-access-token-secret" >
      <site contentUrl="content-url" />
  </credentials>
</tsRequest>
```

### User name and password

Signing in with a user's user name and password:

```
<tsRequest>
  <credentials name="username" password="password" >
    <site contentUrl="content-url" />
  </credentials>
</tsRequest>
```

### Impersonating user using username and password

Signing in with server administrator's username and password to impersonate a user (Tableau Server only):

```
<tsRequest>
  <credentials name="username" password="password" >
	<site contentUrl="content-url" />
	<user id="user-to-impersonate" />
  </credentials>
</tsRequest>
```

### 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):

```
<tsRequest>
  <credentials personalAccessTokenName="personal-access-token-name"
    personalAccessTokenSecret="personal-access-token-secret" >
	  <site contentUrl="content-url" />
	  <user id="user-to-impersonate" />
  </credentials>
</tsRequest>
```

### 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)):

```
<tsRequest>
  <credentials jwt="json-web-token"
  <site contentUrl="content-url" />
  </credentials>
</tsRequest>
```

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.

<error code="401001">
  "summary": "Signin Error",
  "detail": "Error signing in to Tableau Cloud (10084)"
</error>

### 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

```
<tsRequest>
  <credentials jwt="json-web-token"
	isUat="true"
  <site contentUrl="content-url" />
  </credentials>
</tsRequest>
```

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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">personal-access-token-name</span>
                                            </td>
                                            <td>
                                                <p>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.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">personal-access-token-secret</span>
                                            </td>
                                            <td>
                                                <p>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 <a href="https://help.tableau.com/current/pro/desktop/en-us/useracct.htm#pat" ref="noreferrer" target="_blank">creates a personal access token</a> as described in the Tableau Help.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">username</span>
                                            </td>
                                            <td>
                                    The name of the user when signing in with username and password. The name and password in the <span class="api-command-ref">&lt;credentials&gt;</span> 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.
                                    <p class="note"><strong>Note</strong>: 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, <span class="uicontrol">domain_name\Adam</span>).
                                    </p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">password</span>
                                            </td>
                                            <td>The password when signing in with username and password.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">json-web-token</span>
                                            </td>
                                            <td>A JSON&nbsp;Web Token (JWT) associated with a Tableau connected app or unified access token (Tableau Cloud only).
                                <p> <b>Tableau connected apps JWT:</b> If using Tableau connected apps, the JWT&nbsp;uses a shared secret provided by the Tableau <a href="https://help.tableau.com/current/online/en-us/connected_apps.htm" target="_blank" rel="noreferrer">connected app</a> 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
			<a href="https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm" target="_blank" rel="noreferrer">access scopes</a>
								that determine which REST methods the external app can call.
</p><p><b>Unified access tokens:</b> 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.</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">is-uat</span>
                                            </td>
                                            <td>Enables JWT authorization using a unified access token (UAT) when set to <b>true</b>. Added in API 3.27, Tableau Cloud only.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">content-url</span>
                                            </td>
                                            <td>
                                                <p>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.</p>
                                                <p><code>mySite</code> is the content URL in the following example:</p>
                                                <p><code>http://&lt;server or cloud URL&gt;/#/site/<strong>mySite</strong>/explore</code>
                                                </p>
                                                <p>
									For Tableau Server, to specify the default site, omit <code>contentUrl</code> from the <code>site</code> element,
								or make the <code>contentUrl</code> value an empty string (<code>contentUrl=""</code>).</p>
                                                <p>
									For Tableau Cloud, a sign-in request must have a <code>site</code> element containing a <code>contentUrl</code> with
								the value of an existing site. If these are missing, the sign-in request will fail.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">user-to-impersonate</span>
                                            </td>
                                            <td>
								The LUID of a user to sign in as. For impersonation when a system administrator signs in with user name and password.
							</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <credentials token="authentication-token"
	  estimatedTimeToExpiration="time-to-expiration" >
	    <site id="site-id" contentUrl="content-url" />
	    <user id="user-id-of-signed-in-user"
  </credentials>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"><col class="api-error-table-col-2"><col class="api-error-table-col-3"><col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains both username/password and a personal access token, or contains malformed XML.</td></tr><tr><td>401</td><td>401001</td><td>Login error</td><td>The credentials (name or password, or personal access token name or secret) are invalid for the specified site, or the site contentURL is invalid.</td></tr><tr><td>401</td><td>401001</td><td>Login error</td><td>Login is blocked because several requests with invalid credentials were made.</td></tr><tr><td>401</td><td>401001</td><td>Login error</td><td>The Administrator requires the user to update their password.</td></tr><tr><td>401</td><td>401001</td><td>Login error</td><td>The password has expired.</td></tr><tr><td>401</td><td>401009</td><td>Login error</td><td>The request body is missing or empty.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.
							<p>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.</p><p>The error can also be caused by attempting to make a request to a SSL-protected server using HTTP, rather than HTTPS.</p></td></tr></tbody></table>

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

#### Example

`curl "https://MY-SERVER/api/3.29/auth/signin" -X POST -d @signin.xml`

**Content of signin.xml:**

```
<tsRequest>
  <credentials personalAccessTokenName="MY_PAT_NAME"
	personalAccessTokenSecret="vFel4qtGTZ2+Po0ZWT7YWg==:nMmSHnQ5kJBP17ZtsBgPtuVWdYJFAbBG"  >
      <site contentUrl="MarketingSite" />
  </credentials>
</tsRequest>
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <credentials token="HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3">
    <site id="9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d"
          contentUrl="MarketingSite"/>
  </credentials>
</tsResponse>
```

## 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/current/api/rest_api/en-us/REST/rest_api_ref_authentication.htm#jwt).

#### URI

POST /api/api-version/auth/signout

#### Parameter Values

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

#### 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

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

#### Request Body

```
<tsRequest>
   <site contentUrl="content-url" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">content-url</span>
                                            </td>
                                            <td>
                                                <p>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.</p>
                                                <p><code>mySite</code> is the content URL in the following example:</p>
                                                <p><code>http://&lt;server or cloud URL&gt;/#/site/<strong>mySite</strong>/explore</code>
                                                </p>
                                                <p>
									For Tableau Server, to specify the default site, omit <code>contentUrl</code> from the <code>site</code> element,
								or make the <code>contentUrl</code> value an empty string (<code>contentUrl=""</code>).</p>
                                                <p>
									For Tableau Cloud, a sign-in request must have a <code>site</code> element containing a <code>contentUrl</code> with
								the value of an existing site. If these are missing, the sign-in request will fail.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <credentials token="authentication-token" >
    <site id="site-id" contentUrl="content-url" />
    <user id="user-id-of-signed-in-user" />
  </credentials>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authentication credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authentication credentials were provided.</td></tr><tr><td>401</td><td>401003</td><td>Switch site error</td><td>There was a problem switching sites. The site might be unavailable or is not found.</td></tr><tr><td>403</td><td>403070</td><td>Cannot switch to the same site</td><td>The site specified as the destination site is also the current site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

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

#### Example

`curl "https://MY-SERVER/api/3.29/auth/switchSite" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"-d @switch_site.xml`

**Content of switch\_site.xml:**

```
<tsRequest>
   <site contentUrl="MarketingSite" />
</tsRequest>
```

**Example response:**

```
<tsResponse version-and-namespace-settings>
  <credentials token="HvZMqFFfQQmOM4L-AZNIQA|5fI6T54OPK1Gn1p4w0RtHv6EkojWRTwq|a946d998-2ead-4894-bb50-1054a91dcab3">
    <site id="9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d"
          contentUrl="MarketingSite"/>
  </credentials>
</tsResponse>
```

## Test a Webhook

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

#### URI

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

#### Parameter Values

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

#### Request Body

None.

#### Permissions

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

#### Access Scope

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

```
tableau:webhooks:test
```

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

#### Response Code

200

#### Response Body

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

## 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

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

#### 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The content ID in the URI doesn't correspond to an existing content of the requested type.</td></tr><tr><td>404</td><td>404035</td><td>Recommendation not found</td><td>A hidden recommendation for the given content ID was not found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">DELETE</span>.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/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/<site-id>/webhooks/<webhook-id>

#### Parameter Values

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

#### Request Body

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

#### Attribute Values

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

#### Permissions

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

#### Access Scope

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

```
tableau:webhooks:update
```

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

#### Response Code

200

#### Response Body

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

#### Errors

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

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

#### Response Headers

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">pool-id</span></td><td>The unique identifier (UUID) of the pool to update.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <edgePool>
    <pool name="Updated Production Pool" />
  </edgePool>
</tsRequest>
```

```
{
  "edgePool": {
    "pool": {
      "name": "Updated Production Pool"
    }
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">name</span></td><td>Required. New display name for the pool, 1–80 characters, unique on the site (excluding the current pool).</td></tr></tbody></table>

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004 / 400929</td><td>Invalid pool ID, missing name, or duplicate name</td><td>Pool ID must be valid UUID; name required, 1–80 characters, unique (excluding current pool).</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503901</td><td>Unexpected server error</td><td>An unexpected error occurred while updating the pool.</td></tr></tbody></table>

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

## Update Cloud Extract Refresh Task

Updates an extract refresh task on Tableau Cloud.

_For Tableau Server, see [Update server schedule](https://help.tableau.com/current/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

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

#### Request Body

```
<tsRequest>
  <extractRefresh type="FullRefresh">
    <workbook id="13237fd-6365-44d5-925b-644e5281b605" />
  </extractRefresh>
  <schedule frequency="Daily">
    <frequencyDetails start="18:30:00" end="23:30:00">
      <intervals>
        <interval hours="4"/>
        <interval weekDay="Sunday"/>
        <interval weekDay="Wednesday"/>
      </intervals>
    </frequencyDetails>
  </schedule>
</tsRequest>
```

```
{
  "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.

<table class="api-parameters-table">
                                <colgroup>
                                    <col width="30%">
                                    <col width="70%">
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><code>extractRefresh type</code>
                                        </td>
                                        <td><i>enumeration:</i> The type of extract refresh being scheduled. Valid values include:
						<ul><li><code>FullRefresh</code></li><li><code>IncrementalRefresh</code></li></ul></td>
                                    </tr>
                                    <tr>
                                        <td><code>workbook id</code> <br> or <code>datasource id</code> <br> or <code>virtualConnection id</code></td>
                                        <td><i> LUID:</i> The LUID of the workbook, data source, or virtual connection that is the target of the custom schedule.</td>
                                    </tr>
                                    <tr>
                                        <td><code>extractRefresh transactionLevel</code>
                                        </td>
                                        <td>
                                            <p><i>(Optional) :</i> Only used with a virtual connection.</p>
                                            <p>Optional. <span class="uicontrol">DATABASE</span> or <span class="uicontrol">TABLE</span>. Default is <span class="uicontrol">DATABASE</span>.</p>
                                            <ul>
                                                <li>If set to <span class="uicontrol">DATABASE</span>: If any table extract refresh fails, none of the extracts are updated.</li>
                                                <li>If set to <span class="uicontrol">TABLE</span>: If a table extract fails, only that table's extract isn't updated.</li>
                                            </ul>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>startingItemId</code>
                                        </td>
                                        <td>
                                            <p>Only used with a virtual connection, when <code>extractRefresh type</code> is <code>FullRefresh</code></p>
                                            <p>The LUID of an extract table in the virtual connection. You may have more than one <code>&lt;startingItemId&gt;</code> element inside of a <code>&lt;startingItemIds&gt;</code> element. See Virtual Connection Example.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>tableLuid</code>
                                        </td>
                                        <td>
                                            <p>Only used with a virtual connection, when <code>extractRefresh type</code> is <code>IncrementalExtract</code></p>
                                            <p>The LUID of an extract table in the virtual connection. You may have more than one <code>&lt;tableLiud&gt;</code> element inside of a <code>&lt;tableLiuds&gt;</code> element. See Virtual Connection Example.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>schedule frequency</code>
                                        </td>
                                        <td><i>enumeration:</i> The scheduled frequency for triggering the extract refresh. Valid values include:
							<ul><li>Hourly</li><li>Daily</li><li>Weekly</li><li>Monthly</li></ul></td>
                                    </tr>
                                    <tr></tr>
                                    <tr>
                                        <td><code>frequencyDetails start</code>
                                        </td>
                                        <td><i>time:</i> If the schedule frequency is <code>Daily, Weekly, or Monthly</code>, then <code>start</code> is the time of day on
						which scheduled jobs should run. If the frequency is <code>Hourly</code>, then <code>start</code> is the beginning of the
						time range during which jobs should be started. The valid format is <code>HH:MM:SS</code>.
					</td>
                                    </tr>
                                    <tr>
                                        <td><code>frequencyDetails end</code>
                                        </td>
                                        <td>
                                            <p><i>time:</i> If the schedule frequency is <code>Hourly</code>, or <code>Daily</code> with an interval of
							<code>hours</code> less than <code>24</code>, then <code>end</code> is the time of day on which scheduled jobs should stop being run.
							The valid format is <code>HH:MM:SS</code>. 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 <code>frequencyDetail</code> would be:
						</p>
                                            <div class="codeSnippet">
                                                <div class="codeSnippetBody"><pre><code>&lt;frequencyDetail start="20:45:00" end="21:45:00"&gt;<br>&nbsp;&nbsp;&nbsp;&nbsp;. . .&nbsp;<br>&lt;/frequencyDetail&gt;</code></pre>
                                                </div>
                                            </div>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>interval <i>{interval type}</i></code>
                                        </td>
                                        <td><i>string:</i> Defines when and how often a scheduled job executes within the time parameters set in the <code>start</code> and <code>end</code>
							 values of the <code>frequencyDetails</code> of the <code>schedule</code>. The type and valid values for
							an interval expression depend on the declared <code>frequency</code> of the <code>schedule</code> as follows:<br><br><table><colgroup><col width="20%"><col width="80%"></colgroup><tbody><tr align="left"><th><b>Frequency</b></th><th><b>Valid interval values</b></th></tr><tr><td><code>Hourly</code></td><td>
									The value of an interval for an <code>Hourly</code> schedule can be only one of either:
									<ul><li><code>hours=“1"</code>
									The number of hours between jobs. <code>1</code> is the only valid value.</li><li><code>minutes=“60"</code>
									 The number of minutes between jobs. <code>60</code> is the only valid value.</li><li><code>weekDay=“<i>weekday</i>"</code> The weekday(s) the job will be run on.
											Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
											Thursday, Friday, and Saturday</code>. <br><br>
											For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
											use an interval like:
											<br><div class="codeSnippet"><a class="codeSnippetCopyButton" role="button">Copy</a><div class="codeSnippetBody"><pre><code>&lt;intervals&gt;<br>&nbsp;&nbsp;&lt;interval hours="1"/&gt;<br>&nbsp;&nbsp;&lt;interval weekDay="Sunday"/&gt;<br>&nbsp;&nbsp;&lt;interval weekDay="Wednesday"/&gt;<br>&nbsp;&lt;intervals&gt;</code></pre></div></div></li></ul></td></tr><tr><td><code>Daily</code></td><td>
									The value of <code>Daily</code> can have multiple <code>weekday</code> elements, but only one <code>hours</code> declaration.
										An <code>hours</code> interval is required.
									<ul><li><code>hours=“<i>interval</i>"</code> The interval between execution of jobs on the weekday(s) specified.
											Valid values are <code>2, 4, 6, 8, 12, or 24</code>. Note that if the <code><i>interval</i></code> value of a daily schedule
												is less than <code>24</code>, a <code>frequencyDetail end</code> time must be supplied. </li><li><code>weekDay=“<i>weekday</i>"</code> The weekday(s) the job will be run on.
											Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
										 	Thursday, Friday, or Saturday</code>. <br><br>
											For example, to schedule to run a job every 4 hours	on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
											use an interval like:<br><div class="codeSnippet"><a class="codeSnippetCopyButton" role="button">Copy</a><div class="codeSnippetBody"><pre><code>&lt;intervals&gt;<br>&nbsp;&nbsp;&lt;interval hours="4"/&gt;<br>&nbsp;&nbsp;&lt;interval weekDay="Sunday"/&gt;<br>&nbsp;&nbsp;&lt;interval weekDay="Wednesday"/&gt;<br>&lt;intervals&gt;</code></pre></div></div></li></ul></td></tr><tr><td><code>Weekly</code></td><td><code>weekDay=“<i>weekday</i>"</code>
												The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are:
											<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.</code></td></tr><tr><td><code>Monthly</code></td><td> <p>The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:</p><p>Specify the day(s) using the number of the day in the month;
											</p><ul><li><code>monthDay=“<i>day</i>"</code> The number of the day of the month. Valid values are the whole numbers
												<code>1</code> to <code>31</code> or <code>LastDay</code>. If you specify <code>monthDay</code> by day number
												then you can use multiple <code>interval</code> instances to choose for the job to
												run on multiple days in the month. If you use <code>LastDay</code> then only one instance of <code>interval</code>
												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:<br><div class="codeSnippet"><a class="codeSnippetCopyButton" role="button">Copy</a><div class="codeSnippetBody"><pre><code>&lt;intervals/&gt;<br>&nbsp;&nbsp;&lt;interval monthDay="1"/&gt;<br>&nbsp;&nbsp;&lt;interval monthDay="15"/&gt;<br>&lt;/intervals/&gt;</code></pre></div></div></li></ul><p></p><p>Specify the day by describing which occurrence of a weekday within the month.
										</p><ul><li><code>monthDay=“<i>occurrence_of_weekday</i>" Weekday=“<i>weekday</i>"</code>
													The occurrence of the specified weekday within the month when a job should be run.
													Valid values for <code><i>occurrencee_of_weekday</i></code> are	<code>First, Second, Third, Fourth, Fifth, or LastDay</code>.
													Valid values for <code><i>weekday</i></code> are
													<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday</code>.
													If the value is <code>lastDay</code> then the job will run on
													the last occurrence of the specified weekday in the month.<br><br>
													For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:<br><div class="codeSnippet"><a class="codeSnippetCopyButton" role="button">Copy</a><div class="codeSnippetBody"><pre><code>&lt;interval monthDay="Third" weekDay="Thursday"/&gt;</code></pre></div></div></li></ul><p></p></td></tr></tbody></table></td>
                                    </tr>
                                </tbody>
                            </table>

#### 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 `<extractRefresh>` 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:_

```
<extractRefresh type="IncrementalRefresh" transactionLevel="TABLE">
  <virtualConnection id="33a16da9-e96b-4190-83ed-c85192683052" />
  <tableLuids>
    <tableLuid>b4e39d59-19c3-4380-8ea4-9bfa4ed8fb84</tableLuid>
    <!-- . . . more <tableLuid> elements . . . -->
  </tableLuids>
</extractRefresh>
```

#### 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 "<tsRequest> <extractRefresh type='FullRefresh'> <workbook id='0057ccac-872a-11e5-bb51-f763326b1350' /> </extractRefresh> <schedule frequency='Daily'> <frequencyDetails start='18:30:00' end='22:30:00'> <intervals> <interval hours='4'/> </intervals> <intervals> <interval weekDay='Sunday'/> </intervals> <intervals> <interval weekDay='Wednesday'/> </intervals> </frequencyDetails> </schedule> </tsRequest>"` ``

#### 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.

```
<tsResponse>
  <extractRefresh
    id="13237fd-6365-44d5-925b-644e5281b605"
    consecutiveFailedCount="0"
    type="IncrementalRefresh" >
      <datasource id="0057ccac-872a-11e5-bb51-f763326b1350" />
  </extractRefresh>
  <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"/>
          <interval weekDay="Sunday"/>
          <interval weekDay="Wednesday"/>
        </intervals>
      </frequencyDetails>
  </schedule>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The request did not include a valid schedule payload.</td></tr><tr><td>400</td><td>409004</td><td>Invalid parameter</td><td>A value in the request is invalid or missing. This includes an invalid or missing schedule or interval value, or <code>start</code> and <code>end</code> times that are not valid for the schedule. For hourly and daily schedules that use hour intervals, the difference between <code>start</code> and <code>end</code> must be a multiple of one hour. This error also includes <code>transactionLevel</code> sent for a task that is not a virtual connection task, a <code>startingItemIds</code> entry that is not a valid ID, or more <code>startingItemIds</code> entries than the maximum allowed per request.</td></tr><tr><td>400</td><td>400225</td><td>Duplicate table ID</td><td><code>startingItemIds</code> contains the same table ID more than once.</td></tr><tr><td>400</td><td>400223</td><td>Table not found</td><td>A table ID in <code>startingItemIds</code> is not in the virtual connection's active revision.</td></tr><tr><td>400</td><td>400224</td><td>Table not in extract mode</td><td>A table ID in <code>startingItemIds</code> refers to a table that is in live mode.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized Access</td><td>The user is not authorized to make this request.</td></tr><tr><td>403</td><td>403200</td><td>Virtual connection task forbidden</td><td>The user cannot see, or cannot manage or refresh the extract of, the virtual connection that the task refreshes.</td></tr><tr><td>404</td><td>404026</td><td>Task not found</td><td>The task does not exist, is not an extract refresh task, or targets content that no longer exists.</td></tr><tr><td>404</td><td>404023</td><td>Schedule not found</td><td>The task's existing schedule could not be found while merging the new schedule values.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The site is not on Tableau Cloud, or the task refreshes a virtual connection and virtual connection custom-schedule tasks are disabled for the site.</td></tr><tr><td>409</td><td>409130</td><td>Task state invalid</td><td>The stored virtual connection task is in an unexpected state and must be repaired or recreated.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <column description="new-description-value">
  </column>
</tsRequest>
```

#### Attribute Values

Any combination of attributes inside the **<column>** 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.

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide" style="width: 264px;"> <col></colgroup><tbody><tr><td><span class="api-placeholder">new-description-value</span></td><td>(Optional) Custom text to describe the column.</td></tr></tbody></table>

#### 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:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.5.xsd">
  <column id="0b589fc9-1523-4aae-b711-62d48672ac6a" name="StateProvinceID" description="Validated against maps" remoteType="I4" parentTableId="75029ee7-935a-4f57-8717-58c2339dd219">
	<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
  </column>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The requested table asset could not be found.</td></tr><tr><td>409</td><td>409052</td><td>Column error</td><td>An unknown table asset error occurred.</td></tr><tr><td>409</td><td>409057</td><td>Column update error</td><td>An unknown error occurred and the table asset could not be updated.</td></tr><tr><td>409</td><td>409058</td><td>Column update forbidden</td><td>A user without "write"&nbsp;permissions to the table asset attempted an update.</td></tr><tr><td>409</td><td>409066</td><td>Column not found</td><td>The requested column asset could not be found.</td></tr></tbody></table>

## 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

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

#### Request Body

For Tableau Cloud and Tableau Server using API 3.23 or later

```
<tsRequest>
  <connectedApplication
		name="name"
		enabled="enabled"
		domainSafelist="domainSafelist"
		unrestrictedEmbedding="unrestrictedEmbedding">
				<projectIds>
					<projectId>project_id</projectId>
					<projectId>project_id</projectId>
					<projectId>project_id</projectId>
				</projectIds>
  </connectedApplication>
</tsRequest>
```

For Tableau Server (or Tableau Cloud) using API 3.21 or earlier

```
<tsRequest>
  <connectedApplication
		name="name"
		enabled="enabled"
		projectId="project_id" domainSafelist="domainSafelist"
		unrestrictedEmbedding="unrestricedEmbedding" />
</tsRequest>
```

#### Attribute Values

Any combination of attributes inside the <connectedApplication> element is valid.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">name</span>
                                    </td>
                                    <td>
                        (Optional) The new name of the connected app. </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">enabled</span>
                                    </td>
                                    <td>
                        (Optional) Controls whether the connected app is enabled or not. Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". If the state is not specified, the connected app is set to "false" and not enabled by default. </td>
                                </tr>
                                <tr>
                                    <td><a name="project_update"></a><span class="api-placeholder">project_id</span>
                                    </td>
                                    <td>
                                        <p>(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 <a href="#query_projects">Query Projects</a>. You can specify one project, multiple projects, and all projects on a site.</p>
                                        <ul>
                                            <li>
                                                <p><b>Single project:</b>
                                                </p>
                                                <ul>
                                                    <li>
                                                        <p>For Tableau Cloud (using API&nbsp;3.22 or later) and Tableau Server (using API&nbsp;3.23 or later), to scope the connected app's access to one project, the recommended workflow is to specify the <span class="api-command-ref">projectIds</span> and <span class="api-command-ref">projectId</span> attributes and projectId value. </p>
                                                    </li>
                                                    <li>
                                                        <p>For Tableau Server (or Tableau Cloud) using API 3.21 or earlier, specify the <span class="api-command-ref">projectId</span> attribute and its value.</p>
                                                    </li>
                                                </ul>
                                            </li>
                                            <li>
                                                <p><b>Multiple projects:</b> Beginning with API 3.22 (February 2024) for Tableau Cloud and API 3.23 for Tableau Server, you can specify the <span class="api-command-ref">projectIds</span> and <span class="api-command-ref">projectId</span> attributes and  projectId values  to scope the connected app's access to multiple projects. </p>
                                            </li>
                                            <li>
                                                <p><b>All projects:</b>
                                                </p>
                                                <ul>
                                                    <li>
                                                        <p>For Tableau Cloud (using API&nbsp;3.22 or later) and Tableau Server (using API&nbsp;3.23 or later), specify the <span class="api-command-ref">projectIds</span> attribute and do not specify values. For example, <span class="api-command-ref">&lt;projectIds&gt;&lt;/projectIds&gt;</span>.</p>
                                                    </li>
                                                    <li>
                                                        <p>For Tableau Server (or Tableau Cloud) using&nbsp;API 3.21 or earlier, specify the <span class="api-command-ref">projectId</span> attribute and leave its value empty. For example <code>projectId=""</code>. </p>
                                                    </li>
                                                </ul>
                                                <p><b>Note:</b>&nbsp;If the <code>projectIds</code> or <code>projectId</code>&nbsp;is not included in the request, the connected apps' access level is not updated.</p>
                                            </li>
                                        </ul>
                                        <p><b>Note:</b>&nbsp;The stand-alone <span class="uicontrol">projectId</span> attribute will be retired in a future release so we recommend using <span class="api-command-ref">projectIds</span> attribute instead.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">domainsafelist</span>
                                    </td>
                                    <td>
                                        <p>(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 <a href="https://help.tableau.com/current/server-linux/en-us/connected_apps.htm#domain_rules" target="_blank">Domain allowlist rules</a> in the Tableau Server Help or <a href="https://help.tableau.com/current/online/en-us/connected_apps.htm#domain_rules" target="_blank">Domain allowlist rules</a> in the Tableau Cloud Help.</p>
                                        <p><b>Important:</b> We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow. </p>
                                        <p>For example: <code>https://tableau.com https://myco.com:552 marketing.example.com</code></p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">unrestrictedEmbedding</span>
                                    </td>
                                    <td>(Optional, embedding workflows only) Controls whether the connected app can be hosted on all domains. If "<span class="uicontrol">true</span>" value is specified, the connected app can trust and connect to all domains. If  "<span class="uicontrol">false</span>" value is specified, the connected app can only be hosted on the domains specified in the <code>&lt;domainSafelist&gt;</code> attribute.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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:**

```
<tsResponse>
  <connectedApplication>
	<secret>
	  <id>d8a51b6c-bf70-4aaf-959b-93d2ba4897e6</id>
	  <createdAt>2021-08-18T17:59:11Z</createdAt>
	</secret>
	<name>ConnectedApp_MyCo</name>
	<enabled>true</enabled>
	<clientId>9486dee1-ca98-4144-b6e0-f5c555e64796</clientId>
	<projectIds>
		<projectId>1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e</projectId>
		<projectId>1234de4e-5d6d-7c8c-9b0b-1a2a3f4f5e0e</projectId>
	</projectIds>
	<createdAt>2021-08-18T17:48:03Z</createdAt>
	<unrestrictedEmbedding>true</unrestrictedEmbedding>
  </connectedApplication>
</tsResponse>
```

**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/current/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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400109</td><td>Bad request</td><td>The request body can't be empty.</td></tr><tr><td>400</td><td>400143</td><td>Generic connected app error</td><td>The connected app could not be deleted for some other reason than those specified in this table.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404041</td><td>Connected app not found</td><td>The requested connected app could not be found.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <customView name="new-name" >
	  <owner id="cdfe8548-84c8-418e-9b33-2c0728b2398a" />
  </customView>
</tsRequest>
```

```
{
  "customView": {
    "name": "new-name",
	"owner": {
	  "id": "cdfe8548-84c8-418e-9b33-2c0728b2398a"
	}
  }
}
```

#### Request Attributes

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><code>customView name</code></td><td>(Optional) <i>string</i> The new name of the custom view that replaces the existing one.</td></tr><tr><td><code>owner id</code></td><td>(Optional) <i>LUID</i> The LUID of the new owner of custom view that replaces the existing one.</td></tr></tbody></table>

#### 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 "<tsRequest> <customView name='new-name'> <owner id='cdfe8548-84c8-418e-9b33-2c0728b2398a' /> </customView> </tsRequest>"`

#### Response Code

200

#### Response Body

```
<tsResponse>
  <customView
    id="37d015c6-bc28-4c88-989c-72c0a171f7aa"
    name="new-name_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="my workbook"/>
      <owner id="cdfe8548-84c8-418e-9b33-2c0728b2398a" name="workgroupuser"/>
  </customView>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403162</td><td>Unauthorized Access</td><td>The user does not have adminstrator permissions or <b>Read</b> permissions for the custom view..</td></tr><tr><td>404</td><td>404008</td><td>Resource Not Found</td><td>A custom view with the requested LUID could not be found.</td></tr><tr><td>405</td><td>405000</td><td>Invalid Request Method</td><td>Request type was not GET.</td></tr></tbody></table>

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

## 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/current/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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the data source.</td></tr><tr><td><span class="api-placeholder">datasource-id</span></td><td>The ID of the data source to update.</td></tr><tr><td><span class="api-placeholder">connection-id</span></td><td>The ID of the connection. To determine what connections are available for a data source, call Query Data Source Connections.</td></tr><tr><td><span class="api-placeholder">upload-session-id</span></td><td>The 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.</td></tr></tbody></table>

#### 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">actions-type</span></td><td>(Required) The definition of the operation(s) to perform on the data in the target hyper file.</td></tr><tr><td><span class="api-placeholder">source-schema-name</span></td><td>(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.</td></tr><tr><td><span class="api-placeholder">source-table-name</span></td><td>(Required) The name of the source database table containing the data to be updated.</td></tr><tr><td><span class="api-placeholder">target-schema-name</span></td><td>(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.</td></tr><tr><td><span class="api-placeholder">target-table-name</span></td><td>(Required) The name of the table containing the data to be updated in the target hyper file.</td></tr><tr><td><span class="api-placeholder">condition</span></td><td>(Required for <code>insert</code>, <code>upsert</code>, and <code>delete</code>)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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm">Update Data in Published Live-to-Hyper Data Sources</a>.</td></tr></tbody></table>

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/current/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/current/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/current/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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed JSON.</td></tr><tr><td>400</td><td>400008</td><td>Invalid parameter value</td><td>A parameter in the request body is missing or invalid.</td></tr><tr><td>403</td><td>403062</td><td>Update data source multiple connections forbidden</td><td>A connection ID is required because the data source has multiple connections. Consider using <a href="#update_data_in_hyper_connection">Update Data in Hyper Connection</a> to specify the connection. <i>(This error does not apply to that Connection method)</i></td></tr><tr><td>403</td><td>403032</td><td>Update forbidden</td><td>A non-administrator user tried to update a data source, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source LUID in the request body doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404008</td><td>Operation not supported</td><td>The operation requested is not supported, the source data for the connection must be a Hyper file/database.</td></tr><tr><td>404</td><td>404020</td><td>Connection not found</td><td>No resource was found for the specified connection and data source. <i>(This error does not apply to Update Data in Hyper Data Source)</i></td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PATCH</span>.</td></tr><tr><td>409</td><td>409015</td><td>Data source name conflict</td><td>The data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.</td></tr><tr><td>409</td><td>409094</td><td>Data update job already exists</td><td>A data update job for the datasource is already queued or in progress.</td></tr></tbody></table>

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

## 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/current/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

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

#### 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">actions-type</span></td><td>(Required) The definition of the operation(s) to perform on the data in the target hyper file.</td></tr><tr><td><span class="api-placeholder">source-schema-name</span></td><td>(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.</td></tr><tr><td><span class="api-placeholder">source-table-name</span></td><td>(Required) The name of the source database table containing the data to be updated.</td></tr><tr><td><span class="api-placeholder">target-schema-name</span></td><td>(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.</td></tr><tr><td><span class="api-placeholder">target-table-name</span></td><td>(Required) The name of the table containing the data to be updated in the target hyper file.</td></tr><tr><td><span class="api-placeholder">condition</span></td><td>(Required for <code>insert</code>, <code>upsert</code>, and <code>delete</code>)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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm">Update Data in Published Live-to-Hyper Data Sources</a>.</td></tr></tbody></table>

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/current/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/current/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/current/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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed JSON.</td></tr><tr><td>400</td><td>400008</td><td>Invalid parameter value</td><td>A parameter in the request body is missing or invalid.</td></tr><tr><td>403</td><td>403062</td><td>Update data source multiple connections forbidden</td><td>A connection ID is required because the data source has multiple connections. Consider using <a href="#update_data_in_hyper_connection">Update Data in Hyper Connection</a> to specify the connection. <i>(This error does not apply to that Connection method)</i></td></tr><tr><td>403</td><td>403032</td><td>Update forbidden</td><td>A non-administrator user tried to update a data source, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source LUID in the request body doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404008</td><td>Operation not supported</td><td>The operation requested is not supported, the source data for the connection must be a Hyper file/database.</td></tr><tr><td>404</td><td>404020</td><td>Connection not found</td><td>No resource was found for the specified connection and data source. <i>(This error does not apply to Update Data in Hyper Data Source)</i></td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PATCH</span>.</td></tr><tr><td>409</td><td>409015</td><td>Data source name conflict</td><td>The data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.</td></tr><tr><td>409</td><td>409094</td><td>Data update job already exists</td><td>A data update job for the datasource is already queued or in progress.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <dataQualityWarning type="type" isActive="status" message="message" isSevere="severity"/>
</tsRequest>
```

#### Attribute Values

Any combination of attributes inside the **<dataQualityWarning>** element is valid, but the data quality warning type is required. If the data quality warning type is not included, an error is thrown.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">type</span>
                                    </td>
                                    <td>
                                        <p>Type of data quality warning to apply to the asset. To specify the type, use one of the following values:</p>
                                        <ul>
                                            <li><span class="uicontrol">DEPRECATED</span>
                                            </li>
                                            <li><span class="uicontrol">WARNING</span>
                                            </li>
                                            <li><span class="uicontrol">STALE</span>
                                            </li>
                                            <li><span class="uicontrol">MAINTENANCE</span>
                                            </li>
                                        </ul>
                                        <p class="note">Note: In Tableau Server 2023.1 and earlier, <span class="uicontrol">SENSITIVE_DATA</span> is another type of data quality warning. Starting in Tableau Cloud June 2023 and Tableau Server 2023.3, it's a sensitivity label instead.</p>
                                        <p>These values are not case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">status</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Controls whether the data quality warning displays. Value can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". If the state is not specified, the data quality warning is set to "true" and is visible by default.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">message</span>
                                    </td>
                                    <td>
                                        <p>(Optional. Was required in Tableau Server 2023.3 and earlier.)</p>
                                        <p>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/Img/formatting_guide.png" target="_blank">formatting guide</a> that's normally visible as a tooltip in the UI.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">severity</span>
                                    </td>
                                    <td>(Optional) Enables high visibility for the data quality warning when set to "<span class="uicontrol">true</span>". Values can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm#high_visibility">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm#high_visibility">Cloud Help</a>. </td>
                                </tr>
                            </tbody>
                        </table>

#### 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:**

```
<tsResponse>
   <dataQualityWarning id="3b9fa2df-0915-4cda-9e29-bccb64a2eb7b" userDisplayName="Steve Nguyen"
	contentId="924ae707-a915-498d-b909-a86cd5135b8d" contentType="DATABASE" message="OUT OF DATE - DO NOT USE"
	type="WARNING" isActive="true" createdAt="2021-01-12T01:04:55Z" updatedAt="2021-01-12T01:23:04Z"
	isSevere="true">
	<site id="3d512018-64c4-4b66-a1fa-1c83710e323c" />
	<owner id="2bfe6c21-17e0-449a-8e5c-123e740eca45" />
   </dataQualityWarning>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400109</td><td>Bad request</td><td>The request body can't be empty.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404029</td><td>Content not found</td><td>The requested asset could not be found.</td></tr><tr><td>404</td><td>404030</td><td>Data quality warning not found</td><td>The data quality warning for the requested asset could not be found.</td></tr></tbody></table>

## 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/current/api/rest_api/en-us/REST/rest_api_how_to_update_data_to_hyper.htm).

#### Path Parameter Values

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

#### Request Body

```
<tsRequest>
  <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]"/>
  </datasource>
</tsRequest>
```

```
{
  "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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>datasource name</code>
                                            </td>
                                            <td>(Optional) The new name of a the data source.
							</td>
                                        </tr>
                                        <tr>
                                            <td><code>project</code>
                                            </td>
                                            <td>(Optional) The LUID of a project to add the data source to.
							</td>
                                        </tr>
                                        <tr>
                                            <td><code>owner</code>
                                            </td>
                                            <td>(Optional) The LUID of a user to assign the data source to as owner.
							</td>
                                        </tr>
                                        <tr>
                                            <td><code>datasource certification-status</code>
                                            </td>
                                            <td>(Optional) A Boolean value that indicates whether the data source is certified. To learn more about data source certification, see <a href="https://help.tableau.com/current/pro/desktop/en-us/datasource_recommended.html">Use Certified and Recommended Data Sources and Tables</a>.
							</td>
                                        </tr>
                                        <tr>
                                            <td><code>datasource certification-note</code>
                                            </td>
                                            <td>(Optional) A note that provides more information on the certification of the data source, if applicable.
							</td>
                                        </tr>
                                        <tr>
                                            <td><code>datasource encryptExtracts</code>
                                            </td>
                                            <td>(Optional) <b>true</b> to encrypt the extracts or <b>false</b> to not encrypt extracts. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm" class="xref">Extract and Encryption Methods</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><code>askDataEnablement</code>
                                            </td>
                                            <td>
                                                <p class="note">
									This attribute is removed in API 3.12 and later (Tableau Cloud September 2021 / Server 2021.3).
								</p>
                                                <p>
									(Optional) Determines if a data source allows use of Ask Data. The value can be <code>Enabled</code>, <code>Disabled</code>,
									or <code>SiteDefault</code>.
								</p>
                                                <p>
									If <code>enablement</code> is not specified, Ask Data availability for the data source is unchanged during this update.
									If the <code>askData</code> element is included, it must contain an <code>enablement</code> attribute. Setting the value of
									<code>enablement</code> to <code>SiteDefault</code> for a data source will cause its enablement to follow the site's settings
									for <span class="api-command-ref">Availability of Ask Data</span>. A value of <code>Enabled</code> or <code>Disabled</code> will
									override a site's settings for the data source unless the setting <span class="api-command-ref">Always disable Ask Data</span>
									is selected. In that case, Ask Data will not be available for the data source regardless of the value of <code>enablement</code>.
								</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

Any combination of the attributes inside the <datasource> 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 <project> element is included, the id attribute must be included, and any other attributes of the <project> element are ignored.

If the <owner> 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 "<tsRequest> <datasource name='Sales'/> </tsRequest>"
```

#### Response Code

200

#### Response Body

```
<tsResponse>
  <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]" />
  </datasource>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400008</td><td>Invalid parameter value</td><td>A user attempted to rename a datasource to a name containing only spaces, or to a name with more 255 characters.</td></tr><tr><td>400</td><td>400129</td><td>Invalid Ask Data enablement</td><td>The requested enablement setting in the request body does not correspond to the site configuration.</td></tr><tr><td>403</td><td>403027</td><td>Owner update forbidden</td><td>A non-administrator user tried to change the owner for the data source.</td></tr><tr><td>403</td><td>403030</td><td>Project update forbidden</td><td>A non-administrator user tried to change the project for the data source, but the caller doesn't have <span class="api-command-ref">Write</span> permission for the project.</td></tr><tr><td>403</td><td>403032</td><td>Update forbidden</td><td>A non-administrator user tried to update a data source, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403141</td><td>Update forbidden</td><td>A user attempted to update a data source that they do not have permissions to update.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>Owner not found</td><td>The owner ID in the request body doesn't correspond to an existing owner.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the request body doesn't correspond to an existing project.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span> or <span class="api-command-ref">PATCH</span>.</td></tr><tr><td>409</td><td>409015</td><td>Data source name conflict</td><td>The data source name in the request already belongs to the specified site. For the purpose of uniqueness checks, data source names are case-insensitive.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site that contains the data source.</td></tr><tr><td><span class="api-placeholder">datasource-luid</span></td><td>The LUID of the data source to update.</td></tr><tr><td><span class="api-placeholder">connection-luid</span></td><td>The LUID of the connection to update. To determine what connections are available for a data source, call <a href="#query_data_source_connections">Query Data Source Connections</a>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <connection
	serverAddress="newAddress"
	serverPort="newPort"
	authenticationType="new Auth Type"
	userName="Jane Doe"
	password="xxxxxx"
	embedPassword="false"
	queryTaggingEnabled="false" />
</tsRequest>
```

```
{
  "connection": {
	"serverAddress": "newAddress",
	"serverPort": "newPort",
	"userName": "Jane Doe",
	"authenticationType": "new Auth Type",
	"password": "xxxxxx",
	"embedPassword": "false",
	"queryTaggingEnabled": "false"
  }
}
```

#### Request Attributes

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">connection serverAddress</span>
                                            </td>
                                            <td> The new server for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection serverPort</span>
                                            </td>
                                            <td> The new port for the connection</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection authenticationType</span>
                                            </td>
                                            <td>Added in version 3.27.
                                <p>*The new authentication type for the connection.</p><p>Standard values:</p><ul><li><p><code>auth-user-pass</code>:&nbsp;username and password</p></li><li><p><code>oauth</code></p></li><li><p><code>auth-keypair</code>:&nbsp;keypair authentication</p></li></ul><p>Connector-specific values:</p><ul><li><p><code>sqlserver</code>:&nbsp;SQL&nbsp;Server username and password</p></li><li><p><code>Azure AD Password</code></p></li><li><p><code>AD Service Principal</code></p></li><li><p><code>username-password</code>:&nbsp;Several connectors use this value. For example, SAP&nbsp;HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.</p></li></ul><p>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_sources" target="_blank">Query Datasource Connections</a> or <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbook_connections" target="_blank">Query Workbook Connections</a>, which returns the authentication type string in the response. </p><p>Alternatively,  you can inspect the <code>&lt;connection&gt;</code> element in the XML of a workbook or data source which is available locally. Look for the value of the <code>authentication</code> attribute of the connection. </p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection userName</span>
                                            </td>
                                            <td>The new username for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection password</span>
                                            </td>
                                            <td>The new password for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">embedPassword</span>
                                            </td>
                                            <td><code>True</code> to embed the password; otherwise, <code>False</code>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">queryTaggingEnabled</span>
                                            </td>
                                            <td>
                                                <blockquote><p>[!WARNING]</p><p>Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the <code>queryTaggingEnabled</code> attribute is deprecated,
									will no longer be supported, and may be retired in future releases.<br><br>Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by
									setting <a href="https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#native_apiUserInfoInGeneratedSQLEnabled" target="_blank"><code>native_api.UserInfoInGeneratedSQLEnabled</code></a> to <code>true</code>.</p></blockquote>
                                                <p>For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If <code>true</code>, query tagging is enabled. If <code>false</code>, query tagging is disabled. The default is <code>false</code>.</p>
                                                <p>For more information on query tagging, see 	<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_how_to_query_tagging.htm" target="_blank" class="xref">Understand Workbook Impact on Your Database Using Query Tagging</a>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

Any combination of the attributes inside the <connection> 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

```
<tsResponse>
  <connection id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd"
	serverAddress="database.example.com"
	serverPort="12345"
	authenticationType="new Auth Type"
	userName="jajohnson"
	queryTaggingEnabled="false" />
</tsResponse>
```

```
{
  "connection": {
	"id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd",
	"serverAddress": "database.example.com",
	"serverPort": "12345",
	"authenticationType": "new Auth Type",
	"userName": "jajohnson",
	"queryTaggingEnabled": "false"
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403023</td><td>Update forbidden</td><td>A non-administrator user tried to update a data source, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403027</td><td>Owner update forbidden</td><td>A non-administrator user tried to change connection information, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403062</td><td>Unsupported operation</td><td>The data source contains multiple connections, but the URI did not include <code>/connections/<span class="api-placeholder">connection-id</span></code> to indicate which connection should be updated.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <connectionLuids>
<connectionLuid>Luid1</connectionLuid>
<connectionLuid>Luid2</connectionLuid>
  </connectionLuids>
  <connection
    serverAddress="newAddress"
    serverPort="newPort"
    authenticationType="new Auth Type"
    userName="Jane Doe"
    password="xxxxxx"
    embedPassword="false"
    queryTaggingEnabled="false" />
  </tsRequest>
```

```
{
  "connectionLuids": [
    "Luid1",
    "Luid2"
  ],
  "connection": {
    "serverAddress": "newAddress",
    "serverPort": "newPort",
    "authenticationType": "new Auth Type",
    "userName": "Jane Doe",
    "password": "xxxxxx",
    "embedPassword": "false",
    "queryTaggingEnabled": "false"
  }
}
```

#### Request Attributes

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">connectionLuids</span>
                                            </td>
                                            <td>An array of connection LUIDs in the data source that you are updating.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection serverAddress</span>
                                            </td>
                                            <td> The new server for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection serverPort</span>
                                            </td>
                                            <td> The new port for the connection</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection authenticationType</span>
                                            </td>
                                            <td>
                                                <p>*The new authentication type for the connection.</p>
                                                <p>Standard values:</p>
                                                <ul>
                                                    <li>
                                                        <p><code>auth-user-pass</code>:&nbsp;username and password</p>
                                                    </li>
                                                    <li>
                                                        <p><code>oauth</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>auth-keypair</code>:&nbsp;keypair authentication</p>
                                                    </li>
                                                </ul>
                                                <p>Connector-specific values:</p>
                                                <ul>
                                                    <li>
                                                        <p><code>sqlserver</code>:&nbsp;SQL&nbsp;Server username and password</p>
                                                    </li>
                                                    <li>
                                                        <p><code>Azure AD Password</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>AD Service Principal</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>username-password</code>:&nbsp;Several connectors use this value. For example, SAP&nbsp;HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.</p>
                                                    </li>
                                                </ul>
                                                <p>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_sources" target="_blank">Query Datasource Connections</a> or <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbook_connections" target="_blank">Query Workbook Connections</a>, which returns the authentication type string in the response. </p>
                                                <p>Alternatively,  you can inspect the <code>&lt;connection&gt;</code> element in the XML of a workbook or data source which is available locally. Look for the value of the <code>authentication</code> attribute of the connection. </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection userName</span>
                                            </td>
                                            <td>The new username for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">connection password</span>
                                            </td>
                                            <td>The new password for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">embedPassword</span>
                                            </td>
                                            <td><code>True</code> to embed the password; otherwise, <code>False</code>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">queryTaggingEnabled</span>
                                            </td>
                                            <td>
                                                <blockquote><p>[!WARNING]</p><p>Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the <code>queryTaggingEnabled</code> attribute is deprecated,
									will no longer be supported, and may be retired in future releases.<br><br>Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by
								setting <a href="https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#native_apiUserInfoInGeneratedSQLEnabled" target="_blank"><code>native_api.UserInfoInGeneratedSQLEnabled</code></a> to <code>true</code>.</p></blockquote>
                                                <p>For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If <code>true</code>, query tagging is enabled. If <code>false</code>, query tagging is disabled. The default is <code>false</code>.</p>
                                                <p>For more information on query tagging, see 	<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_how_to_query_tagging.htm" target="_blank" class="xref">Understand Workbook Impact on Your Database Using Query Tagging</a>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

Any combination of the attributes inside the <connection> 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

```
<tsResponse>
  <connection id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd"
	serverAddress="database.example.com"
	serverPort="12345"
	authenticationType="new Auth Type"
	userName="jajohnson"
	queryTaggingEnabled="false" />
</tsResponse>
```

```
{
  "connection": {
	"id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd",
	"serverAddress": "database.example.com",
	"serverPort": "12345",
	"authenticationType": "new Auth Type",
	"userName": "jajohnson",
	"queryTaggingEnabled": "false"
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403023</td><td>Update forbidden</td><td>A non-administrator user tried to update a data source, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403027</td><td>Owner update forbidden</td><td>A non-administrator user tried to change connection information, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403062</td><td>Unsupported operation</td><td>The data source contains multiple connections, but the URI did not include <code>/connections/<span class="api-placeholder">connection-id</span></code> to indicate which connection should be updated.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

As of version 3.28, you can specify an incremental refresh on extracts by updating the request body as follows:

```
<tsRequest>
 <extractRefresh incremental="true">
 </extractRefresh>
</tsRequest>
```

{
 "extractRefresh": {
   "@incremental": "true"
 }
}

#### Response Code

202

#### Response Body

```
<tsResponse>
  <job id="job-id" mode="Asynchronous" type="RefreshExtract" createdAt="date-time">
    <extractRefreshJob>
      <datasource id="datasource-id" name="datasource-name" incremental="true" />
    </extractRefreshJob>
</tsResponse>
```

```
{
  "job": {
    "id": "job-id",
    "mode": "Asynchronous",
    "type": "RefreshExtract",
    "createdAt": "date-time",
    "extractRefreshJob": {
      "datasource": {
        "id": "datasource-id",
        "name": "datasource-name",
		"incremental"="true"
      }
    }
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403032</td><td>Update Forbidden</td><td>A non-administrator user attempted to update a data source, but the caller doesn't have sufficient permissions.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI is unknown.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI is unknown.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409093</td><td>Operation already in Queue</td><td>The extract refresh job is already in the queue.</td></tr></tbody></table>

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

#### 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:**

```
<tsRequest>
</tsRequest>
```

**Example response:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.8.xsd">
  <job id="20cf4ddc-6d73-4733-89ec-8d336669bd56" mode="Asynchronous" type="RefreshExtract" createdAt="2017-12-06T22:58:52Z">
    <extractRefreshJob>
      <datasource id="89a82d78-664f-45a1-8256-d4d2961a070b" name="World Indicators Extract" />
    </extractRefreshJob>
  </job>
</tsResponse>
```

## Update Data-Driven Alert

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

#### URI

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

#### Parameter Values

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

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

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

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

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

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

#### Request Body

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

#### Attribute Values

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

#### Response Code

200

#### Response Body

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

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

#### Errors

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

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

#### Example

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

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

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

**Example response:**

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

## Update 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

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

#### Request Body

```
<tsRequest>
  <database isCertified="certification-status"
      certificationNote="certification-note"
      description="new-description-value"
      contentPermissions="new-content-permissions">
    <contact id="new-contact-luid" />
  </database>
</tsRequest>
```

#### Attribute Values

Any combination of attributes inside the **<database>** 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.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">certification-status</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Certify or remove certification by using the following:</p>
                                        <ul>
                                            <li><b>True</b>
                                            </li>
                                            <li><b>False</b>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">certification-note</span>
                                    </td>
                                    <td>(Optional) Custom text to accompany the certification status.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">new-description-value</span>
                                    </td>
                                    <td>(Optional) Custom text to describe the database asset.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">new-content-permissions</span>
                                    </td>
                                    <td>
                                        <p>(Optional) The new permissions setting for the database. You can specify one of the following:</p>
                                        <ul>
                                            <li><span class="api-command-ref">LockedToDatabase</span> to lock permissions so that users cannot overwrite the default permissions set for the database asset.</li>
                                            <li><span class="api-command-ref">ManagedByOwner</span> to allow users to manage permissions for the database asset used by the content that they own.</li>
                                        </ul>
                                        <p>The default permissions setting is <span class="api-command-ref">ManagedByOwner</span>. These values are case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">new-contact-luid</span>
                                    </td>
                                    <td>(Optional) The LUID of the Tableau Server or Tableau Cloud user to associate with the database asset.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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:**

```
<tsResponse>
  <database id="31d6ab16-3821-489b-8197-39453ce94a49" name="coffee" connectionType="sqlserver" isEmbedded="false" description="Contact Susan Nguyen (database admin) for changes." isCertified="true" certificationNote="Removed certification via REST" type="DatabaseServer" hostName="mssql.test.tsi.lan" contentPermissions="LockedToDatabase">
	<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
	<contact id="2a80c15e-87c8-4b07-a5f4-e49f95e9fb0b" name="fsuzuki"/>
	<certifier id="26183d16-82f7-4fcf-b163-0e607bf292bc" name="admin"/>
  </database>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site LUID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404031</td><td>Database not found</td><td>The requested database could not be found.</td></tr><tr><td>409</td><td>409045</td><td>Database error</td><td>An unknown database asset error occurred.</td></tr><tr><td>409</td><td>409050</td><td>Database update error</td><td>An unknown error occurred and the database asset could not be updated.</td></tr><tr><td>409</td><td>409051</td><td>Database update forbidden</td><td>A user without "write"&nbsp;permissions to the database asset attempted an update.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <bridgeDomain existingDomainName="example.com" newPoolLuid="ebae40a5-d7e4-4214-b3d5-b0715c627b71" />
</tsRequest>
```

```
{
  "bridgeDomain": {
    "existingDomainName": "example.com",
    "newPoolLuid": "ebae40a5-d7e4-4214-b3d5-b0715c627b71"
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">existingDomainName</span></td><td>Required. The domain to move.</td></tr><tr><td><span class="api-placeholder">newPoolLuid</span></td><td>Required. The UUID of the target Bridge pool.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid domain name, invalid pool ID, domain not found, or pool not found</td><td>Domain and pool ID must be valid; domain and pool must exist on the site.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503906</td><td>Unexpected server error</td><td>An unexpected error occurred while updating the domain.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <bridgeDomain existingDomainName="existing-domain.com" newDomainName="new-domain.com" />
</tsRequest>
```

```
{
  "bridgeDomain": {
    "existingDomainName": "existing-domain.com",
    "newDomainName": "new-domain.com"
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">existingDomainName</span></td><td>Required. The current domain name.</td></tr><tr><td><span class="api-placeholder">newDomainName</span></td><td>Required. The new domain name. Must not already exist in the system.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid existing/new domain name, domain not found, or new name exists</td><td>Domain names must conform to valid format; existing domain must exist; new name must not already be in use.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User does not have Site Administrator role.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503906</td><td>Unexpected server error</td><td>An unexpected error occurred while updating the domain.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
   <externalAuthorizationServer
	issuerUrl="URL"
	jwksUri="URI"
	name="name" />
</tsRequest>
```

#### Attribute Values

A combination of attributes inside the <externalAuthorizationServer> element is valid.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">URL</span>
                                    </td>
                                    <td>(Optional) The entity id of your identity provider (IdP) or URL&nbsp;that uniquely identifies your IdP.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">URI</span>
                                    </td>
                                    <td>
                                        <p>(Optional) The JSON Web Key (JKWS) of the EAS.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">name</span>
                                    </td>
                                    <td>
                                        <p>(Optional) The name of the connected app. If the name attribute is not specified, the connected app name defaults to "External Authorization Server."</p>
                                        <p>This attribute is available starting from API version 3.22 (February 2024).</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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:

- `<name>`: The name of the connected app.
- `<id>`: The ID of the EAS.
- `<issuerUrl>:` The issuer URL of the EAS.

- `<jwksUri>:` The JSON web key set (JWKS) of the EAS.

**Example response:**

```
<tsResponse>
   <externalAuthorizationServer>
	<name>EAS_2</name>
	<id>50bdc8cd-1aa4-48fe-a0e7-68982d85daa8</id>
	<issuerUrl>https://dev-57741098.okta.com/oauth2/aus3gd9kw7ixSfBKC5d7</issuerUrl>
	<jwksUri>https://dev-57741098.okta.com/jwks.json</jwksUri>
	<createdAt>2022-04-07T03:50:34Z</createdAt>
   </externalAuthorizationServer>
</tsResponse>
```

#### Version

Introduced in Tableau Cloud June 2022 (API 3.16). Introduced in Tableau Server 2024.2 (API 3.23).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Issuer URL missing</td><td>The request body contains an empty issuer URL attribute.</td></tr><tr><td>400</td><td>400157</td><td>Unexpected EAS error</td><td>There was an unexpected error when updating the connected app.</td></tr><tr><td>400</td><td>400194</td><td>Issuer URL already configured</td><td>Another connected app on the site is using the same issuer URL.</td></tr><tr><td>403</td><td>403000</td><td>Admin permissions required</td><td>A non-admin user called this method and doesn't have adequate permissions to perform the action.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404047</td><td>EAS not found</td><td>The requested EAS could not be found.</td></tr></tbody></table>

## 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

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

#### Request Body

```
<tsRequest>
  <site>
    <settings unrestrictedEmbedding="true/false"
     allowList="domain-list"/>
  </site>
</tsRequest>
```

**Example request:**

```
<tsRequest>
   <site>
     <settings unrestrictedEmbedding="false"
      allowList="mydomain.com"/>
    </site>
</tsRequest>
```

#### Request Attribute Values

<table class="api-parameters-table">
                                        <colgroup>
                                            <col style="width:27%;">
                                            <col>
                                        </colgroup>
                                        <tbody>
                                            <tr>
                                                <td><span class="api-placeholder">unrestricted-embedding</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specifies whether or not embedding is restricted. </p>
                                                    <p>When the setting is set to true, Tableau views on this site can be embedded in any domain.</p>
                                                    <p>When set to false, embedding is blocked for all domains, but you can allow embedding in certain domains using the <code>allowList</code> attribute.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">allow-list</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specifies the domains where Tableau views on this site can be embedded. Use this setting with <code>unrestrictedEmbedding</code> setting to restrict embedding functionality to only certain domains. </p>
                                                    <p><b>Important:</b> We recommend using the domain allowlist as a security best practice to ensure Tableau content is only embedded in locations that you allow.</p>
                                                    <p>You can use wildcards in domain names and you can also list multiple domain names separated by spaces.
</p>
                                                </td>
                                            </tr>
                                        </tbody>
                                    </table>

#### 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

```
<tsResponse>
  <site id="site-id"
	settings unrestrictedEmbedding="true-or-false"
	allowList="domain-allow-list/>
  </site>
</tsResponse>
```

**Example response:**

```
<tsResponse>
      <settings unrestrictedEmbedding="false"
	allowList="mydomain.com" />
    </site>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                                <colgroup>
                                    <col class="api-error-table-col-1">
                                    <col class="api-error-table-col-2">
                                    <col class="api-error-table-col-3">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <th>HTTP status</th>
                                        <th><code>error</code> Code</th>
                                        <th>Condition</th>
                                        <th>Details</th>
                                    </tr>
                                    <tr>
                                        <td>400</td>
                                        <td>400000</td>
                                        <td>Bad Request</td>
                                        <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                    </tr>
                                    <tr>
                                        <td>403</td>
                                        <td>403500</td>
                                        <td>The user  does not have permission</td>
                                        <td>
                                            <p>Tableau Cloud: Only site administrators can run this method.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### 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:**

```
<tsRequest>
   <site>
     <settings unrestrictedEmbedding="false"
      allowList="mydomain.com"/>
    </site>
</tsRequest>
```

For more information, see [Handling Errors](https://help.tableau.com/current/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

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

#### Request Body

<tsRequest>
   <flow>
       <project id="6f8a2966-e173-11e8-ae74-ffd84c19d7f3"/>
	<owner id="711e59cf-d1c0-446e-be48-3673ae067f7b"/>
    </flow>
</tsRequest>

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">new-project-id</span></td><td>(Optional) The ID of a project to add the flow to.</td></tr><tr><td><span class="api-placeholder">new-owner-id</span></td><td>(Optional) The ID of a user to assign the flow to as owner. The new owner must be the user calling this method.</td></tr></tbody></table>

Any combination of the attributes inside the **<flow>** 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 **<project>** element is included, the **id** attribute must be included, and any other attributes of the **<project>** element are ignored.

If the **<owner>** 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

```
<tsResponse >
    <flow id="flow-id"
      name="flow-name"
      description="flow-description"
      webpageUrl="flow-url"
      fileType="flow-file-type"
      createdAt="Datetime-created"
      updatedAt="Datetime-updated">
        <project id="project-id" name="project-name"/>
        <owner id="owner-id"/>
    </flow>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403098</td><td>Owner update forbidden</td><td>A non-administrator user tried to change the owner for the flow.</td></tr><tr><td>403</td><td>403030</td><td>Project update forbidden</td><td>A non-administrator user tried to change the project for the flow, but the caller doesn't have <span class="api-command-ref">Write</span> permission for the project.&nbsp;</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>Owner not found</td><td>The owner ID in the request body doesn't correspond to an existing owner.&nbsp;</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the request body doesn't correspond to an existing project.&nbsp;</td></tr><tr><td>409</td><td>409041</td><td>Flow name conflict</td><td>The flow name in the request already belongs to the specified site. For the purpose of uniqueness checks, flow names are case-insensitive.</td></tr></tbody></table>

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

#### Example

**Example response:**

```
<tsResponse version-and-namespace-settings>
    <flow id="flow-id" name="flow-name" description="flow-description" webpageUrl="http://my-server01" fileType="tflx" createdAt="2018-11-06T04:57:55Z" updatedAt="2018-11-06T21:31:00Z">
        <project id="6f8a1234-e173-456892f-ffd84c19d7f3" name="testproject"/>
        <owner id="711e45tr-d1c0-554j-be48-3498ae067f7b"/>
    </flow>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the flow.</td></tr><tr><td><span class="api-placeholder">flow-id</span></td><td>The ID of the flow to update.</td></tr><tr><td><span class="api-placeholder">connection-id</span></td><td>The ID of the connection to update. To determine what connections are available for a flow, call <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#query_flow" class="xref">Query Flow</a>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <connection
    serverAddress="server-address" serverPort="port"
    userName="connection-username" password="connection-password"
    embedPassword="embed-password"
	authenticationType="auth-type" />
</tsRequest>
```

#### Attribute Values

Any combination of the attributes inside the **<connection>** element is valid. You will need to provide at least one attribute. If no attributes are included, this will result in an error.

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">serverAddress </span>
                                            </td>
                                            <td>The new server for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">port</span>
                                            </td>
                                            <td>The new port for the connection. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">userName</span>
                                            </td>
                                            <td>The new username for the connection. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">password</span>
                                            </td>
                                            <td>The new password for the connection. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">embedPassword</span>
                                            </td>
                                            <td><span class="api-command-ref">true</span> to embed the password; otherwise, <span class="api-command-ref">false</span>. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">authenticationType</span>
                                            </td>
                                            <td>Added in API 3.28.
                                <p>The new authentication type for the connection.</p><p>Standard values:</p><ul><li><p><code>Username Password</code>:&nbsp;username and password</p></li><li><p><code>oauth</code></p></li><li><p><code>auth-keypair</code>:&nbsp;keypair authentication</p></li></ul><p>Connector-specific values:</p><ul><li><p><code>sqlserver</code>:&nbsp;SQL&nbsp;Server username and password</p></li><li><p><code>Azure AD Password</code></p></li><li><p><code>AD Service Principal</code></p></li><li><p><code>username-password</code>:&nbsp;Several connectors use this value. For example, SAP&nbsp;HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.</p></li></ul><p>If you are unsure of the value for <code>authenticationType</code> 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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_flow_connections" class="xref">Workbooks and Views Methods</a>, which returns the authentication type string in the response. </p><p>Alternatively,  you can inspect the <code>&lt;connection&gt;</code> element in the XML of a flow, which is available locally. Look for the value of the <code>authentication</code> attribute of the connection. </p></td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <connection id="connection-id" authenticationType="auth-type"
    serverAddress="serverAddress" serverPort="port"
    userName="connection-user-name" />
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403103</td><td>Update forbidden</td><td>A non-administrator user tried to update a flow, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403098</td><td>Owner update forbidden</td><td>A non-administrator user tried to change connection information for the flow, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <connections>
	<connection id = "f63809db-abe9-454c-96dc-0f2f1b065a55"
	  serverAddress="myco.com"
	  serverPort="1234" />
	<connection id = "7bc5d700-bbc9-4ec3-9225-121f2846b5e7"
	  userName="snguyen"
	  embedPassword="false" />
  </connections>
</tsRequest>
```

```
{
  "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 **<connection>** element is valid. You will need to provide at least one attribute. If no attributes are included, this will result in an error.

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">id</span>
                                            </td>
                                            <td>The ID of the flow connection to update.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">serverAddress </span>
                                            </td>
                                            <td>The new server for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">port</span>
                                            </td>
                                            <td>The new port for the connection. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">userName</span>
                                            </td>
                                            <td>The new username for the connection. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">password</span>
                                            </td>
                                            <td>The new password for the connection. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">embedPassword</span>
                                            </td>
                                            <td><span class="api-command-ref">true</span> to embed the password; otherwise, <span class="api-command-ref">false</span>. </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">authenticationType</span>
                                            </td>
                                            <td>
                                                <p>The new authentication type for the connection.</p>
                                                <p>Standard values:</p>
                                                <ul>
                                                    <li>
                                                        <p><code>Username Password</code>:&nbsp;username and password</p>
                                                    </li>
                                                    <li>
                                                        <p><code>oauth</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>auth-keypair</code>:&nbsp;keypair authentication</p>
                                                    </li>
                                                </ul>
                                                <p>Connector-specific values:</p>
                                                <ul>
                                                    <li>
                                                        <p><code>sqlserver</code>:&nbsp;SQL&nbsp;Server username and password</p>
                                                    </li>
                                                    <li>
                                                        <p><code>Azure AD Password</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>AD Service Principal</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>username-password</code>:&nbsp;Several connectors use this value. For example, SAP&nbsp;HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.</p>
                                                    </li>
                                                </ul>
                                                <p>If you are unsure of the value for <code>authenticationType</code> 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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_flow_connections" class="xref">Workbooks and Views Methods</a>, which returns the authentication type string in the response. </p>
                                                <p>Alternatively,  you can inspect the <code>&lt;connection&gt;</code> element in the XML of a flow, which is available locally. Look for the value of the <code>authentication</code> attribute of the connection. </p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 '<connections><connection id="f63809db-abe9-454c-96dc-0f2f1b065a55" serverAddress="myco.com" serverPort="1234" /><connection id="7bc5d700-bbc9-4ec3-9225-121f2846b5e7" userName="snguyen" embedPassword="false" /></connections>'
```

#### Response Code

200

#### Response Body

```
<tsResponse>
  <connections>
	<connection id="f63809db-abe9-454c-96dc-0f2f1b065a55"
	  useOAuthManagedKeychain="false"
	  embedPassword="true" serverAddress="myco.com"
	  serverPort="1234" userName="snguyen" />
	<connection id="7bc5d700-bbc9-4ec3-9225-121f2846b5e7"
	  useOAuthManagedKeychain="false"
	  embedPassword="false" serverAddress="myco.com"
	  userName="snguyen" />
  </connections>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403103</td><td>Update forbidden</td><td>A non-administrator user tried to update a flow, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403098</td><td>Owner update forbidden</td><td>A non-administrator user tried to change connection information for the flow, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404027</td><td>Flow not found</td><td>The flow ID in the URI doesn't correspond to an existing flow.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403184</td><td>Ownership changes are disabled</td><td>On Tableau Server, a machine administrator can use TSM to to enable or disable content ownership changes. For more information, see <code>wgserver.change_owner.enabled</code> in <a href="https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#wgserverchangeownerenabled">tsm configuration set Options</a></td></tr><tr><td>403</td><td>403187</td><td>Permission denied</td><td>You must be a site administrator, a server administrator, or the flow owner to change the ownership of a flow.</td></tr><tr><td>404</td><td>404061</td><td>Resource not found</td><td>The flow id and/or user id can't be found.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">api-version</span>
                                            </td>
                                            <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">site-id</span>
                                            </td>
                                            <td>The ID of the site that contains the group.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">group-id</span>
                                            </td>
                                            <td>The ID of the group to update.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">AsJob-value</span>
                                            </td>
                                            <td>A Boolean value that is used if you are importing from Active Directory. Set this value to <span class="api-command-ref">true</span> to synchronize with Active Directory as a background task, or set this value to
                                <span class="api-command-ref">false</span> to synchronize immediately (synchronously). The default is <span class="api-command-ref">false</span>.
                                <p class="note"><strong>Note</strong>: This parameter has no effect if the server is configured to use local authentication.</p><p>This attribute is available for Tableau Server only.</p></td>
                                        </tr>
                                    </tbody>
                                </table>

#### Request Body

**Updating a local group**

```
<tsRequest>
  <group name="new-group-name"
    minimumSiteRole="minimum-site-role"
    externalUserEnabled="on-demand-access" />
</tsRequest>
```

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)

```
<tsRequest>
  <group name="AD-group-name">
    <import source="ActiveDirectory" domainName="AD-domain"
      siteRole="minimum-site-role"
      grantLicenseMode="license-mode" />
  </group>
</tsRequest>
```

When the request body contains an <import> 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 <import> element has no effect.

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">new-group-name</span>
                                            </td>
                                            <td>The new name for the group.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">AD-group-name</span>
                                            </td>
                                            <td>
                                                <p>The name of the Active Directory group to synchronize with.</p>
                                                <p>This attribute is available for Tableau Server only.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">AD-domain</span>
                                            </td>
                                            <td>
                                                <p>The domain for the Active Directory group.</p>
                                                <p>This attribute is available for Tableau Server only.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">minimum-site-role</span>
                                            </td>
                                            <td>
                                                <p>Required if an <span class="api-placeholder">import</span> element or <span class="api-placeholder">grantLicenseMode</span>
									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.
								</p>
                                                <p>
									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.
								</p>
                                                <p>
									Site roles that can be assigned, listed from the one enabling the least capabilities to
								the most, are as follows.</p>
                                                <ol>
                                                    <li value="1"><span class="api-command-ref">Unlicensed</span>
                                                        <br>
                                                    </li>
                                                    <li value="2"><span class="api-command-ref">Viewer</span>
                                                        <br>
                                                    </li>
                                                    <li value="3"><span class="api-command-ref">Explorer</span>
                                                        <br>
                                                    </li>
                                                    <li value="4"><span class="api-command-ref">ExplorerCanPublish</span>
                                                        <br>
                                                    </li>
                                                    <li value="5"><span class="api-command-ref">Creator</span>
                                                        <br>
                                                    </li>
                                                    <li value="6"><span class="api-command-ref">SiteAdministratorExplorer</span>
                                                    </li>
                                                    <li value="7"><span class="api-command-ref">SiteAdministratorCreator</span>
                                                        <br>
                                                    </li>
                                                </ol>
                                                <p class="note"><strong>Note</strong>: You cannot use the REST API to set a user to be a Tableau Server administrator
								(<span class="api-command-ref">ServerAdministrator</span> site role).</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">license-mode</span>
                                            </td>
                                            <td>
                                                <p>
									Optional. The mode for automatically applying licenses for group members. When the mode is
									<span class="api-command-ref">onLogin</span>, a license is granted for each group member when they log in to a site.
								</p>
                                                <p>
									For local groups, the mode can be either <span class="api-command-ref">onLogin</span> 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 <span class="api-command-ref">onLogin</span> can switch the mode to unset by updating the group using:

									</p><pre><code>minimumSiteRole="UNLICENSED"</code></pre><p></p>
                                                <p>
									For groups that import an Active Directory domain (Tableau Server only), the <span class="api-command-ref">grantLicenseMode</span>
									can be updated to either <span class="api-command-ref">onSync</span>
									or <span class="api-command-ref">onLogin</span>. If the attribute is omitted during an update, the group will use the license grant mode
									configured  prior to the update.
								</p>
                                                <p>
									The minimum role granted to users through <span class="api-placeholder">grantLicenseMode</span> is specified in the
									<span class="api-placeholder">siteRole</span> attribute of the <span class="api-placeholder">import</span> element.
									If that role has less permissions than an existing role assigned to the user, then the user's permissions remain unchanged.
								</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><a name="oda"></a><span class="api-placeholder">on-demand-access</span>
                                            </td>
                                            <td>
                                                <p>Optional. A boolean value that is used to enable on-demand access for embedded Tableau content when the Tableau Cloud site is licensed with <a href="https://help.tableau.com/current/online/en-us/license_product_keys.htm#embedded-analytics" target="_blank">Embedded Analytics</a> usage-based model or <a href="https://help.tableau.com/current/online/en-us/license_product_keys.htm#capacity" target="_blank">capacity-based model</a> with Cloud+ or Tableau+ edition. </p>
                                                <p>Set to <span class="api-command-ref">true</span> to enable the capability for the group or set to <span class="api-command-ref">false</span> to disable the capability for the group.  For more information about on-demand access, see <a href="https://help.tableau.com/current/api/embedding_api/en-us/docs/embedding_api_user_attributes.html#on-demand-access-for-users" target="_blank">On-demand access for users</a> in the Tableau Embedding API v3 Help.</p>
                                                <p>This attribute is available for Tableau Cloud only starting from API version 3.21 (October 2023).
</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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:**

```
<tsResponse>
  <group id="new-group-id"
	name="group-name"
	externalUserEnabled="true"
	minimumSiteRole="minimum-site-role">
         <import domainName="local" siteRole="default-site-role" grantLicenseMode="license-mode"/>
</tsResponse>
```

**Updating an Active Directory group (Tableau Server only):**

```
<tsResponse>
  <group id="new-group-id"
	name="group-name">
 	  <import domainName="active-directory-domain-name”
           grantLicenseMode="license-mode"
	    minimumSiteRole="default-site-role" />
  </group>
</tsResponse>
```

**Background update:**

```
<tsResponse>
  <job id="job-id"
    mode="Asynchronous"
    type="GroupSync"
    progress="0"
    createdAt="time-job-created" />
</tsResponse>
```

**Notes:** 

- If the operation is performed asynchronously, the response body contains a <job> 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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400984</td>
                                            <td>Not licensed</td>
                                            <td>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. </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>400013</td>
                                            <td>Invalid site role</td>
                                            <td>
                                                <p>The value of the <span class="api-command-ref">minimumSiteRole</span> or <span class="api-command-ref">siteRole</span> attribute must be
											<span class="api-command-ref">Explorer</span>,
											<span class="api-command-ref">ExplorerCanPublish</span>,
											<span class="api-command-ref">SiteAdministratorCreator</span>,
											<span class="api-command-ref">SiteAdministratorExplorer</span>,
											<span class="api-command-ref">Unlicensed</span>,
										or <span class="api-command-ref">Viewer</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>400019</td>
                                            <td>Malformed import element</td>
                                            <td>If the body includes an <span class="api-command-ref">&lt;import&gt;</span> element, it must contain a <span class="api-command-ref">source</span>, <span class="api-command-ref">domainName</span>,
                                    and <span class="api-command-ref">siteRole</span> attribute.  If any of these attributes are missing, the element is malformed. In addition, the <span class="api-command-ref">source</span> attribute
                                    must have a value of <code>ActiveDirectory</code>; otherwise the element is malformed.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403011</td>
                                            <td>Active Directory not configured</td>
                                            <td>The request body contains an <span class="api-command-ref">&lt;import&gt;</span> element is included, but Tableau Server is configured for local authentication.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403020</td>
                                            <td>Imported group name update forbidden</td>
                                            <td>
								The request body contains an <span class="api-command-ref">&lt;import&gt;</span> element and the value of the
								<span class="api-command-ref">name</span> attribute of the <span class="api-command-ref">&lt;group&gt;</span> element
								in the request body is different from the name of the group imported into Tableau Server as
                                referenced by the <span class="api-command-ref">group-id</span> value in the URI.
                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404012</td>
                                            <td>Group not found</td>
                                            <td>The group ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404016</td>
                                            <td>Domain not found</td>
                                            <td>The request body includes an <span class="api-command-ref">&lt;import&gt;</span> element, but the specified domain name doesn't exist in Active Directory.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404017</td>
                                            <td>Active Directory group not found</td>
                                            <td>The request body includes an <span class="api-command-ref">&lt;import&gt;</span> element, but no group with the name specified in the <span class="api-command-ref">&lt;group&gt;</span>
                                    element exists in Active Directory.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409009</td>
                                            <td>Group name conflict</td>
                                            <td>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.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

## 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

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

#### Request Body

Copy

```
<tsRequest>  <groupSet name="Researchers-one" /></tsRequest>
```

Copy

```
{  "groupSet": {    "@name": "Researchers-one"  }}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">name</span></td><td>The new name for the group set.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

Copy

```
<tsResponse>  <groupSet id="group-set-id"    name="Researchers-one"    groupCount="2"/>      <group id="1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d"        name="Internal"/>      <group id="9a8a7b6b-5c4c-3d2d-1e0e-9a8a7b6b5b4b"        name="External"/>  </groupSet></tsResponse>
```

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

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>400013</td>
                                            <td>Invalid site role</td>
                                            <td>
                                                <p>The value of the <span class="api-command-ref">minimumSiteRole</span> or <span class="api-command-ref">siteRole</span> attribute must be
											<span class="api-command-ref">Explorer</span>,
											<span class="api-command-ref">ExplorerCanPublish</span>,
											<span class="api-command-ref">SiteAdministratorCreator</span>,
											<span class="api-command-ref">SiteAdministratorExplorer</span>,
											<span class="api-command-ref">Unlicensed</span>,
										or <span class="api-command-ref">Viewer</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>The request type wasn’t <span class="api-command-ref">PUT</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409120</td>
                                            <td>Group set not found.</td>
                                            <td>The group set ID in the request body doesn't correspond to an existing group set.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409121</td>
                                            <td>Group set name conflict</td>
                                            <td>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.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

## 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/current/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/current/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

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

#### Request Body

```
<tsRequest>
  <label
    value="label-value-name"
    message="label-message"
    active="active-flag"
    elevated="elevated-flag" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">label-value-name</span>
                                    </td>
                                    <td>
                                        <p>(Optional) The label value name.</p>
                                        <p>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm" class="xref">Data Labels in the REST&nbsp;API</a> for a list of built-in label values and categories.</p>
                                        <p>Choosing a monitoring quality warning value (<span class="api-command-ref">extract_refresh_failure</span> or <span class="api-command-ref">flow_run_failure</span>) causes an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-message</span>
                                    </td>
                                    <td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/Img/formatting_guide.png" target="_blank">formatting guide</a> that's normally visible as a tooltip in the UI.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">active-flag</span>
                                    </td>
                                    <td>(Optional) Boolean. If set to <span class="api-command-ref">true</span>, the label becomes active. If set to <span class="api-command-ref">false</span>, the label becomes inactive.  If omitted, the default is <span class="api-command-ref">true</span>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">elevated-flag</span>
                                    </td>
                                    <td>(Optional) Boolean.  If set to <span class="api-command-ref">true</span>, the label becomes elevated.  If set to <span class="api-command-ref">false</span>, the label becomes not elevated.  If omitted, the default is <span class="api-command-ref">false</span>.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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

```
<tsResponse>
  <label id="label-luid"
      userDisplayName="user-display-name"
      contentId="asset-luid"
      contentType="asset-type"
      message="label-message"
      value="label-value-name"
      category="label-category"
      active="true-or-false"
      elevated="true-or-false"
      createdAt="datetime"
      updatedAt="datetime" >
    <site id="site-luid"/>
    <owner id="user-luid"/>
  </label>
</tsResponse>
```

#### Version

Introduced in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400103</td><td>Generic query label error</td><td>An unknown error occurred.</td></tr><tr><td>400</td><td>400109</td><td>Missing payload</td><td>The request body is missing a label element.</td></tr><tr><td>403</td><td>403004</td><td>Invalid parameter</td><td>Operation on resource unauthorized</td></tr><tr><td>404</td><td>404030</td><td>Label not found</td><td>The label LUID doesn't correspond to an existing project.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One 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 <span class="api-command-ref">extract_refresh_failure</span> and <span class="api-command-ref">flow_run_failure</span>).</td></tr></tbody></table>

## 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/current/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

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

#### Request Body

<tsRequest>
  <labelCategory name="label-category-name"
    description="label-category-description" />
</tsRequest>

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">label-category-name</span>
                                    </td>
                                    <td>
                                        <p>The label category name.</p>
                                        <p>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.)</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-category-description</span>
                                    </td>
                                    <td>
                                        <p>The label category description.</p>
                                        <p>Required, but not does not have to be different from the existing description. Must be 1-500 characters in length.
</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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

<tsResponse>
  <labelCategory name="label-category"
    description="label-category-description"/>
</tsResponse>

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400190</td>
                                    <td>Generic update label categories error</td>
                                    <td>An unknown error occurred.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403004</td>
                                    <td>Operation on resource unauthorized</td>
                                    <td>You must be an administrator to create, update, or delete label values.</td>
                                </tr>
                                <tr>
                                    <td>409</td>
                                    <td>409004</td>
                                    <td>Invalid parameter</td>
                                    <td>
                                        <ul>
                                            <li>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.</li>
                                            <li>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.)</li>
                                            <li>The category name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label categories names.</li>
                                            <li>The category description must be 1-500 characters in length.
</li>
                                        </ul>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

## 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/current/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/current/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

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

#### Request Body

```
<tsRequest>
  <contentList>
    <content contentType="asset-type" id="asset-luid" />
    <!-- ... additional content elements ... -->
  </contentList>
  <label
      value="label-value-name"
      message="label-message"
      active="active-flag"
      elevated="elevated-flag" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">asset-type</span>
                                    </td>
                                    <td>
                                        <p>The type of asset.  Valid asset types are:</p>
                                        <ul>
                                            <li><span class="api-command-ref">database</span>
                                            </li>
                                            <li><span class="api-command-ref">table</span>
                                            </li>
                                            <li><span class="api-command-ref">column</span> <i>- Available in API 3.16 and later (Tableau Cloud October 2022, Server 2022.3)</i></li>
                                            <li><span class="api-command-ref">datasource</span>
                                            </li>
                                            <li><span class="api-command-ref">flow</span>
                                            </li>
                                            <li><span class="api-command-ref">virtualconnection</span>
                                            </li>
                                            <li><span class="api-command-ref">virtualconnectiontable</span>
                                            </li>
                                        </ul>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">asset-luid</span>
                                    </td>
                                    <td>The asset LUID.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-value-name</span>
                                    </td>
                                    <td>
                                        <p>The label value name.</p>
                                        <p>The built-in label value names are:</p>
                                        <ul>
                                            <li><span class="uicontrol">certification</span>
                                            </li>
                                            <li><span class="uicontrol">warning</span>
                                            </li>
                                            <li><span class="uicontrol">deprecated</span>
                                            </li>
                                            <li><span class="uicontrol">stale</span>
                                            </li>
                                            <li><span class="uicontrol">maintenance</span>
                                            </li>
                                            <li><span class="uicontrol">sensitive _data</span>
                                            </li>
                                        </ul>
                                        <p>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.)</p>
                                        <p>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.</p>
                                        <p><strong>Note:</strong> 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 <i>the same category</i> 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. </p>
                                        <p>See <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_data_labels.htm" class="xref">Data Labels in the REST&nbsp;API</a> for a list of built-in label values and categories.</p>
                                        <p>Choosing a monitoring quality warning value (<span class="api-command-ref">extract_refresh_failure</span> or <span class="api-command-ref">flow_run_failure</span>) causes an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-message</span>
                                    </td>
                                    <td>
                                        <p>(Optional. Was required in Tableau Server 2023.3 and earlier.)</p>
                                        <p>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/Img/formatting_guide.png" target="_blank">formatting guide</a> that's normally visible as a tooltip in the UI.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">active-flag</span>
                                    </td>
                                    <td>(Optional) Boolean. If set to <span class="api-command-ref">true</span>, the label becomes active. If set to <span class="api-command-ref">false</span>, the label becomes inactive.  If omitted, the default is <span class="api-command-ref">true</span>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">elevated-flag</span>
                                    </td>
                                    <td>(Optional) Boolean.  If set to <span class="api-command-ref">true</span>, the label becomes elevated.  If set to <span class="api-command-ref">false</span>, the label becomes not elevated.  If omitted, the default is <span class="api-command-ref">false</span>.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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

```
<tsResponse>
  <labelList>
    <label id="label-luid"
        userDisplayName="user-display-name"
        contentId="asset-luid"
        contentType="asset-type"
        message="label-message"
        value="label-value-name"
        category="label-category"
        active="true-or-false"
        elevated="true-or-false"
        createdAt="datetime"
        updatedAt="datetime" >
      <site id="site-luid"/>
      <owner id="user-luid"/>
    </label>
    <!-- ... additional label elements ... –->
  </labelList>
</tsResponse>
```

#### Errors

When more than one asset appears in the request (the contentList element contains more than one content element), this method will fail if an error is encountered operating on any of them. For example, if you are updating labels for a database and a table, but you provide the wrong table LUID, the method will return an error even if the database LUID was correct.

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400108</td><td>Missing payload</td><td>The request body is missing all content and/or all label elements.</td></tr><tr><td>400</td><td>400109</td><td>Generic add labels to content error</td><td>An unknown error occurred.</td></tr><tr><td>403</td><td>403004</td><td>Operation on resource unauthorized</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>404</td><td>404029</td><td>Resource not found</td><td>The <span class="api-command-ref">contentType</span> and <span class="api-command-ref">contentID</span> attribute combination does not correspond to an asset on the server. This can be caused by an incorrect <span class="api-command-ref">contentType</span>, an incorrect <span class="api-command-ref">contentID</span>, or both.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid, or one of the required attributes (<b>active</b> or <b>elevated</b>) is missing. This error can also occur if you try to create or change a monitoring quality warning (<b>label values extract_refresh_failure</b> and <b>flow_run_failure</b>).</td></tr></tbody></table>

## Update labelValue

Updates a label value.

Note: You can update an existing label value using either this method or the [Create or Update labelValue](#ref_create_or_update_labelvalue) method. If you want to change the name of an existing label value, use this 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/current/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/label-value-name

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The unique LUID of the site asset.</td></tr><tr><td><span class="api-placeholder">label-value-name</span></td><td>The label value name. URL encode the label value name if it has spaces or non-alphanumeric characters in it.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <labelValue name="label-value-name"
    category="label-value-category"
    description="label-value-description" />
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">label-value-name</span>
                                    </td>
                                    <td>
                                        <p>The label value name. If the label value name is different than the one in the URI parameter, the label value name is changed to match the one in the request body.</p>
                                        <p>Required. Must be 1-128 characters long. (Must be 1-24 characters long in Tableau Server 2023.3 and earlier.)</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-value-category</span>
                                    </td>
                                    <td>
                                        <p>The label value category.</p>
                                        <p> Required. You can't change the label value category, so this will always match the label value's existing category.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">label-value-description</span>
                                    </td>
                                    <td>
                                        <p>The label value description.</p>
                                        <p>Must be 1-500 characters in length.</p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### 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: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 2023 (API 3.20) and Tableau Server 2023.3 (API 3.21).

#### Response Body

```
<tsResponse>
  <labelValue name="label-value-name"
    category="label-value-category"
    description="label-value-description"
    internal="true-or-false"
    elevatedDefault="true-or-false"
    builtIn="true-or-false">
    <site id="site-luid"/>
  </labelValue>
</tsResponse>
```

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>401 </td>
                                    <td>4000173</td>
                                    <td>Generic create label values error</td>
                                    <td>An unknown error occurred.</td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403004</td>
                                    <td>Operation on resource unauthorized</td>
                                    <td>You must be a site or server administrator to create or update label values.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>403157</td>
                                    <td>Bad request</td>
                                    <td>You may see this error if you try to create or update a label in the <span class="uicontrol">certification</span> category.</td>
                                </tr>
                                <tr>
                                    <td>409</td>
                                    <td>409004</td>
                                    <td>Invalid parameter</td>
                                    <td>
                                        <ul>
                                            <li>The label value name in the URI must exist.</li>
                                            <li>The updated label value name must be 1-128 characters long. (In Tableau Server 2023.3 and earlier, the updated label value name must be 1-24 characters long.)</li>
                                            <li>The updated name, when stripped of spaces, dashes, and underscores, must not case insensitively match one of Tableau's built-in label value names.</li>
                                            <li>The category must match an existing category.</li>
                                            <li>You can't change the category on an existing label value.</li>
                                            <li>The description can't be empty or over 500 characters.
</li>
                                        </ul>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

## 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](#)

## Update 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.

Updates the owner, project, suspended status, or name of the specified metric.

#### URI

PUT /api/api-version/sites/site-id/metrics/metric-luid

#### Parameter Values

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

#### Request Body

                    `<tsRequest>   <metric 	description="updated-metric-description"     name="updated-name" 	suspended="updated-suspended-flag" >       <project id="updated-project-id"/>       <owner id="updated-owner-id"/>   </metric> </tsRequest>`
        

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">updated-metric-description</span></td><td>(Optional) The description to use for the updated metric.</td></tr><tr><td><span class="api-placeholder">updated-metric-name</span></td><td>(Optional) The name to use for the updated metric.</td></tr><tr><td><span class="api-placeholder">updated-suspended-flag</span></td><td>(Optional) Boolean. If <code>true</code> the metric is suspended. The default is <code>false</code>.</td></tr><tr><td><span class="api-placeholder">updated-project-id</span></td><td>(Optional) The ID of a project to add the metric to.</td></tr><tr><td><span class="api-placeholder">updated-owner-id</span></td><td>(Optional) The ID of a user to assign the metric to as owner.</td></tr></tbody></table>

Any combination of the attributes inside the <metric> 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 <project> element is included, the id attribute must be included, and any other attributes of the <project> element are ignored.

If the <owner> element is included, the id attribute must be included, and any other attributes of the owner are ignored.

#### Permissions

Tableau users who are server or site administrators can change the owner for a metric. Users who are not administrators can move a metric from one project to another if they have permissions to the metric. The user must also have permissions to the current (source) project or are a project leader for the current project, and have Write permission for the destination project.

```
tableau:metrics:update
```

#### Access Scope

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

```
tableau:metrics:update
```

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

#### Response Code

200

#### Response Body

                    `<tsResponse>   <metric id="metric-id" 	name="metric-name" 	description="metric-description" 	webpageUrl="webpageUrl-url" 	createdAt="datetime-created" 	updatedAt="datetime-updated" 	suspended="suspended-flag""> 	  <project id="new-project-id" /> 	  <owner id="new-owner-id" /> 	  <tags> 	    <tag label="tag"/> 	    <!--  ... additional tags ... --> 	  </tags> 	</metric> </tsResponse>`
        

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400123</td><td>Unkown error</td><td>The metric could not be updated for an unknown reason.</td></tr><tr><td>403</td><td>403119</td><td>Owner update forbidden</td><td>The user does not have administrator permissions to change the owner for the metric.</td></tr><tr><td>403</td><td>403120</td><td>Project update forbidden</td><td>The user doesn't have <span class="api-command-ref">Write</span> permission for the project they are trying to move the metric to.</td></tr><tr><td>403</td><td>403118</td><td>Name update forbidden</td><td>The user does not have administrator permissions to change the name for the metric.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>Owner not found</td><td>The owner ID in the request body doesn't correspond to an existing owner.</td></tr><tr><td>404</td><td>404004</td><td>Metric not found</td><td>The metrice ID in the URI doesn't correspond to an existing metric.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the request body doesn't correspond to an existing project.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr><tr><td>409</td><td>409015</td><td>Metric name conflict</td><td>The metric name in the request already belongs to the specified site. For the purpose of uniqueness checks, metric names are case-insensitive.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/metrics/6561daa3-20e8-407f-ba09-709b178c0b4a" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-metric.xml`

**Content of update-metric.xml**

                        `<tsRequest>    <metric     name="New Name"     description="New Description"     suspended="true"> 	  <project id="49b4cce3-771f-4ee3-a932-5d42fa8c0e9d"/> 	 <owner id="f1539d08-114c-4de9-a830-c9a0674ec026"/>   </metric> </tsRequest>`
          

**Example response body:**

                    `<tsResponse >   <metric id="1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d"     name="my first metric"     description="Description of my_first_metric."     webpageUrl="https://MY-SERVER/#/site/site-name/metrics/site-num"     createdAt="2013-03-30T22:32:35Z" updatedAt="2016-01-13T01:00:02Z"     suspended="false" >  	    <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e" name="Tableau Samples"/>     	<owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>    	  <tags/>       underlyingView="29dae0cd-1862-4a20-a638-e2c2dfa682d4"   </metric> </tsResponse>`
        

## 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

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

#### 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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>mobileSecuritySettings name</code>
                                            </td>
                                            <td>
                                                <p>(Optional)<i>Enum</i>. The device condition addressed by a security setting element. Supported values are:</p>
                                                <ul>
                                                    <li><code>mobile.security.jailbreak_detection</code>
                                                    </li>
                                                    <li><code>mobile.security.max_offline</code>
                                                        <br><i>Available in API 3.19 (Tableau Cloud March 2023 / Server 2023.1) and later.</i>
                                                    </li>
                                                    <li><code>mobile.security.screenshot</code>
                                                    </li>
                                                </ul>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>mobileSecuritySettings enabled</code>
                                            </td>
                                            <td>
								(Optional) <i>Boolean</i>. If <code>true</code>, enables the Tableau mobile client to detect and respond to
								the condition described in the setting's <code>name</code>. The <code>enabled</code> attribute for the Android
								or iOS configuration element of the setting must also be <code>true</code> for detection on that type of device.
								If <code>mobileSecuritySettings enabled = false</code>, the Android and iOS configuration element attribute
								settings will be ignored.
							</td>
                                        </tr>
                                        <tr>
                                            <td><code>mobileSecuritySettings androidConfig / iosConfig</code>
                                            </td>
                                            <td>
                                                <p>(Optional)<i>Element</i>. 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:</p>
                                                <ul>
                                                    <li><code>valueList</code> -
										<p><b>In the case of <code>mobile.security.max_offline</code></b><i> String - whole number</i>. The number of days a device can be
											offline without requiring a security policy refresh. Minimum value is 1, default value is 14.</p><p><b>In other cases</b> <i>String - <code>true</code> or <code>false</code></i>.
											Determines if the condition of the setting is detected for the specified platform.</p></li>
                                                    <li><code>severity</code> - <i>Enum</i>. Defines the response of the Tableau mobile client when the condition of the
										setting is detected.</li>
                                                    <li><code>enabled</code> - <i>String -<code>true</code> or <code>false</code></i>. On the device type being configured, if <code>true</code>, enables detection
										of the containing setting's security condition, as long as that setting's <code>enabled</code> attribute value is
										also <code>true</code>.
									<p>Severity level can be set for the jailbreak detection setting. The levels and the actions the Tableau client will take are as follows:</p><ul><li><b>Warn</b>:  If a detection occurs, show a dismissible blocking screen.</li><li><b>Error</b>: If a detection occurs, show a blocking screen until the issue is resolved.</li><li><b>Critical</b>: If a detection occurs, shows a blocking screen, log the user out, and close the session.</li></ul><p>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.
		</p><p>Default settings for a Tableau Cloud site are:  </p><ul><li>Jailbreak detection enabled with critical severity.</li><li>Maximum offline time for security policy update set at 14 days with critical severity.</li><li>Screenshot protection is enabled with warn level.</li></ul></li>
                                                </ul>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing, incomplete, or is malformed XML. Invalid values for <code>enabled</code>, <code>iosConfig</code>, <code>androidConfig</code>, <code>severity</code>, or <code>enabled</code> attributes are possible causes.</td></tr><tr><td>400</td><td>400174</td><td>Mobile security settings error</td><td>An uknown mobile security settings error has occurred.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized Access</td><td>The user does not have the required administrtor permissions.</td></tr><tr><td>403</td><td>403157</td><td>Forbidden</td><td>Mobile security settings are not enabled on the server.</td></tr><tr><td>409</td><td>409004</td><td>Invalid setting</td><td>A mobile security setting <code>enabled</code>, <code>name</code> or other value is missing or malformed.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <dataQualityTrigger type="type" active="status" message="message" severe="severity"/>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">type</span>
                                    </td>
                                    <td>
                                        <p>Type of monitoring quality warning. To specify the type, use one of the following values:</p>
                                        <ul>
                                            <li class="api-command-ref">EXTRACT_REFRESH</li>
                                            <li class="api-command-ref">FLOW_RUN</li>
                                        </ul>
                                        <p>These values are not case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">status</span>
                                    </td>
                                    <td>
                                        <p>Monitoring status. Values can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". If set to "<span class="uicontrol">true</span>", the data source is monitored for extract refresh failures or the flow is monitored for flow run failures).</p>
                                        <p>If an extract refresh or flow run failure occurs, the specified data quality warning is attached  to the data source or flow (depending on <span class="api-parameters-table">type</span>). The data quality warning is removed when the extract refresh or flow run is successful.</p>
                                        <p>For more information about monitoring quality warnings, see the monitoring quality warning section of the "Set a Data Quality Warning" topic in the <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm#how-to-turn-on-a-monitoring-quality-warning">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm#how-to-turn-on-a-monitoring-quality-warning">Cloud Help</a>.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">message</span>
                                    </td>
                                    <td>(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 <a href="https://help.tableau.com/current/api/rest_api/en-us/Img/formatting_guide.png" target="_blank">formatting guide</a> that's normally visible as a tooltip in the UI.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">severity</span>
                                    </td>
                                    <td>High visibility status of the data quality warning. Values can be "<span class="uicontrol">true</span>" or "<span class="uicontrol">false</span>". For more information, see the "Visibility" section of the "Set a Data Quality Warning" topic in the <a href="https://help.tableau.com/current/server/en-us/dm_dqw.htm#high_visibility">Server Help</a> or <a href="https://help.tableau.com/current/online/en-us/dm_dqw.htm#high_visibility">Cloud Help</a>.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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**

```
<tsResponse>
  <dataQualityTriggerList>
	<dataQualityTrigger id="{trigger-luid}" siteId="{site-luid}"
		userId="{user-luid}" userDisplayName="Joe Nguyen" contentId="{content-luid}"
		contentType="DATASOURCE" message=" This message is specified by the user."
		type="EXTRACT_REFRESH" active="true" createdAt="Wed Sep 22 05:49:52 UTC 2020"
		updatedAt="Wed Sep 22 05:49:52 UTC 2020" severe="false"/>
  </dataQualityTriggerList>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400137</td><td>Generic quality warning trigger error</td><td>The monitoring quality warning could not be updated for some other reason than those specified below.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized operation.</td><td>Insufficient permissions to perform the operation.</td></tr><tr><td>409</td><td>409004</td><td>Invalid parameter</td><td>One or more values in the request body are invalid.</td></tr></tbody></table>

## 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

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

#### Request Body

Copy

```
<tsRequest>  <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" /></tsRequest>
```

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.

<table class="api-parameters-table" style="margin-left: 0;margin-right: auto;">
                                <colgroup><col class="api-parameters-table-col-1">
                                <col>
                                </colgroup><tbody>
                                    <tr>
                                        <td><code>idpConfigurationId</code>
                                        </td>
                                        <td>
                       (Required)
Starting in API 3.24, multiple authentication configurations can be created and enabled at the same time. Include the <span class="api-command-ref">idpConfigurationId</span> to identify which configuration to update. If no <span class="api-command-ref">IdPConfigurationId</span> is specified, the initial (default) OIDC configuration is updated if it exists.<p>To get the <span class="api-command-ref">idpConfigurationId</span> value, use the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site" class="xref">List Authentication Configurations for Site</a> method.</p><p>For more information, see <a href="https://help.tableau.com/current/online/en-us/security_auth.htm#multiple_idp" target="_blank">Authentication</a> in the Tableau Cloud Help.</p></td>
                                    </tr>
                                    <tr>
                                        <td><code>enabled</code>
                                        </td>
                                        <td>(Required) Controls whether the configuration is enabled or not. Value can be "<span class="api-command-ref">true</span>" or "<span class="api-command-ref">false</span>". For example "true".</td>
                                    </tr>
                                    <tr>
                                        <td><code>clientId</code>
                                        </td>
                                        <td>(Required) The client ID&nbsp;from your IdP. For example, "0oa111usf1gpUkVUt0h1".</td>
                                    </tr>
                                    <tr>
                                        <td><code>clientSecret</code>
                                        </td>
                                        <td>(Required) The client secret from your IdP.</td>
                                    </tr>
                                    <tr>
                                        <td><code>authorizationEndpoint</code>
                                        </td>
                                        <td>(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 (<code>authorization_endpoint</code>) from the details that are returned. For example, "https://myidp.com/oauth2/v1/authorize".</td>
                                    </tr>
                                    <tr>
                                        <td><code>tokenEndpoint</code>
                                        </td>
                                        <td>(Required) Use the token endpoint from your IdP. To find the value, enter the configuration URL in a browser and obtain the token endpoint (<code>token_endpoint</code>) from the details that are returned. For example, "https://myidp.com/oauth2/v1/token". </td>
                                    </tr>
                                    <tr>
                                        <td><code>userinfoEndpoint</code>
                                        </td>
                                        <td>(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 (<code>userinfo_endpoint</code>) from the details that are returned. For example, "https://myidp.com/oauth2/v1/userinfo".</td>
                                    </tr>
                                    <tr>
                                        <td><code>jwksUri</code>
                                        </td>
                                        <td>(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 (<code>jwks_uri</code>) from the details that are returned. For example, "https://myidp.com/oauth2/v1/keys".</td>
                                    </tr>
                                    <tr>
                                        <td><code>idpConfigurationName</code>
                                        </td>
                                        <td>
                                            <p>(Optional) The name of the configuration. </p>
                                            <p>Starting in API&nbsp;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&nbsp;3.23 and no name is provided for the update, the name will stay the same. For more information, see <a href="https://help.tableau.com/current/online/en-us/security_auth.htm#multiple_idp" target="_blank">Authentication</a> in the Tableau Cloud Help.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>endSessionEndpoint</code>
                                        </td>
                                        <td>(Optional) If single logout (SLO) is enabled for the site, which is done through Tableau Cloud site UI, you can specify the configuration URL&nbsp;or the end session endpoint from your IdP. For example, "https://myidp.com/oauth2/v1/logout".</td>
                                    </tr>
                                    <tr>
                                        <td><code>allowEmbeddedAuthentication</code>
                                        </td>
                                        <td>(Optional) Controls how users authenticate when accessing embedded views. Value can be "<span class="api-command-ref">true</span>"&nbsp;or "<span class="api-command-ref">false</span>". 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.</td>
                                    </tr>
                                    <tr>
                                        <td><code>customScope</code>
                                        </td>
                                        <td>(Optional) Specifies a custom scope user-related value that you can use to query the IdP. For example, "openid, email, profile".</td>
                                    </tr>
                                    <tr>
                                        <td><code>prompt</code>
                                        </td>
                                        <td>(Optional) Specifies whether the user is prompted for re-authentication and consent. For example, "login, consent".</td>
                                    </tr>
                                    <tr>
                                        <td><code>clientAuthentication</code>
                                        </td>
                                        <td>(Optional) Token endpoint authentication method. Value can be "<span class="api-command-ref">client_secret_basic</span>" or "<span class="api-command-ref">client_secret_post</span>". Default value is "client_secret_basic". </td>
                                    </tr>
                                    <tr>
                                        <td><code>essentialAcrValues</code>
                                        </td>
                                        <td>(Optional) List of essential Authentication Context Reference Class values used for authentication. For example, "phr".</td>
                                    </tr>
                                    <tr>
                                        <td><code>voluntaryAcrValues</code>
                                        </td>
                                        <td>(Optional) List of voluntary Authentication Context Reference Class values used for authentication.</td>
                                    </tr>
                                    <tr>
                                        <td><code>emailMapping</code>
                                        </td>
                                        <td>(Optional) Claim for retrieving email from the OIDC token. Default value is "email".</td>
                                    </tr>
                                    <tr>
                                        <td><code>firstNameMapping</code>
                                        </td>
                                        <td>(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 <code>useFullName</code> attribute is set to "false".</td>
                                    </tr>
                                    <tr>
                                        <td><code>lastNameMapping</code>
                                        </td>
                                        <td>(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 <code>useFullName</code> attribute is set to "false".</td>
                                    </tr>
                                    <tr>
                                        <td><code>fullNameMapping</code>
                                        </td>
                                        <td>(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 <code>useFullName</code> attribute is set to "true".</td>
                                    </tr>
                                    <tr>
                                        <td><code>useFullName</code>
                                        </td>
                                        <td>(Optional) Controls what is used as the display name. Value can be "<span class="api-command-ref">true</span>" or "<span class="api-command-ref">false</span>". Default value is "false", which uses first name <code>(firstNameMapping</code> attribute) and last name (<code>lastNameMapping</code> attribute)&nbsp;as the user display name. When set to "true", full name (<code>fullNameMapping</code> attribute) is used as the user display name.</td>
                                    </tr>
                                </tbody>
                            </table>

#### 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

```
<tsRequest>  <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" /></tsRequest
```

#### Response Code

200

#### Response Body

Copy

```
<tsResponse>  <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="&lt;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" /></tsResponse>
```

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":"&lt;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 `&lt;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/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#add_user_to_site) and [Update User](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_users_and_groups.htm#update_user) methods.

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the project.</td></tr><tr><td><span class="api-placeholder">project-id</span></td><td>The ID of the project to update.</td></tr><tr><td><span class="api-placeholder">publish-value</span></td><td>(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 <span class="api-placeholder">publish-value</span> is not specified in the request, or the <code>publishSamples</code> parameter is missing, no samples will be published. To publish the sample workbooks, set <code>publishSamples</code> parameter to <code>true</code>. This option is equivalent to the <span class="api-command-ref">tabcmd</span> command-line utility option, <code>publishsamples</code>. For more information, see <a href="https://help.tableau.com/current/server/en-us/tabcmd_cmd.htm" target="_blank">tabcmd</a>.</td></tr></tbody></table>

#### Request Body

Copy

```
<tsRequest>  <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"/>  </project></tsRequest>
```

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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col style="width:32%;">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>project id</code>
                                            </td>
                                            <td>
                                                <p>(Required) The LUID of the project being updated.</p>
                                                <p> For information about how permissions are evaluated in project hierarchies, see Project Permissions States and Defaults <a href="https://help.tableau.com/current/server/en-us/permissions_projects.htm#LockProject" target="_blank">Windows</a> |  <a href="https://help.tableau.com/current/server-linux/en-us/permissions_projects.htm#LockProject" target="_blank">Linux</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>project name</code>
                                            </td>
                                            <td>(Optional) The new name for the project.</td>
                                        </tr>
                                        <tr>
                                            <td><code>project description</code>
                                            </td>
                                            <td>(Optional) The new description for the project.</td>
                                        </tr>
                                        <tr>
                                            <td><code>project parentProjectId</code>
                                            </td>
                                            <td>
                                                <p>(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.</p>
                                                <p>To update a project without changing its placement in the project hierarchy, omit the <b>parentProjectId</b> attribute.
									To move a project to the top of the project hierarchy, provide an empty string ("") for
									the <b>parentProjectId</b> attribute.</p>
                                                <p>For information about how permissions are evaluated in project hierarchies, see
								    <a href="https://help.tableau.com/current/server/en-us/permissions_projects.htm">Project Permissions States and Defaults</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>project contentPermissions</code>
                                            </td>
                                            <td>
                                                <p>(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
								<span class="api-command-ref">contentPermission</span> in the response body from a request to create, update, or query a project.</p>
                                                <ul>
                                                    <li><span class="api-command-ref">LockedToProject</span> to lock permissions so that users cannot overwrite
									the default permissions set for the project</li>
                                                    <li><span class="api-command-ref">ManagedByOwner</span> to allow users to manage permissions for content
									that they own</li>
                                                    <li><span class="api-command-ref">LockedToProjectWithoutNested</span> to lock the permissions of a parent
									project, but not those of its child projects.</li>
                                                </ul>
                                                <p>The default is <span class="api-command-ref">ManagedByOwner</span>. For more information, see
									<a href="https://help.tableau.com/current/server/en-us/permissions.htm#lock-content-permissions" target="_blank">Lock Content Permissions</a>.
								</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>project parentProjectId</code>
                                            </td>
                                            <td>
                                                <p>(Optional) The new identifier of the parent project. Use this option to create or change project hierarchies.</p>
                                                <p>To update a project without changing its placement in the project hierarchy, omit the <b>parentProjectId</b> attribute.
									To move a project to the top of the project hierarchy, provide an empty string ("") for
								the <b>parentProjectId</b> attribute.</p>
                                                <p>For information about how permissions are evaluated in project hierarchies, see
								<a href="https://help.tableau.com/current/server/en-us/permissions_projects.htm">Project Permissions States and Defaults</a>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>owner id</code>
                                            </td>
                                            <td>The LUID of the user that owns the project.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<tsRequest> <project parentProjectId='ab2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5ee0' name='new-name' description='new-description' contentPermissions='ManagedByOwner' /> </tsRequest>"`

#### Response Code

200

#### Response Body

Copy

```
<tsResponse>  <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"/>  </project></tsResponse>
```

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400008</td><td>Bad request</td><td>The request cannot set content permissions to <span class="api-command-ref">LockedToProjectWithoutNested</span> for a REST API version lower than 3.8.</td></tr><tr><td>403</td><td>403005</td><td>Update forbidden</td><td>Attempt to rename the default project, which cannot be renamed.</td></tr><tr><td>403</td><td>403008</td><td>Insufficient storage on site</td><td>The samples could not be published because there is not enough storage space remaining on the server to accommodate the samples.</td></tr><tr><td>403</td><td>403004</td><td>Update forbidden</td><td>A non-administrative user tried to update the project, but does not have permissions to update the project.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404009</td><td>Project ID mismatch</td><td>The request body contains a project ID (which is optional) and it doesn't match the ID in the URI.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the URI doesn't correspond to an existing project.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr><tr><td>409</td><td>409006</td><td>Project name conflict</td><td>The project name in the request already belongs to the specified site. For the purpose of uniqueness checks, project names are case-insensitive.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">routing-rule-id</span></td><td>The unique identifier (UUID) of the routing rule to update.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <routingRule domain="new.example.com" poolId="b2c3d4e5-6f70-8192-a3b4-c5d6e7f80910" />
</tsRequest>
```

```
{
  "routingRule": {
    "domain": "new.example.com",
    "poolId": "b2c3d4e5-6f70-8192-a3b4-c5d6e7f80910"
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">domain</span></td><td>Optional. A new domain for the rule.</td></tr><tr><td><span class="api-placeholder">isBlocked</span></td><td>Optional. Changes the rule between a block rule (<code>true</code>) and an allow rule (<code>false</code>).</td></tr><tr><td><span class="api-placeholder">poolId</span></td><td>Required 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.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

Returns the updated `routingRule`, identical in shape to the Create Routing Rule response.

```
<tsResponse>
  <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" />
  </routingRule>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>503909</td><td>Validation failed</td><td>Empty update (no attributes supplied), invalid <span class="api-placeholder">routing-rule-id</span> or <code>poolId</code> UUID, blank or invalid domain, or <code>poolId</code> missing when transitioning to an allow rule.</td></tr><tr><td>400</td><td>503910</td><td>Invariant violation</td><td><code>poolId</code> supplied while the rule is, or becomes, a block rule.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>403</td><td>503923</td><td>Permission denied</td><td>Caller is not a site administrator for the site.</td></tr><tr><td>404</td><td>503915</td><td>Routing rule not found</td><td>No routing rule exists with the given ID on this site.</td></tr><tr><td>409</td><td>503911</td><td>Duplicate routing rule</td><td>The update would collide with an existing rule for the same domain and project scope.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td>503917</td><td>Unexpected server error</td><td>An unexpected error occurred while updating the rule.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <scimConfiguration>
    <name>SCIM Contractors Canada</name>
    <idpConfigurationId>d3b782da-0787-44ca-8585-6fd48dbfc658d3b782da-0787-44ca-8585-6fd48dbfc658</idpConfigurationId>
  </scimConfiguration>
</tsRequest>
```

```
{
"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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">name</span>
                                        </td>
                                        <td>(Required) Name of the SCIM&nbsp;configuration.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">idpConfigurationId</span>
                                        </td>
                                        <td>
                                            <p>(Required) Authentication configuration to associate with the SCIM&nbsp;configuration.
</p>
                                            <p> Starting in API 3.26, you can have  multiple SCIM&nbsp;configurations. Include the <span class="api-command-ref">idpConfigurationId</span> to identify which configuration to update. If a SCIM token is associated with SCIM&nbsp;configuration, updating the <span class="api-command-ref">IdPConfigurationId</span> deletes the SCIM&nbsp;token. Ensure the SCIM token's secret is removed from the identity provider's (IdP's) SCIM configuration. To get the <span class="api-command-ref">idpConfigurationId</span>, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site" class="xref">List Authentication Configurations for Site</a>.</p>
                                            <p>Starting in API&nbsp;3.28, you can associate OIDC or Google authentication with SCIM.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### Response Code

204

#### Response Body

```
<tsResponse>
  <scimConfiguration>
    <id>065693d8-436a-4738-a8f1-375953a2a888</id>
    <idpConfigurationId>d3b782da-0787-44ca-8585-6fd48dbfc658</idpConfigurationId>
    <isApiTokenActive>false</isApiTokenActive>
    <isOwner>true</isOwner>
    <name>SCIM Contractors Canada</name>
    <createdAt>2025-04-01 06:31:47.882</createdAt>
  </scimConfiguration>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Bad Request</td><td>The content of the request body contains unsupported attributes, the SCIM&nbsp;configuration name already exists, or the <code>idpConfigurationId</code> is missing or not valid.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header is invalid or has expired.</td></tr><tr><td>403</td><td>403182</td><td>Forbidden</td><td>The SCIM&nbsp;configuration can only be updated by the user who created the SCIM&nbsp;configuration.</td></tr><tr><td>404</td><td>404050</td><td>Resource Not Found</td><td>The SCIM&nbsp;configuration does not have an associated SCIM&nbsp;token.</td></tr><tr><td>404</td><td>404057</td><td>Resource Not Found</td><td>The SCIM&nbsp;configuration UUID is not valid or does not exist on this site.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">domain-id</span></td><td>The integer ID of the of the Active Directory domain being updated. Find a domain's ID using <a href="#list_server_active_directory_domains">List Server Active Directory Domains</a>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <domain name="new-domain-name"
  shortName="new-domain-nickname" />
</tsRequest>
```

#### Attribute Values

Any combination of attributes is valid. If no attributes or nested elements are included, no update is made.

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide" style="width: 264px;"> <col></colgroup><tbody><tr><td><span class="api-placeholder">new-domain-name</span></td><td>A new full domain name you are using to replace the existing one.</td></tr><tr><td><span class="api-placeholder">new-domain-nickname</span></td><td>A new domain nickname you are using to replace the existing one.</td></tr></tbody></table>

#### 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:**

```
<tsRequest>
  <domain id="domain-id-int"
    name="domain-name"
    shortName="domain-nickname" />
</tsRequest>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404032</td><td>Resource not found</td><td>The requested domain ID in the URI doesn't correspond to an existing domain.</td></tr></tbody></table>

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

#### Example

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:**

```
<tsRequest>
  <domain name="myNewDomainName.com"
  shortName="myNewDomainNickName" />
</tsRequest>
```

**Example response body:**

```
<tsRequest>
  <domain id="1045" name="myNewDomainName.com" shortName="myDomainNickName" />
</tsRequest>
```

## 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/current/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/current/api/rest_api/en-us/REST/rest_api_ref_subscriptions.htm#update_subscription_cloud) ._

#### URI

PUT /api/api-version/schedules/schedule-id

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">schedule-id</span></td><td>The ID of the schedule to update. To determine what schedules are available, call <a href="#query_schedules">List Server Schedules</a>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <schedule
    name="new-schedule-name"
    priority="new-schedule-priority"
    frequency="new-schedule-frequency"
    state="new-state"
    executionOrder="new-schedule-execution-order">
    <frequencyDetails start="start-time" end="end-time">
     <intervals>
        <interval interval-expression />
      </intervals>
    </frequencyDetails>
  </schedule>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">new-schedule-name</span>
                                            </td>
                                            <td>The new name to give to the schedule.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">new-schedule-priority</span>
                                            </td>
                                            <td>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.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">new-schedule-execution-order</span>
                                            </td>
                                            <td><code>Parallel</code> to allow jobs associated with this schedule to run at the same time, or
                                        <code>Serial</code> to require the jobs to run one after the other.
                                    </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">new-schedule-frequency</span>
                                            </td>
                                            <td>The granularity of the schedule. Valid values are:
                                    <ul><li><code>Hourly</code>. <code>Hourly</code>. 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. </li><li><code>Daily</code>. Jobs can be scheduled to run once per day.</li><li><code>Weekly</code>. Jobs can be scheduled to run one or more times per week.</li><li><code>Monthly</code>. Jobs can be scheduled to run once per month on a specific day.</li></ul><p>The value you provide for <span class="api-placeholder">schedule-frequency</span> determines whether you must include an <span class="api-placeholder">end-time</span> value, and what
                                    is required in the contents of the <span class="api-command-ref">&lt;intervals&gt;</span> element.<br></p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">new-state</span>
                                            </td>
                                            <td><code>Active</code> to enable the schedule, or
                                        <code>Suspended</code> to disable it.
                                    </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">start-time</span>
                                            </td>
                                            <td>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 <code>HH:MM:SS</code> (for example, <code>18:30:00</code>).
                                        This value is required for all schedule frequencies.
The entered time will be applied based on the time zone of your server.  </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">end-time</span>
                                            </td>
                                            <td>If the schedule frequency is <code>Hourly</code>, the time of day on which scheduled jobs should stop being run, in the format <code>HH:MM:SS</code> (for example, <code>23:30:00</code>). 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.  </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">interval-expression</span>
                                            </td>
                                            <td>A value that specifies the interval between jobs associated with the schedule. The value you specify here depends on the
                                         value of <span class="api-placeholder">schedule-frequency</span>.
                                        <p><strong><code>Hourly</code></strong></p><p>The interval expression is only one of the following:</p><ul><li><code>hours="<span class="api-placeholder">interval</span>"</code> where <span class="api-placeholder">interval</span> is
                                                <code>1</code>,
                                                <code>2</code>,
                                                <code>4</code>,
                                                <code>6</code>,
                                                <code>8</code>, or
                                                <code>12</code>,
                                                representing how many hours between jobs.
                                            </li><li><code>minutes="<span class="api-placeholder">interval</span>"</code> where
                                                <span class="api-placeholder">interval</span> is <code>15</code> or <code>30</code>,
                                                representing how many minutes between jobs.
                                            </li></ul><p>You can specify an interval in hours or minutes, but not both.</p><p><strong><code>Daily</code></strong></p><p>If the schedule frequency is <code>Daily</code>, no interval is specified. Any information specified
                                        in the <span class="api-command-ref">&lt;intervals&gt;</span> element is ignored.

                                        </p><p><strong><code>Weekly</code></strong></p><p>The interval expression is <code>weekDay="<span class="api-placeholder">weekday</span>"</code>, where

                                            <span class="api-placeholder">weekday</span> is

                                            <code>Sunday</code>,
                                            <code>Monday</code>,
                                            <code>Tuesday</code>,
                                            <code>Wednesday</code>,
                                            <code>Thursday</code>,
                                            <code>Friday</code>, or
                                            <code>Saturday</code>.
                                        </p><p>You can specify multiple <span class="api-command-ref">&lt;interval&gt;</span> elements to indicate
                                        that scheduled jobs should run on multiple days during the week.</p><p class="note"><b>Note:</b> 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.</p><p><strong><code>Monthly</code></strong></p><p>The interval expression is <code>monthDay="<span class="api-placeholder">day</span>"</code>, where
                                        <span class="api-placeholder">day</span> is
                                        either the day of the month (<code>1</code>, <code>2</code>, etc.) or <code>LastDay</code>.
</p><p class="note"><b>Note:</b> 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.                                         </p></td>
                                        </tr>
                                    </tbody>
                                </table>

Any combination of the attributes inside the <schedule> 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

```
<tsResponse>
  <schedule id="schedule-id"
        name="schedule-name"
        state="new-state"
        priority="schedule-priority"
        createdAt="datetime-created"
        updatedAt="datetime-updated"
        type="Extract-or-Subscription"
        frequency="schedule-frequency"
        nextRunAt="datetime-next-run"
        endScheduleAt ="datetime-expiration"
        executionOrder="Parallel-or-Serial">
        <frequencyDetails frequency-expression >
            <intervals>
               <interval interval-expression />
             </intervals>
        </frequencyDetails>
  </schedule>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400008</td><td>Invalid Parameter</td><td>One of the parameters in the request body is invalid.</td></tr><tr><td>400</td><td>400071</td><td>Error updating schedule</td><td>The schedule couldn't be updated for an unspecified reason.</td></tr><tr><td>404</td><td>404023</td><td>Schedule not found</td><td>The specified schedule doesn't correspond to an existing schedule.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr><tr><td>409</td><td>409021</td><td>Schedule name conflict</td><td>The schedule name in the request already belongs to an existing schedule.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/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`.

```
<tsRequest>
  <schedule name="hourly-schedule-1"
        priority="50"
        type="Extract"
        frequency="Hourly"
        executionOrder="Parallel">
      <frequencyDetails start="18:30:00" end="23:00:00">
        <intervals>
          <interval hours="2" />
        </intervals>
      </frequencyDetails>
   </schedule>
</tsRequest>
```

**Response body**

```
<tsResponse <span class="api-placeholder">version-and-namespace-settings</span>>
  <schedule id="4d652179-36bf-47e4-a9dc-e069227c72d0"
       name="hourly-schedule-1"
       state="Active"
       priority="50"
       createdAt="2016-05-07T01:51:19Z"
       updatedAt="2016-05-07T01:51:19Z"
       type="Extract"
       frequency="Hourly"
       nextRunAt="2016-05-07T03:30:00Z"
       endScheduleTime="2016-06-07T12:00:00Z"
       executionOrder="Parallel">
    <frequencyDetails start="18:30:00" end="23:00:00">
      <intervals>
          <interval hours="2" />
      </intervals>
   </frequencyDetails>
  </schedule>
</tsResponse>
```

**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

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

#### Request Body

**Updating individual settings**

```
<tsRequest>
  <site name="new-site-name"
    contentUrl="new-content-url"
    adminMode="new-admin-mode"
    storageQuota="limit-in-megabytes"
    disableSubscriptions="new-disable-subscriptions"
    state="new-state"
    revisionHistoryEnabled="revision-history-enabled"
    revisionLimit="revision-limit"
    allowSubscriptionAttachments="allow-subcription-attachments-flag"
    subscribeOthersEnabled="subscribe-others-enabled-flag"
    guestAccessEnabled="guest-access-enabled-flag"
    cacheWarmupEnabled="cache-warmup-enabled-flag [REMOVED IN API 3.19]"
    commentingEnabled="commenting-enabled-flag"
    editingFlowsEnabled="editing-flows-enabled-flag"
    schedulingFlowsEnabled="scheduling-flows-enabled-flag"
    extractEncryptionMode="extractEncryptionMode"
    dataAccelerationMode="dataAccelerationMode"
    requestAccessEnabled="request-access-enabled-flag"
    runNowEnabled="run-now-enabled-flag"
    userQuota="all-license-limit-total"
    tierCreatorCapacity="creator-license-limit"
    tierExplorerCapacity="explorer-license-limit"
    tierViewerCapacity="viewer-license-limit"
    dataAlertsEnabled="data-alerts-enabled-flag"
    commentingMentionsEnabled="commenting-mentions-enabled-flag"
    catalogObfuscationEnabled="catalog-obfuscation-enabled-flag"
    flowAutoSaveEnabled="flow-auto-save-enabled-flag"
    runNowEnabled="run-now-enabled-flag"
    metricsContentTypeEnabled="metrics-content-type-enabled-flag"
    notifySiteAdminsOnThrottle="notify-site-admins-on-throttle-flag"
    authoringEnabled="authoring-enabled-flag"
    customSubscriptionEmailEnabled="custom-subscription-email-enabled-flag"
    customSubscriptionEmail="custom-subscription-email"
    customSubscriptionFooterEnabled="custom-subscription-footer-enabled-flag"
    customSubscriptionFooter="custom-subscription-footer"
    askDataMode="ask-data-mode"
    namedSharingEnabled="named-sharing-enabled-flag"
    catalogingEnabled="cataloging-enabled-flag"
    derivedPermissionsEnabled="derived-permissions-enabled-flag"
    userVisibilityMode="user-visibility-mode"
    useDefaultTimeZone="default-time-zone-flag"
    timeZone="time-zone"
    autoSuspendRefreshEnabled="auto-suspend-refresh-enabled-flag"
    autoSuspendRefreshInactivityWindow="auto-suspend-refresh-inactivity-window"
    explainDataEnabled="explaindataenabled"
    dqwSubscriptionsEnabled="dqwsubscriptionsenabled"
    attributeCaptureEnabled="attribute-capture-enabled"
    groupAssertionsEnabled="group-assertions-enabled-flag"
    groupAssertionsSAMLEnabled="group-assertions-saml-enabled-flag"
    groupAssertionsOIDCEnabled="group-assertions-oidc-enabled-flag"
    groupAssertionsConnectedAppsEnabled="group-assertions-connected-apps-enabled-flag"
    groupSetsEnabled="group-sets-enabled-flag"
    recycleBinEnabled="recycle-bin-enabled-flag" />
</tsRequest>
```

**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  <binary data here> --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

<table class="api-parameters-table">
                                        <colgroup>
                                            <col style="width:27%;">
                                            <col>
                                        </colgroup>
                                        <tbody>
                                            <tr>
                                                <td><span class="api-placeholder">new-site-name</span>
                                                </td>
                                                <td>(Optional) The new name of the site.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">new-content-url</span>
                                                </td>
                                                <td>(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 <code>test.site</code>, it's converted to <code>testsite</code> and returned in the response. The response's site URL namespace is the authoritative source of truth for the new site URL.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">new-admin-mode</span>
                                                </td>
                                                <td>(Optional) Specify <span class="api-command-ref">ContentAndUsers</span> to allow site administrators to use the server interface and <code>tabcmd</code> commands to add and remove users. (Specifying this option doesn't give site administrators permissions to manage users using the REST API.)  Specify <span class="api-command-ref">ContentOnly</span> to prevent site administrators from adding or removing users. (Server administrators can always add or remove users.)
									<p class="note"><strong>Note:</strong> You cannot set <span class="api-command-ref">adminMode</span> to <span class="api-command-ref">ContentOnly</span> and also set a  <span class="api-command-ref">userQuota</span> value.
									The default value is <span class="api-command-ref">ContentAndUsers</span>.</p></td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">new-state</span>
                                                </td>
                                                <td>(Optional) <span class="api-command-ref">Active</span> to set the site to active mode, or <span class="api-command-ref">Suspended</span> to suspend the site. Default is <span class="api-command-ref">Active</span>.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">new-storage-quota</span>
                                                </td>
                                                <td>(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.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">new-disable-subscriptions</span>
                                                </td>
                                                <td>(Optional) <span class="api-command-ref">true</span> to prevent users from being able to subscribe to workbooks on the specified site.  Default is <span class="api-command-ref">false</span>.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">revision-history-enabled</span>
                                                </td>
                                                <td>(Optional) <span class="api-command-ref">true</span> if the site maintains revisions for changes to workbooks and data sources; otherwise, <span class="api-command-ref">false</span>. The default is <span class="api-command-ref">false</span>.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">revision-limit</span>
                                                </td>
                                                <td>(Optional) An integer between 2 and 10000 to indicate a limited number of revisions for content. <p>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.</p></td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">allow-subscription-attachments-flag</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) If <span class="api-command-ref">true</span>, 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 <span class="api-command-ref">true</span>. If subscription to attachments is disabled in the server settings, then making this value <span class="api-command-ref">true</span> will have no effect.
				Default is <span class="api-command-ref">true</span>.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">subscribe-others-enabled-flag</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specify <span class="api-command-ref">true</span> to enable and <b>false</b> to disable the ability for view owners to subscribe other users to a view.
									Default is <span class="api-command-ref">true</span>.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">editing-flows-enabled-flag</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specify <span class="api-command-ref">true</span> to enable and <b>false</b> to disable editing flows for a site. For more information on flows, see <a href="https://help.tableau.com/current/prep/en-us/prep_conductor_config_server_overview.htm" target="_blank">Enable and Configure Tableau Prep Conductor</a>.</p>
                                                    <p>The default is set to <b>true</b>, which means editing flows is enabled by default. For more information, see <a href="https://help.tableau.com/v0.0/prep/en-us/prep_conductor_configure_server.htm#implication-of-disabling-tableau-prep-conductor">Implication of disabling Tableau Prep Conductor</a>.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">scheduling-flows-enabled-flag</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specify <span class="api-command-ref">true</span> to enable and <b>false</b> to disable scheduling flows for a site. For more information on flows, see <a href="https://help.tableau.com/current/prep/en-us/prep_conductor_config_server_overview.htm" target="_blank">Enable and Configure Tableau Prep Conductor</a>.</p>
                                                    <p>The default is set to <b>true</b>, which means scheduling flows is enabled by default. For more information, see
									<a href="https://help.tableau.com/v0.0/prep/en-us/prep_conductor_configure_server.htm#implication-of-disabling-tableau-prep-conductor">Implication of disabling Tableau Prep Conductor</a>.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">flows-enabled-flag</span>
                                                </td>
                                                <td>
                                                    <p>The <span class="api-command-ref">flowsEnabled</span> attribute is deprecated as of API 3.10.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">guest-access-enabled-flag</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specify <span class="api-command-ref">true</span>  to enable and <b>false</b> to disable the ability for guests, users without specific site access permission, to access the site.
									Default is <span class="api-command-ref">false</span>.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">cache-warmup-enabled-flag</span>
                                                </td>
                                                <td>
                                                    <p class="note">This attribute was removed in API 3.19 and later. For current
										methods to improve Tableau performance see, <a href="https://help.tableau.com/current/server/en-us/data_acceleration.htm" target="_blank" rel="noreferrer">View Acceleration</a>.
											</p>
                                                    <p>
										(Optional) Set this value to <span class="api-command-ref">true</span>  to enable cache warm up to
										improve workbook load times.  Set the value to <b>false</b> to disable cache warmup.
									Default is <span class="api-command-ref">true</span>.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">commenting-enabled-flag</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specify <span class="api-command-ref">true</span> to enable and <b>false</b> to disable the ability for user comments on views in the site.
									Default is <span class="api-command-ref">true</span>.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">extractEncryptionMode</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specify <b>enforced</b>, <b>enabled</b>, or <b>disabled</b>.
				Default is <span class="api-command-ref">disabled</span>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm" class="xref">Extract and Encryption Methods</a>.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">dataAccelerationMode</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specify <b>enable_selective</b> or <b>disabled</b>. The default is <b>enable_selective, which</b> lets you update particular workbooks to turn on data acceleration using the <b>accelerationEnabled</b> attribute. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_data_acceleration.htm" class="xref">Data Acceleration (Retired)</a>. <i>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.</i></p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">requestAccessEnabled</span>
                                                </td>
                                                <td>(Optional) Specify <span class="api-command-ref">true</span> to allow users send access request emails to content or project owners. Specify <span class="api-command-ref">false</span> if you don't want users to be able to request access. The default is <span class="api-command-ref">false</span>.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">runNowEnabled</span>
                                                </td>
                                                <td>
                                                    <p>(Optional) Specify <span class="api-command-ref">true</span> to allow users to run flows, extract refreshes, and schedules manually. Specify <span class="api-command-ref">false</span> if you don't want users to be able to run flows, extract refreshes, and subscriptions manually. The default is <span class="api-command-ref">true</span>. If this attribute is set to <span class="api-command-ref">false</span>, the following methods will fail and will return an error message.</p>
                                                    <p><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#run_flow_now">Run Flow Now</a>
                                                    </p>
                                                    <p><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#run_flow_task" target="_blank">Run Flow Task</a>
                                                    </p>
                                                    <p><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_datasources.htm#update_data_source_now" target="_blank">Update Data Source Now</a>
                                                    </p>
                                                    <p><a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_jobs_tasks_and_schedules.htm#run_extract_refresh_task" target="_blank">Run Extract Refresh Task</a>
                                                    </p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td colspan="2">
                                                    <p class="note"><b>Licensing attributes</b>
                                                        <br>
                                                        <br>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.
										<br><br>The REST API enables administrators to set licensing
										limits below the purchased maximum with two types of license-related attributes:
										<br> - User Quota - The total maximum number of licenses currently configured for a site.
										<br> - Tiered Capacities - If set, the configured maximum license count for each license type (role).

										<br><br>. 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.
										<br><br> For more information, see
										<a href="https://help.tableau.com/current/server/en-us/license_server_overview.htm" rel="noopener" target="_blank">Licensing Overview</a>.
									</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p>User quota</p>
                                                    <p><span class="api-placeholder">all-license-limit-total</span>
                                                    </p>
                                                </td>
                                                <td>
                                                    <p>(Optional) The maximum total number of users with Creator, Explorer, or Viewer licenses currently allowed on a site.</p>
                                                    <p>On-premises server administrators can set <code>userQuota</code> 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
									<code>userQuota</code> will equal the sum of the tiered capacity values, and attempting to set
								<code>userQuota</code> will cause an error.</p>
                                                    <p>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 <code>userQuota</code> from a Create Site or Update Site request, or
								making its value -1. </p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p>Tiered capacity attributes</p>
                                                    <p><span class="api-placeholder">creator-license-limit</span>
                                                        <br><span class="api-placeholder">explorer-license-limit</span>
                                                        <br><span class="api-placeholder">viewer-license-limit</span>
                                                    </p>
                                                </td>
                                                <td>
                                                    <p>(Optional) The maximum number of licenses for users with the Creator,
									Explorer, or Viewer role, respectively, allowed on a site. </p>
                                                    <p>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.</p>
                                                    <p>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. </p>
                                                    <p>To use role-specific license limits, the <code>userQuota</code> 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 <code>userQuota</code> will result in an error.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">data-alerts-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, data alerts are enabled on the site. Default value is <code>true</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">commenting-mentions-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, mentions for commenting are enabled. Default value is <code>true</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">catalog-obfuscation-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, catalog obfuscation is enabled on the site. Default value is <code>true</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">flow-auto-save-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, flow auto save is enabled on the site. Default value is <code>true</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">run-now-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, run now for schedules is enabled which allows non-administrators to run schedules manually. Default value is <code>true</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">metrics-content-type-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, the metrics content type is enabled on the server. Default value is <code>false</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">notify-site-admins-on-throttle-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, site admins will be notified if their background jobs are being throttled. Default value is <code>false</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">authoring-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, web authoring is enabled. Default value is <code>false</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">custom-subscription-email-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, sending custom subscription email is enabled. If set to false after being set true, the current custom subscription email is voided. Default value is <code>false</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">custom-subscription-email</span>
                                                    </p>
                                                </td>
                                                <td>A valid custom email that will be sent if <span class="api-placeholder">customSubscriptionEmailEnabled</span> is set to true. Default value is <code>false</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">custom-subscription-footer-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, 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 <code>false</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">custom-subscription-footer</span>
                                                    </p>
                                                </td>
                                                <td>A custom subscription footer that will be added to subscription and data alerts if <span class="api-placeholder">customSubscriptionFooterEnabled</span> is set to true. Default value is <code>false</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">ask-data-mode</span>
                                                    </p>
                                                </td>
                                                <td>The mode of the ask data feature on the site. Can be set to one of two values:
									<ul><li><code>DisabledByDefault</code> - Enables creation of Ask Data lenses for all published data sources. Data sources do not have lenses created automatically.</li><li><code>DisabledAlways</code> - 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.</li></ul>
								Default value is <code>DisabledByDefault</code>. For more information, see <a href="https://help.tableau.com/current/server/en-us/ask_data_enable.htm" ref="noreferrer" target="_blank">Disable or Enable Ask Data for a Site</a>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">named-sharing-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, named sharing is enabled. Default value is <code>true</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">cataloging-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, data catalog is enabled for the site. Default value is <code>true</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">derived-permissions-enabled-flag</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, boolean) If <code>true</code>, derived permissions are enabled for the site. Default value is <code>false</code>.</td>
                                            </tr>
                                            <tr>
                                                <td>
                                                    <p><span class="api-placeholder">user-visibility-mode</span>
                                                    </p>
                                                </td>
                                                <td>(Optional, string) When the value is <code>FULL</code> users can see the user of other site users. If the value is <code>LIMITED</code> User information on the site is not visible to other users.  Default value is <span class="api-placeholder">FULL</span>. For more information, see <a href="https://help.tableau.com/current/server/en-us/user_visibility.htm" ref="noreferrer" target="_blank">User Visibility</a>.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">use-default-time-zone</span>
                                                </td>
                                                <td>(Optional, boolean) Set this to <code>true</code>, if you want the <span class="api-placeholder">time-zone</span> attribute use the Server time Zone at run time. This attribute is set to official IANA name.&nbsp; If this is set to <code>false</code>, the <span class="api-placeholder">time-zone</span> value must be specified.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">time-zone</span>
                                                </td>
                                                <td>(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 <a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">Wikipedia</a>.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">autoSuspendRefreshEnabled</span>
                                                </td>
                                                <td>(Optional) Tableau can automatically suspend extract refresh tasks for inactive workbooks to save resources. Specify&nbsp;true&nbsp;to enable or false&nbsp;to disable. Default is&nbsp;true.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">autoSuspendRefreshInactivityWindow</span>
                                                </td>
                                                <td>(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.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">explainDataEnabled</span>
                                                </td>
                                                <td>
                                                    <p>(Optional, boolean) Set this attribute to <code>false</code> to disable Explain Data capabilities for a site. By default, this attribute is set to <code>true</code>. For more information about this site setting, see <a href="https://help.tableau.com/current/server/en-us/explain_data_enable.htm" target="_blank">Disable or Enable Explain Data for a Site</a> in the Tableau Server Help.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">dqwSubscriptionsEnabled</span>
                                                </td>
                                                <td>
                                                    <p>(Optional, boolean) Set this attribute to <code>false</code> to exclude data quality warnings (DQWs) from subscription emails. By default, this attribute is set to <code>true</code>. For more information about this site setting, see <a href="https://help.tableau.com/current/server/en-us/dm_dqw#subscriptions.htm" target="_blank">Disable or Enable Explain Data for a Site</a> in the Tableau Server Help.</p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><a name="user_attributes"></a><span class="api-placeholder">attribute-capture-enabled</span>
                                                </td>
                                                <td>
                                                    <p>(Optional, boolean) Set this attribute to <code>true</code> to enable user attribute functions used in embedded content to accept the passing of user attributes from a JSON&nbsp;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 <code>false</code>. For more information, see <a href="https://help.tableau.com/current/api/embedding_api/en-us/docs/embedding_api_user_attributes.html" target="_blank">Tableau Embedding API v3</a> Help. This attribute is available  starting from API&nbsp;version 3.25.</p>
                                                    <p>Starting in October 2025 (API&nbsp;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&nbsp;claims or SAML assertions.  For more information, see <a href="https://help.tableau.com/current/online/en-us/openid_auth_server_config.htm#user_attributes" target="_blank">OIDC</a> or <a href="https://help.tableau.com/current/online/en-us/saml_config_site.htm#user_attributes" target="_blank">SAML</a> topics in the Tableau Cloud Help.</p>
                                                    <p> </p>
                                                </td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">groupAssertionsEnabled</span>
                                                </td>
                                                <td>(Optional) Set to <code>true</code> to allow assertions into group membership using session info. Set to <code>false</code> if you don't want users to be able to be asserted in to groups. The default is <code>false</code>. If this attribute is set to false, it will disable group assertions for the entire site, including the following settings:
    <ul><li><span class="api-placeholder">groupAssertionsSAMLEnabled</span></li><li><span class="api-placeholder">groupAssertionsOIDCEnabled</span></li><li><span class="api-placeholder">groupAssertionsConnectedAppsEnabled</span></li></ul></td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">groupAssertionsSAMLEnabled</span>
                                                </td>
                                                <td>(Optional, boolean) Set to <code>true </code>to allow assertions into group membership using SAML session info. Set to <code>false </code>if you don't want users to be able to be asserted in to groups. The default is <code>false</code>. If this attribute is set to false, it will disable group assertions for SAML sessions.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">groupAssertionsOIDCEnabled</span>
                                                </td>
                                                <td>
(Optional, boolean) Set to <code>true </code>to allow assertions into group membership using OIDC session info. Set to <code>false </code>if you don't want users to be able to be asserted in to groups. The default is <code>false</code>. If this attribute is set to false, it will disable group assertions for OIDC sessions.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">groupAssertionsConnectedAppsEnabled</span>
                                                </td>
                                                <td> (Optional, boolean) Set to <code>true </code>to allow assertions into group membership using Connected App JWT tokens. Set to <code>false </code>if you don't want users to be able to be asserted into groups via connected apps. The default is <code>false</code>. If this attribute is set to false, it will disable group assertions for JWT connected app connections.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">groupSetsEnabled</span>
                                                </td>
                                                <td>(Optional, boolean) Set to <code>true</code> to allow groups sets. Set to <code>false</code> if you don't want group sets support for the site. The default is <code>false</code>. If this attribute is set to false, it will disable group sets for the site.</td>
                                            </tr>
                                            <tr>
                                                <td><span class="api-placeholder">recycleBinEnabled</span>
                                                </td>
                                                <td>(Optional, boolean) Set to <code>true</code> to enable the Recycle Bin. Set to <code>false</code> to disable it. The default is <code>true</code>.</td>
                                            </tr>
                                        </tbody>
                                    </table>

Any combination of the attributes inside the <site> 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 <site> element (`<site />`) 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 `<site>` 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  <tsRequest>   <site site attributes >   </site> </tsRequest> --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/current/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

```
<tsResponse>
  <site id="site-id"
    name="site-name"
    contentUrl="content-url"
    adminMode="admin-mode"
    storageQuota="limit-in-megabytes"
    disableSubscriptions="true-or-false"
    state="active-or-suspended"
    revisionHistoryEnabled="true-or-false"
    revisionLimit="revision-limit"
    allowSubscriptionAttachments="allow-subcription-attachments-flag"
    cacheWarmupEnabled="cache-warmup-enabled-flag [REMOVED IN API 3.19]"
    commentingEnabled="commenting-enabled-flag"
    editingFlowsEnabled="editing-flows-enabled-flag"
    schedulingFlowsEnabled="scheduling-flows-enabled-flag"
    catalogingEnabled="cataloging-enabled-flag"
    derivedPermissionsEnabled="derived-permissions-enabled-flag"
    requestAccessEnabled="request-access-enabled-flag"
    runNowEnabled="run-now-enabled-flag"
    userQuota="all-license-limit-total"
    tierCreatorCapacity="creator-license-limit"
    tierExplorerCapacity="explorer-license-limit"
    tierViewerCapacity="viewer-license-limit"
    askDataMode="ask-data-mode"
    useDefaultTimeZone="default-time-zone-flag"
    timeZone="time-zone"
    autoSuspendRefreshEnabled="auto-suspend-refresh-enabled-flag"
    autoSuspendRefreshInactivityWindow="auto-suspend-refresh-inactivity-window"
    explainDataEnabled="explain-data-enabled"
    dqwSubscriptionsEnabled="dqw-subscriptions-enabled"
    attributeCaptureEnabled="attribute-capture-enabled"
    groupAssertionsEnabled="group-assertions-enabled-flag"
    groupAssertionsSAMLEnabled="group-assertions-saml-enabled-flag"
    groupAssertionsOIDCEnabled="group-assertions-oidc-enabled-flag"
    groupAssertionsConnectedAppsEnabled="group-assertions-connected-apps-enabled-flag"
    groupSetsEnabled="group-sets-enabled-flag"
    recycleBinEnabled="recycle-bin-enabled-flag" />
  </site>
</tsResponse>
```

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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Invalid revision history limit</td><td>The value for the revision history limit isn't an integer.</td></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400004</td><td>Invalid administrator mode</td><td>An administrator mode parameter was provided in the request with an invalid value. The valid values are <span class="api-command-ref">ContentOnly</span> and <span class="api-command-ref">ContentAndUsers</span>.</td></tr><tr><td>400</td><td>400004</td><td>Invalid state</td><td>A state parameter was provided in the request with an invalid value</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type wasn't <span class="api-command-ref">PUT</span>.</td></tr><tr><td>409</td><td>409001</td><td>Site name conflict</td><td>The new site name in the request already belongs to an existing site.</td></tr><tr><td>409</td><td>409002</td><td>Site URL conflict</td><td>The new content URL in the request already belongs to an existing site.</td></tr><tr><td>409</td><td>409004</td><td>User quota and tiered capacity conflict</td><td>The request can't set both tiered capacity attributes and <span class="api-command-ref">userQuota</span>. One or the other must be null.</td></tr><tr><td>409</td><td>409004</td><td>License limit exceeded</td><td>The request can't set tiered capacity attributes or <span class="api-command-ref">userQuota</span> values that are larger than the number of active licenses configured for the site.</td></tr><tr><td>409</td><td>409004</td><td>Administrator mode or user quota conflict</td><td>The request can't set <span class="api-command-ref">adminMode</span> to <span class="api-command-ref">ContentOnly</span> and also specify a <span class="api-command-ref">userQuota</span> value.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d5-e4f3-a2b1-c0d9-e8f7a6b5c4d" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-site.xml`

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

```
<tsRequest>
  <site
    adminMode="ContentOnly"
    storageQuota="1000"
    tierCreatorCapacity="2"
    tierExplorerCapacity="1"
    tierViewerCapacity="1"
    useDefaultTimeZone="false"
    timeZone="America/Los_Angeles" />
</tsRequest>
```

**Example response:**

```
<tsResponse<
  <site id="9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d"
    name="Default"
    contentUrl="svc_licensingtest"
    adminMode="ContentAndUsers"
    disableSubscriptions="false"
    state="Active"
    revisionHistoryEnabled="true"
    revisionLimit="25"
    subscribeOthersEnabled="true"
    allowSubscriptionAttachments="true"
    guestAccessEnabled="false"
    cacheWarmupEnabled="true" [REMOVED IN API 3.19]
    commentingEnabled="true"
    editingFlowsEnabled="false"
    schedulingFlowsEnabled="false"
    extractEncryptionMode="disabled"
    catalogingEnabled="true"
    derivedPermissionsEnabled="true"
    askDataMode="DisabledByDefault"
    useDefaultTimeZone="false"
    timeZone="America/Los_Angeles"
    explainDataEnabled="true"
    dqwSubscriptionsEnabled="false"
</tsResponse>
```

## 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

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

#### 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)._

```
<tsRequest>
  <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" />
  </subscription>
</tsRequest>
```

```
{
  "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

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-extra-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">new-subscription-subject</span>
                                    </td>
                                    <td>(Optional) A new subject for the subscription.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">attach-image-flag</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Setting this <code>true</code> will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default
								behavior if neither <code>attachImage</code> or <code>attachPdf</code> are specified.</p>
                                        <p>If subscriptions to attachments are disabled in Tableau server or site settings,
								then making a request that sets <code>attachImage</code> to <code>false</code> will cause an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">attach-pdf-flag</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Setting this <code>true</code> will cause the subscriber to receive mail with a .pdf file
								containing images of workbooks or views attached to it.</p>
                                        <p>If subscriptions to attachments are disabled in Tableau server or site settings,
								then  making a request that sets <code>attachPdf</code> to <code>true</code> will cause an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">page-orientation</span>
                                    </td>
                                    <td>
								(Optional) The orientation of the pages produced when <span class="api-placeholder">attach-pdf-flag</span>
								is <code>true</code>. The value can be <code>Portrait</code> or
								<code>Landscape</code>. If this parameter is not present the page orientation will default to <code>Portrait</code>.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">page-size-option</span>
                                    </td>
                                    <td>
								(Optional) The type of page produced, which determines the page dimensions when
								<span class="api-placeholder">attach-pdf-flag</span> is <code>true</code>. The value can be:
								<code>A3</code>, <code>A4</code>, <code>A5</code>, <code>B5</code>, <code>Executive</code>, <code>Folio</code>,
								<code>Ledger</code>, <code>Legal</code>, <code>Letter</code>, <code>Note</code>, <code>Quarto</code>, or
								<code>Tabloid</code>. If this parameter is not present the page type will default to <code>Letter</code>.
							</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">suspended-flag</span>
                                    </td>
                                    <td>
                                        <p>(Optional boolean) If <code>true</code>, the subscription is disabled, meaning it won't run until it's enabled using the <a href="#update_subscription">Update Subscription</a> method or <span class="uicontrol">Resume Subscription</span> in the web UI. If <code>false</code>, the subscription is enabled.							</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">new-schedule-id</span>
                                    </td>
                                    <td>(Optional) The ID of a server schedule to associate this subscription with. To determine what schedules are available,
									call <a href="#query_schedules">List Server Schedules</a>. The type of the schedule must be <code>Subscription</code>.
								</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">send-view-if-empty-flag</span>
                                    </td>
                                    <td>(Optional) Applies to views only. If <code>true</code>, an image is sent even if the view specified in a subscription is empty. If <code>false</code>, nothing is sent if the view is empty. The default value is true.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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

```
<tsResponse>
  <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" />
  </subscription>
</tsResponse>
```

```
{
  "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/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400067</td><td>Invalid subscription subject</td><td>The subscription subject is null or empty.</td></tr><tr><td>400</td><td>400069</td><td>Invalid subscription type</td><td>The subscription type is not <code>Workbook</code> or <code>View</code>.</td></tr><tr><td>400</td><td>400069</td><td>Invalid schedule type</td><td>The schedule type is not <code>Subscription</code>.</td></tr><tr><td>400</td><td>400133</td><td>Invalid data condition type</td><td>The data condition type is invalid for the subscription.</td></tr><tr><td>403</td><td>403065</td><td>No permissions to update subscription.</td><td>The user does not have permission to update the specified subscription.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The specified site doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404023</td><td>Schedule not found</td><td>The schedule ID in the request body doesn't correspond to an existing schedule.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

### 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

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

#### Request Body

```
<tsRequest>
  <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="6t543fd-6365-44d5-925b-644e52897y65"/>
  </subscription>
  <schedule frequency="Daily">
    <frequencyDetails start="18:30:00" end="23:30:00">
      <intervals>
        <interval hours="4"/>
        <interval weekDay="Sunday"/>
        <interval weekDay="Wednesday"/>
      </intervals>
    </frequencyDetails>
  </schedule>
</tsRequest>
```

```
{
  "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.

<table class="api-parameters-table">
                            <colgroup>
                                <col width="30%">
                                <col width="70%">
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><code>subscription subject</code>
                                    </td>
                                    <td><i>(Required to create subscription) string:</i> A description for the subscription. This description is displayed when users list subscriptions for a site in the server environment.
					</td>
                                </tr>
                                <tr>
                                    <td><code>subscription attachImage</code>
                                    </td>
                                    <td>
                                        <p><i>boolean:</i>  Setting this <code>true</code> will cause the subscriber to receive mail with .png images of workbooks or views attached to it. This is the default
						behavior if neither <code>attachImage</code> or <code>attachPdf</code> are specified. Default is <code>false</code>.</p>
                                        <p>If subscriptions to attachments are disabled in Tableau server or site settings,
						then making a request that sets <code>attachImage</code> to <code>false</code> will cause an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>subscription attachPdf</code>
                                    </td>
                                    <td>
                                        <p><i>boolean:</i> Setting this <code>true</code> will cause the subscriber to receive mail with a .pdf file
						containing images of workbooks or views attached to it. Default is <code>false</code>.</p>
                                        <p>If subscriptions to attachments are disabled in Tableau server or site settings,
						then  making a request that sets <code>attachPdf</code> to <code>true</code> will cause an error.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>subscription pageOrientation</code>
                                    </td>
                                    <td><i>enumeration:</i> The orientation of the pages produced when <span class="api-placeholder">attach-pdf-flag</span>
						is <code>true</code>. The value can be <code>Portrait</code> or
						<code>Landscape</code>. If this parameter is not present the page orientation will default to <code>Portrait</code>.
					</td>
                                </tr>
                                <tr>
                                    <td><code>subscription pageSizeOption</code>
                                    </td>
                                    <td><i>enumeration:</i> The type of page produced, which determines the page dimensions when
						<span class="api-placeholder">attach-pdf-flag</span> is <code>true</code>. The value can be:
						<code>A3</code>, <code>A4</code>, <code>A5</code>, <code>B5</code>, <code>Executive</code>, <code>Folio</code>,
						<code>Ledger</code>, <code>Legal</code>, <code>Letter</code>, <code>Note</code>, <code>Quarto</code>, or
						<code>Tabloid</code>. If this parameter is not present the page type will default to <code>Letter</code>.
					</td>
                                </tr>
                                <tr>
                                    <td><code>subscription message</code>
                                    </td>
                                    <td><i>string:</i> The text body of the subscription email message.
					</td>
                                </tr>
                                <tr>
                                    <td><code>subscription suspended</code>
                                    </td>
                                    <td><i>boolean:</i> If <code>true</code>, the subscription is disabled, meaning it won't run until it's enabled using the <a href="#update_subscription">Update Subscription</a> method or <span class="uicontrol">Resume Subscription</span> in the web UI. If <code>false</code>, the subscription is enabled.</td>
                                </tr>
                                <tr>
                                    <td><code>content id</code>
                                    </td>
                                    <td><i>(Required to create subscription) LUID:</i> The LUID of the workbook or view the user should be subscribed to.
					</td>
                                </tr>
                                <tr>
                                    <td><code>content type</code>
                                    </td>
                                    <td><i>(Required to create subscription) enumeration:</i> <code>Workbook</code> to create a subscription for a workbook, or <code>View</code> to create a subscription for a view.
					</td>
                                </tr>
                                <tr>
                                    <td><code>content sendIfViewEmpty</code>
                                    </td>
                                    <td><i>boolean:</i> Applies to views only. If <code>true</code>, an image is sent even if the view specified in a subscription is
						empty. If <code>false</code>, nothing is sent if the view is empty. The default value is true.
					</td>
                                </tr>
                                <tr>
                                    <td><code>userId</code>
                                    </td>
                                    <td><i>(Required to create subscription) LUID:</i> The LUID of the user to create the subscription for.
					<p class="note"><strong>Note</strong>: The user must have an email address defined in Tableau Server.</p></td>
                                </tr>
                            </tbody>
                        </table> <table class="api-parameters-table">
                            <colgroup>
                                <col width="30%">
                                <col width="70%">
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><code>schedule frequency</code>
                                    </td>
                                    <td><i>(Required to create subscription) enumeration:</i> The scheduled frequency for triggering the task. Valid values include:
							<ul><li>Hourly</li><li>Daily</li><li>Weekly</li><li>Monthly</li></ul></td>
                                </tr>
                                <tr>
                                    <td><code>frequencyDetails start</code>
                                    </td>
                                    <td><i>(Required to create subscription) time:</i> If the schedule frequency is <code>Daily, Weekly, or Monthly</code>, then <code>start</code>
						is the time of day on which scheduled jobs should run. If the frequency is <code>Hourly</code>, then <code>start</code> is the beginning of the
								time range during which jobs should be started. The valid format is <code>HH:MM:SS</code>.
					</td>
                                </tr>
                                <tr>
                                    <td><code>frequencyDetails end</code>
                                    </td>
                                    <td>
                                        <p><i>(Required to create subscription) time:</i> If the schedule frequency is <code>Hourly</code>, or <code>Daily</code> with an interval of
							<code>hours</code> less than <code>24</code>, then <code>end</code> is the time of day on which scheduled jobs should stop being run.
							The valid format is <code>HH:MM:SS</code>. 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 <code>frequencyDetail</code> would be:
</p><pre><code>&lt;frequencyDetail start="20:45:00" end="21:45:00"&gt;
  . . .
&lt;/frequencyDetail&gt;</code></pre>
                                    </td>
                                </tr>
                                <tr>
                                    <td><code>interval <i>{interval type}</i></code>
                                    </td>
                                    <td><i>(Required to create subscription) string:</i> Defines when and how often a scheduled job executes within the time parameters set in the <code>start</code> and <code>end</code>
							 values of the <code>frequencyDetails</code> of the <code>schedule</code>. The type and valid values for
							an interval expression depend on the declared <code>frequency</code> of the <code>schedule</code> as follows:<br><br><table><colgroup><col width="20%"><col width="80%"></colgroup><tbody><tr align="left"><th><b>Frequency</b></th><th><b>Valid interval values</b></th></tr><tr><td><code>Hourly</code></td><td> The value of an interval for an <code>Hourly</code> schedule can be only one of either:
							<ul><li><code>hours="1"</code>
									The number of hours between jobs. <code>1</code> is the only valid value.</li><li><code>minutes="60"</code>
									 The number of minutes between jobs. <code>60</code> is the only valid value.</li><li><code>weekDay="<i>weekday"</i></code> The weekday(s) the job will be run on.
									Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
								 	Thursday, Friday, and Saturday</code>. <br><br>
									For example, to schedule to run a job every hour on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
									use an interval like:
											<pre><code>&lt;intervals&gt;
  &lt;interval hours="1"/&gt;
  &lt;interval weekDay="Sunday"/&gt;
  &lt;interval weekDay="Wednesday"/&gt;
&lt;intervals&gt;</code></pre></li></ul><br></td></tr><tr><td><code>Daily</code></td><td>
									The value of <code>Daily</code> can have multiple <code>weekday</code> elements, but only one <code>hours</code> declaration.
										An <code>hours</code> interval is required.
									<ul><li><code>hours="<i>interval</i>"</code> The interval between execution of jobs on the weekday(s) specified.
											Valid values are <code>2, 4, 6, 8, 12, or 24</code>. Note that if the <code><i>interval</i></code> value of a daily schedule
												is less than <code>24</code>, a <code>frequencyDetail end</code> time must be supplied. </li><li><code>weekDay="<i>weekday</i>"</code> The weekday(s) the job will be run on.
											Valid values are:  <code>Sunday, Monday, Tuesday, Wednesday,
										 	Thursday, Friday, or Saturday</code>. <br><br>
											For example, to schedule to run a job every 4 hours	on Sunday and Wednesday, during the time range specified in <code>frequencyDetails</code>
											use an interval like:<br><pre><code>&lt;intervals&gt;
  &lt;interval hours="4"/&gt;
  &lt;interval weekDay="Sunday"/&gt;
  &lt;interval weekDay="Wednesday"/&gt;
&lt;intervals&gt;</code></pre></li></ul></td></tr><tr><td><code>Weekly</code></td><td><code>weekDay="<i>weekday</i>"</code>
												The day of the week the schedule should run on. You can only specify a single day for a Weekly schedule. Valid values are:
											<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday.</code></td></tr><tr><td><code>Monthly</code></td><td> <p>The day(s) of the month a job should be scheduled to run on. There are two ways to define a monthly interval:</p><p>Specify the day(s) using the number of the day in the month;
											</p><ul><li><code>monthDay="<i>day</i>"</code> The number of the day of the month. Valid values are the whole numbers
												<code>1</code> to <code>31</code> or <code>LastDay</code>. If you specify <code>monthDay</code> by day number
												then you can use multiple <code>interval</code> instances to choose for the job to
												run on multiple days in the month. If you use <code>LastDay</code> then only one instance of <code>interval</code>
												can be used in the schedule to specify the last day of the month.</li></ul><p></p><p>Specify the day by describing which occurrence of a weekday within the month.
										</p><ul><li><code>monthDay="<i>occurrence_of_weekday</i>" Weekday="<i>weekday</i>"</code>
													The occurrence of the specified weekday within the month when a job should be run.
													Valid values for <code><i>occurrencee_of_weekday</i></code> are	<code>First, Second, Third, Fourth, Fifth, or LastDay</code>.
													Valid values for <code><i>weekday</i></code> are
													<code>Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, or Saturday</code>.
													If the value is <code>lastDay</code> then the job will run on
													the last occurrence of the specified weekday in the month.<br><br>
													For example, to make a schedule that that would run a job on the third Thursday of each month, you would use:<br><pre><code>&lt;interval monthDay="Third" weekDay="Thursday"/&gt;</code></pre></li></ul><p></p></td></tr></tbody></table></td>
                                </tr>
                            </tbody>
                        </table>

#### 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 "<tsRequest> > <subscription 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="6t543fd-6365-44d5-925b-644e52897y65"/> </subscription> <schedule frequency='Daily'> <frequencyDetails start='18:30:00' end='23:00:00'> <intervals> <interval hours='4'/> <interval weekDay='Sunday'/> <interval weekDay='Wednesday'/> </intervals> </frequencyDetails> </schedule> </tsRequest>"`

#### Response Code

200

#### Response Body

```
<tsResponse>
  <subscription
    id="45678fd-6365-44d5-925b-644e52834567"
    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"/>
  </subscription>
  <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"/>
          <interval weekDay="Sunday"/>
          <interval weekDay="Wednesday"/>
        </intervals>
      </frequencyDetails>
  </schedule>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403004</td><td>Unauthorized Access</td><td>The user is not authorized to make this request.</td></tr><tr><td>404</td><td>404002</td><td>User not found</td><td>The user specified in the request could not be found.</td></tr><tr><td>404</td><td>404025</td><td>Subscription not found</td><td>The task for the subscription could not be found.</td></tr><tr><td>409</td><td>409004</td><td>invalid parameter value</td><td>The request is malformed or contains an invalid or missing schedule or interval parameter value. When the difference between <code>start</code> and <code>end</code> times are not increments of one hour, this error will result.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <table isCertified="certification-status"
      certificationNote="certification-note"
      description="new-description-value">
    <contact id="new-contact-id" />
  </table>
</tsRequest>
```

#### Attribute Values

Any combination of attributes inside the **<table>** 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.

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide" style="width: 264px;">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">certification-status</span>
                                    </td>
                                    <td>
                                        <p>(Optional) Use one of the following values:</p>
                                        <ul>
                                            <li><span class="uicontrol">true</span>
                                            </li>
                                            <li><span class="uicontrol">false</span>
                                            </li>
                                        </ul>
                                        <p>These values are case sensitive.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">certification-note</span>
                                    </td>
                                    <td>(Optional) Custom text to accompany the certification status.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">new-description-value</span>
                                    </td>
                                    <td>(Optional) Custom text to describe the table asset.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">new-contact-id</span>
                                    </td>
                                    <td>(Optional) The ID&nbsp;(not name) of the certification owner.</td>
                                </tr>
                            </tbody>
                        </table>

#### 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:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-3.5.xsd">
  <table id="b86632d7-b82e-4d4c-88e5-11957cdadd95" name="Zoning.shp" description="Contact Susan Nguyen (database admin) for changes." isEmbedded="true" isCertified="false">
	<site id="5286d663-8668-4ac2-8c8d-91af7d585f6b"/>
  </table>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2" style="width: 87px;"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized access</td><td>No authorization credentials were provided.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized access</td><td>Invalid authorization credentials were provided.</td></tr><tr><td>404</td><td>404000</td><td>Resource not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404032</td><td>Table not found</td><td>The requested table asset could not be found.</td></tr><tr><td>409</td><td>409052</td><td>Table error</td><td>An unknown table asset error occurred.</td></tr><tr><td>409</td><td>409057</td><td>Table update error</td><td>An unknown error occurred and the table asset could not be updated.</td></tr><tr><td>409</td><td>409058</td><td>Table update forbidden</td><td>A user without "write"&nbsp;permissions to the table asset attempted an update.</td></tr></tbody></table>

## 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

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

#### Request Body

Copy

```
<tsRequest>  <extensionsServerSettings>    <extensionsGloballyEnabled>true</extensionsGloballyEnabled>      <blockList>https://test.com</blockList>  </extensionsServerSettings></tsRequest>
```

Copy

```
{  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }}
```

#### Request Attributes

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>extensionsEnabled</code>
                                            </td>
                                            <td>
                                                <p>
								Required. Boolean. If <code>true</code> extensions are allowed to run on the server. If <code>false</code> all extentions are disabled on the server.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>blocklist</code>
                                            </td>
                                            <td>
                                                <p>(Optional) Array. A list of domains that are not allowed to serve extensions to the Tableau Server. Domains are in the form of
                                <code>https://blocked_example.com</code></p>
                                                <p>(Optional) String. The URL of the extension you want to from the server.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsRequest>  <extensionsServerSettings>   <extensionsGloballyEnabled>true</extensionsGloballyEnabled>   <blockList>https://test.com</blockList>  </extensionsServerSettings></tsRequest>
```

Copy

```
{  "extensionsServerSettings": {    "extensionsGloballyEnabled": "true",    "blockList": "https://test.com"  }}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403000</td><td>Non-admin access forbidden</td><td>The client attempted to access an API method while signed in as a non-administrator user.</td></tr><tr><td>404</td><td>404000</td><td>Bad Request</td><td>The requested resource could not be found.</td></tr><tr><td>500</td><td>500000</td><td>Internal Server Error</td><td>The request could not be completed.</td></tr></tbody></table>

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

## 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

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

#### Request Body

Copy

```
<tsRequest>  <extensionsSiteSettings>    <extensionsEnabled>true</extensionsEnabled>    <useDefaultSetting>false</useDefaultSetting>    <safeList>      <url>http://localhost:9123/Dynamic.html</url>      <fullDataAllowed>true</fullDataAllowed>      <promptNeeded>true</promptNeeded>    </safeList>    <allowTrusted>true</allowTrusted>      <includeSandboxed>true</includeSandboxed>      <includeTableauBuilt>true</includeTableauBuilt>      <includePartnerBuilt>false</includePartnerBuilt>  </extensionsSiteSettings></tsRequest>
```

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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>extensionsEnabled</code>
                                            </td>
                                            <td>
                                                <p>
								Required. Boolean. If <b>true</b>, 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.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>useDefaultSetting</code>
                                            </td>
                                            <td>(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. </td>
                                        </tr>
                                        <tr>
                                            <td><code>safeList url</code>
                                            </td>
                                            <td>
                                                <p>(Optional) Array. The list of URLs of the extensions allow to run on the site. <a href="https://help.tableau.com/current/online/en-us/dashboard_extensions_server.htm#using-regular-expressions-in-the-safe-list-url" target="_blank">Regular expressions are supported</a>.</p>
                                                <p>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 <code>true</code>.</p>
                                                <p class="note">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.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>safeList fullDataAllowed</code>
                                            </td>
                                            <td>(Optional) Boolean. Set to <b>true</b> 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.</td>
                                        </tr>
                                        <tr>
                                            <td><code>safeList promptNeeded</code>
                                            </td>
                                            <td>(Optional) Boolean.  The prompt tells users details about the extension and whether the extension has access to full data. Set to <b>true</b> to give users the ability to allow or deny the extension from running. Set to <b>false</b> to hide this prompt from users, allowing the extension to run immediately.

</td>
                                        </tr>
                                        <tr>
                                            <td><code>allowTrusted</code>
                                            </td>
                                            <td>(Optional) Boolean. If <code>true</code>, specific categories of extensions (sandboxed, Tableau-built, or partner-built) are allowed to run by default on the site. If <code>false</code>, no extensions are allowed unless they are explicitly added to the safeList.</td>
                                        </tr>
                                        <tr>
                                            <td><code>includeSandboxed</code>
                                            </td>
                                            <td>(Optional) Boolean. Valid only if <code>allowTrusted </code>is <code>true</code>. 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.</td>
                                        </tr>
                                        <tr>
                                            <td><code>includeTableauBuilt</code>
                                            </td>
                                            <td>(Optional) Boolean. Valid only if <code>allowTrusted </code>is <code>true</code>. When true, extensions built by Tableau are allowed to run by default.</td>
                                        </tr>
                                        <tr>
                                            <td><code>includePartnerBuilt</code>
                                            </td>
                                            <td>(Optional) Boolean. Valid only if <code>allowTrusted </code>is <code>true</code>. When true, extensions built by Tableau's trusted partners are allowed to run by default.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<tsRequest><extensionsSiteSettings><extensionsEnabled>true</extensionsEnabled><useDefaultSetting>false</useDefaultSetting><safeList><url>http://localhost:9123/Dynamic.html</url><fullDataAllowed>true</fullDataAllowed><promptNeeded>true</promptNeeded></safeList><allowTrusted>true</allowTrusted><includeSandboxed>true</includeSandboxed><includeTableauBuilt>true</includeTableauBuilt><includePartnerBuilt>false</includePartnerBuilt></extensionsSiteSettings></tsRequest>"`

#### Response Code

200

#### Response Body

Copy

```
<tsResponse>  <extensionsSiteSettings>    <extensionsEnabled>true</extensionsEnabled>    <useDefaultSetting>false</useDefaultSetting>    <safeList>      <url>http://localhost:9123/Dynamic.html</url>      <fullDataAllowed>true</fullDataAllowed>      <promptNeeded>true</promptNeeded>    </safeList>    <allowTrusted>true</allowTrusted>    <includeSandboxed>true</includeSandboxed>    <includeTableauBuilt>true</includeTableauBuilt>    <includePartnerBuilt>false</includePartnerBuilt>                                                          </extensionsSiteSettings></tsResponse>
```

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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403000</td><td>Non-admin access forbidden</td><td>The client attempted to access an API method while signed in as a non-administrator user.</td></tr><tr><td>404</td><td>404000</td><td>Site Not Found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>500</td><td>500000</td><td>Internal Server Error</td><td>The request could not be completed.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
    <mcpSiteSettings>
        <settings>
            <key>mcp-settings-key</key>
            <value>mcp-settings-value</value>
        </settings>
        <settings>
            <key>mcp-settings-key</key>
        </settings>
        <settings>
            <key>mcp-settings-key</key>
            <value>mcp-settings-value</value>
        </settings>
    </mcpSiteSettings>
</tsRequest>
```

```
{
  "mcpSiteSettings": {
    "settings": [
      {
        "key": "mcp-settings-key",
        "value": "mcp-settings-value"
      },
      {
        "key": "mcp-settings-key"
      },
      {
        "key": "mcp-settings-key",
        "value": "mcp-settings-value"
      }
    ]
  }
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">key</span></td><td>(Required) String. Specifies which setting to add, modify, or remove.</td></tr><tr><td><span class="api-placeholder">value</span></td><td>(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.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

```
<tsResponse>
    <mcpSiteSettings>
        <settings>
            <key>INCLUDE_TOOLS</key>
            <value>datasource,search-content</value>
        </settings>
        <settings>
            <key>INCLUDE_TAGS</key>
            <value>sales,marketing,reviews</value>
        </settings>
        <settings>
            <key>DISABLE_METADATA_API_REQUESTS</key>
            <value>true</value>
        </settings>
        <settings>
            <key>MAX_RESULT_LIMITS</key>
            <value>query-datasource:1000</value>
        </settings>
    </mcpSiteSettings>
</tsResponse>
```

```
{
  "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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409004</td><td>Invalid parameter</td><td>The mcpSiteSettings entity is empty; the settings key is null, missing, or invalid; or site LUID format is invalid.</td></tr><tr><td>401</td><td>401002</td><td>Invalid authentication credentials</td><td>Missing or invalid authentication credentials.</td></tr><tr><td>401</td><td>403001</td><td>Missing authentication token</td><td>Authentication token not provided.</td></tr><tr><td>403</td><td>403000</td><td>Insufficient permissions</td><td>User isn't an administrator</td></tr><tr><td>403</td><td>403010</td><td>Site mismatch</td><td>Authenticated user's site does not match the site LUID in the request.</td></tr><tr><td>403</td><td>403157</td><td>Feature disabled</td><td>Feature not enabled.</td></tr><tr><td>403</td><td>N/A</td><td>Insufficient OAuth scope</td><td>The user lacks the required OAuth scope.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>A site with the specified LUID does not exist.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>Unknown server error.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
 <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"/>
</tsRequest>
```

```
{
	"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 <user> 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.

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">new-full-name</span>
                                            </td>
                                            <td>(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.
                                </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">new-email</span>
                                            </td>
                                            <td>(Optional) The new email address for the for the Tableau Server user.
                                <p>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 <code>username</code> value to send notifications to. </p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">new-password</span>
                                            </td>
                                            <td>(Optional) The new password for the user. Tableau Server only. Not available in Tableau Cloud.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">new-site-role</span>
                                            </td>
                                            <td>
                                                <p>The new site role to assign to the user. You can assign the following roles:
									<span class="api-command-ref">Creator</span>,
									<span class="api-command-ref">Explorer</span>,
									<span class="api-command-ref">ExplorerCanPublish</span>,
									<span class="api-command-ref">ServerAdministrator</span>,
									<span class="api-command-ref">SiteAdministratorExplorer</span>,
									<span class="api-command-ref">SiteAdministratorCreator</span>,
									<span class="api-command-ref">Unlicensed</span>,
									or
								<span class="api-command-ref">Viewer</span>.</p>
                                                <p><strong>Note</strong>: Only a user in the <span class="api-command-ref">ServerAdministrator</span>
									site role can use the REST API to add or remove another user from the
									<span class="api-command-ref">ServerAdministrator</span> site role. Users in the <span class="api-command-ref">ServerAdministrator</span> site role can only be moved to the <b>Creator</b> site role if one or more <b>Creator</b> licenses have been activated on the server; otherwise these users can only be moved to the <b>Publisher</b> site role. This method only supports the
								    <span class="api-command-ref">ServerAdministrator</span> site role in API 2.8 and later.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><a name="authsetting"></a><span class="api-placeholder">new-auth-setting</span>
                                            </td>
                                            <td>(Optional) The authentication type for the user.<p><b>Tableau Server</b></p><p>The <span class="api-command-ref">authSetting</span> attribute only applies when updating users on sites with site-specific SAML-enabled settings.</p><p><b>Tableau Cloud</b></p><p>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:</p><ul><li><p><b>For Tableau with MFA (or Tableau) authentication:</b> To assign Tableau with MFA&nbsp;authentication (or Tableau authentication if still available for your site), you can use the <span class="api-command-ref">authSetting</span> or <span class="api-command-ref"><a href="#idpconfigurationid">idpConfigurationId</a></span> attribute, but not both.</p></li><li><p><b>For SAML and OIDC-based authentication:</b></p><ul><li><p><b>For new configurations:</b> To assign SAML&nbsp;or OIDC-based authentication, whose configurations were created during or after January 2025,  you must use the <span class="api-command-ref">idpConfigurationId</span> attribute for assigning user authentication.  Skip to <a href="#idpconfigurationid" class="xref">idp-configuration-id</a>.</p></li><li><p><b>For existing configurations:</b> To assign SAML&nbsp;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 <span class="api-command-ref">authSetting</span> attribute for assigning user authentication. Alternatively, you can use the <span class="api-command-ref"><a href="#idpconfigurationid">idpConfigurationId</a></span> attribute for assigning user authentication. Do not use both.</p></li></ul></li><p><b>Notes:</b></p><ul><li>In cases where both attributes are supported, you can use the <span class="api-command-ref">authSetting</span> attribute or the <span class="api-command-ref">idpConfigurationId</span> attribute, but not both.</li><li>If neither <span class="api-command-ref">authSetting</span> nor <span class="api-command-ref">idpConfigurationId</span> attribute is specified, then <code>TableauIdWithMFA</code> (or in some cases <code>ServerDefault</code> if that option is still available for your site) is the authentication  assigned to the user.</li><li>If you see "Unspecified" as the authentication method for the user in Tableau Cloud or if the user is unable to sign in, use the <span class="api-command-ref">idpConfigurationId</span> attribute instead. For more information, see <a href="https://help.salesforce.com/s/articleView?id=004693708&amp;type=1" target="_blank">When adding users to Tableau Cloud via Rest API, the user's authentication method is listed as "Unspecified" and the user gets error "Remote IdP entity descriptor is not configured" on login attempt</a> knowledge article or skip to <a href="#idpconfigurationid" class="xref">idp-configuration-id</a>.</li></ul></ul><p>You can assign the following values for the <span class="api-command-ref">authSetting</span> attribute:</p><ul><li><code>SAML</code> - The user signs in using the identity provider (IdP) configured for the site.
											For Tableau Cloud configuration, see
											<a href="https://help.tableau.com/current/server/en-us/saml_site_specific.htm" rel="noreferrer" target="_blank">Enable SAML Authentication on a Site</a>.
											For Tableau Server, see
											<a href="https://help.tableau.com/current/server/en-us/saml_site_specific.htm" rel="noreferrer" target="_blank">Configure Site-Specific SAML</a>.
										</li><li><code>OpenID</code> - <i>Tableau Cloud only</i>: The user signs in using Google, Salesforce or OpenID&nbsp;Connect provider credentials.
											<code>OpenID</code> corresponds to Google, Salesforce, or&nbsp;OIDC&nbsp;authentication configuration in Tableau Cloud authentication settings.</li><li><code>TableauIDWithMFA</code> - <i>Tableau Cloud only</i>:&nbsp;The user signs in using a combination of TableauID credentials and a registered verification method. For more information, see <a href="https://help.tableau.com/current/online/en-us/security_auth.htm#mfa_requirement" target="_blank">About multi-factor authentication and Tableau Cloud</a>.</li><li><code>ServerDefault</code> - 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 <code>ServerDefault</code> value corresponds to <span class="api-command-ref">TableauID</span> in authentication
											settings. For Tableau Server, the
											<a href="https://help.tableau.com/current/server/en-us/saml.htm" rel="noreferrer" target="_blank">SAML</a>
											Server help page describes default authentication options.
</li></ul><p></p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">identity-pool-name</span>
                                            </td>
                                            <td>(Optional, Tableau Server only) When identity pools are configured, the name of the identity pool.
                                <p>Starting in API&nbsp;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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_identity_pools.htm" class="xref">Identity Pools Methods</a>.</p></td>
                                        </tr>
                                        <tr>
                                            <td><a name="idpconfigurationid"></a><span class="api-placeholder">idp-configuration-id</span>
                                            </td>
                                            <td>
                                                <p>(Optional, Tableau Cloud only) The configuration to assign for user authentication. Added in API 3.25 (January 2025).</p>
                                                <p>To find the <span class="api-command-ref">idpConfigurationId</span> attribute value, use the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_site.htm#list_authentication_configurations_site" class="xref">List Authentication Configurations for Site</a> method.</p>
                                                <p><b>Notes:</b>
                                                </p>
                                                <ul>
                                                    <li>In cases where both attributes are supported, you can use the <span class="api-command-ref">idpConfigurationId</span> attribute or the <span class="api-command-ref">authSetting</span> attribute, but not both. </li>
                                                    <li>If neither <span class="api-command-ref">idpConfigurationId</span> nor <span class="api-command-ref">authSetting</span> attribute is  specified, then <code>TableauIdWithMFA</code> (or in some cases <code>ServerDefault</code> if that option is still available for your site) is the authentication assigned to the user.
</li>
                                                </ul>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">language</span>
                                            </td>
                                            <td>
                                                <p>(Optional, Tableau Cloud only) Language of the user. </p>
                                                <p>Starting in API&nbsp;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: <span class="api-command-ref">de</span>, <span class="api-command-ref">en_GB</span>, <span class="api-command-ref">en</span>, <span class="api-command-ref">es</span>,<span class="api-command-ref"> fr_CA</span>, <span class="api-command-ref">fr</span>, <span class="api-command-ref">it</span>, <span class="api-command-ref">nl</span>, <span class="api-command-ref">pt</span>, <span class="api-command-ref">sv</span>, <span class="api-command-ref">th</span>, <span class="api-command-ref">ja</span>, <span class="api-command-ref">zh</span>, <span class="api-command-ref">zh_TW</span>, or <span class="api-command-ref">ko</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">locale</span>
                                            </td>
                                            <td>
                                                <p>(Optional, Tableau Cloud only) Locale of the user. </p>
                                                <p>Starting in API&nbsp;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: <span class="api-command-ref">ar_SA</span>, <span class="api-command-ref">ar_AE</span>, <span class="api-command-ref">ar_BH</span>, <span class="api-command-ref">ar_DZ</span>, <span class="api-command-ref">ar_EG</span>, <span class="api-command-ref">ar_IQ</span>, <span class="api-command-ref">ar_JO</span>, <span class="api-command-ref">ar_KW</span>, <span class="api-command-ref">ar_LB</span>, <span class="api-command-ref">ar_LY</span>, <span class="api-command-ref">ar_MA</span>, <span class="api-command-ref">ar_OM</span>, <span class="api-command-ref">ar_QA</span>, <span class="api-command-ref">ar_SD</span>, <span class="api-command-ref">ar_SY</span>, <span class="api-command-ref">ar_TN</span>, <span class="api-command-ref">ar_YE</span>, <span class="api-command-ref">be_BY</span>, <span class="api-command-ref">bg_BG</span>, <span class="api-command-ref">ca_ES</span>, <span class="api-command-ref">cs_CZ</span>, <span class="api-command-ref">da_DK</span>, <span class="api-command-ref">de_DE</span>, <span class="api-command-ref">de_AT</span>, <span class="api-command-ref">de_CH</span>, <span class="api-command-ref">de_LU</span>, <span class="api-command-ref">el_GR</span>, <span class="api-command-ref">el_CY</span>, <span class="api-command-ref">en_US</span>, <span class="api-command-ref">en_AU</span>, <span class="api-command-ref">en_CA</span>, <span class="api-command-ref">en_GB</span>, <span class="api-command-ref">en_IE</span>, <span class="api-command-ref">en_IN</span>, <span class="api-command-ref">en_MT</span>, <span class="api-command-ref">en_NZ</span>, <span class="api-command-ref">en_PH</span>, <span class="api-command-ref">en_SG</span>, <span class="api-command-ref">en_ZA</span>, <span class="api-command-ref">es_ES</span>, <span class="api-command-ref">es_AR</span>, <span class="api-command-ref">es_BO</span>, <span class="api-command-ref">es_CL</span>, <span class="api-command-ref">es_CO</span>, <span class="api-command-ref">es_CR</span>, <span class="api-command-ref">es_DO</span>, <span class="api-command-ref">es_EC</span>, <span class="api-command-ref">es_GT</span>, <span class="api-command-ref">es_HN</span>, <span class="api-command-ref">es_MX</span>, <span class="api-command-ref">es_NI</span>, <span class="api-command-ref">es_PA</span>, <span class="api-command-ref">es_PE</span>, <span class="api-command-ref">es_PR</span>, <span class="api-command-ref">es_PY</span>, <span class="api-command-ref">es_SV</span>, <span class="api-command-ref">es_US</span>, <span class="api-command-ref">es_UY</span>, <span class="api-command-ref">es_VE</span>, <span class="api-command-ref">et_EE</span>, <span class="api-command-ref">fi_FI</span>, <span class="api-command-ref">fr_FR</span>, <span class="api-command-ref">fr_BE</span>, <span class="api-command-ref">fr_CH</span>, <span class="api-command-ref">fr_LU</span>, <span class="api-command-ref">fr_CA</span>, <span class="api-command-ref">ga_IE</span>, <span class="api-command-ref">he_IL</span>, <span class="api-command-ref">hi_IN</span>, <span class="api-command-ref">hr_HR</span>, <span class="api-command-ref">hu_HU</span>, <span class="api-command-ref">id_ID</span>, <span class="api-command-ref">is_IS</span>, <span class="api-command-ref">it_IT</span>, <span class="api-command-ref">it_CH</span>, <span class="api-command-ref">ja_JP</span>, <span class="api-command-ref">ko_KR</span>, <span class="api-command-ref">lt_LT</span>, <span class="api-command-ref">lv_LV</span>, <span class="api-command-ref">mk_MK</span>, <span class="api-command-ref">ms_MY</span>, <span class="api-command-ref">mt_MT</span>, <span class="api-command-ref">nl_NL</span>, <span class="api-command-ref">nl_BE</span>, <span class="api-command-ref">no_NO</span>, <span class="api-command-ref">pl_PL</span>, <span class="api-command-ref">pt_BR</span>, <span class="api-command-ref">pt_PT</span>, <span class="api-command-ref">ro_RO</span>, <span class="api-command-ref">ru_RU</span>, <span class="api-command-ref">sk_SK</span>, <span class="api-command-ref">sl_SI</span>, <span class="api-command-ref">sq_AL</span>, <span class="api-command-ref">sr_RS</span>, <span class="api-command-ref">sr_BA</span>, <span class="api-command-ref">sr_ME</span>, <span class="api-command-ref">sv_SE</span>, <span class="api-command-ref">th_TH</span>, <span class="api-command-ref">tr_TR</span>, <span class="api-command-ref">uk_UA</span>, <span class="api-command-ref">vi_VN</span>, <span class="api-command-ref">zh_CN</span>, <span class="api-command-ref">zh_HK</span>, <span class="api-command-ref">zh_SG</span>, or <span class="api-command-ref">zh_TW</span>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
 <user name="user-name"
    fullName="new-full-name"
    email="new-email"
    siteRole="new-site-role"
    authSetting="new-auth-setting"
	identityPoolName="identity-pool-name"
	idpConfigurationId="idp-configuration-id" />
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table">
                                    <colgroup>
                                        <col class="api-error-table-col-1">
                                        <col class="api-error-table-col-2">
                                        <col class="api-error-table-col-3">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <th>HTTP status</th>
                                            <th><code>error</code> Code</th>
                                            <th>Condition</th>
                                            <th>Details</th>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Bad request</td>
                                            <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400000</td>
                                            <td>Invalid email address</td>
                                            <td>The <span class="api-command-ref">email</span> attribute does not contain a valid email address.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400003</td>
                                            <td>Bad request</td>
                                            <td>The user authentication setting <code>ServerDefault</code> is not supported for you site. Try again using <code>TableauIDWithMFA</code> instead.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400012</td>
                                            <td>Bad request</td>
                                            <td>The user cannot be assigned the Unlicensed role because they are still a member of a group that has
								a minimum site role set.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400217</td>
                                            <td>Unsupported language</td>
                                            <td>The specified language is not valid or not supported.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400218</td>
                                            <td>Unsupported locale</td>
                                            <td>The specified locale is not valid or not supported.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403009</td>
                                            <td>Licensing update on self forbidden</td>
                                            <td>A user cannot update their own licensing role.</td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403009</td>
                                            <td>Guest update forbidden</td>
                                            <td>The Guest user is a special user and cannot be updated.</td>
                                        </tr>
                                        <tr>
                                            <td>400</td>
                                            <td>400013</td>
                                            <td>Invalid site role</td>
                                            <td>
                                                <p>The value of the <span class="api-command-ref">siteRole</span> attribute must be
											<span class="api-command-ref">Creator</span>,
											<span class="api-command-ref">Explorer</span>,
											<span class="api-command-ref">ExplorerCanPublish</span>,
											<span class="api-command-ref">ServerAdministrator</span>,
											<span class="api-command-ref">SiteAdministratorExplorer</span>,
											<span class="api-command-ref">SiteAdministratorCreator</span>,
											<span class="api-command-ref">Unlicensed</span>,
											or
										<span class="api-command-ref">Viewer</span>.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403193</td>
                                            <td>Forbidden</td>
                                            <td>A non-administrator user called this method or doesn't have permissions to update language for the user. </td>
                                        </tr>
                                        <tr>
                                            <td>403</td>
                                            <td>403194</td>
                                            <td>Forbidden</td>
                                            <td>A non-administrator user called this method or doesn't have permissions to update locale for the user. </td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404000</td>
                                            <td>Site not found</td>
                                            <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                        </tr>
                                        <tr>
                                            <td>404</td>
                                            <td>404002</td>
                                            <td>User not found</td>
                                            <td>The user ID in the URI doesn't correspond to an existing user.</td>
                                        </tr>
                                        <tr>
                                            <td>405</td>
                                            <td>405000</td>
                                            <td>Invalid request method</td>
                                            <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409000</td>
                                            <td>User conflict</td>
                                            <td>The user with the specified name is already registered on the site in the same domain.</td>
                                        </tr>
                                        <tr>
                                            <td>409</td>
                                            <td>409014</td>
                                            <td>Licensing conflict</td>
                                            <td>The request is attempting to update the user to a licensing role that has insufficient capacity.</td>
                                        </tr>
                                        <tr>
                                            <td>500</td>
                                            <td>500109</td>
                                            <td>Internal language error</td>
                                            <td>The language request could not be completed.</td>
                                        </tr>
                                        <tr>
                                            <td>500</td>
                                            <td>500110</td>
                                            <td>Internal locale error</td>
                                            <td>The locale request could not be completed.</td>
                                        </tr>
                                    </tbody>
                                </table>

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

## Update User Notification Preferences

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

#### URI

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

#### Parameter Values

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

#### Request Body

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

#### Attribute Values

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


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

#### Permissions

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

#### Access Scope

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

```
tableau:user_notifications:update
```

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

#### Response Code

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

#### Response Body

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

#### Version

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

#### Errors

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

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

#### Example response

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

## Update 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

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

#### Request Body

_(Use the icon in the top right corner to copy the text.)_

```
<tsRequest>
  <virtualConnection name="virtualconnection-name"
    isCertified="certified-flag"
    certificationNote="certification-message">
    <project id="project-id"/>
    <owner id="owner-id"/>
  </virtualConnection>
</tsRequest>
```

_(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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">virtualconnection-name</span>
                                            </td>
                                            <td>The name of the virtual connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">certification-flag</span>
                                            </td>
                                            <td>Boolean. If true, the virtual connection is certified. If false, it won't.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">certification-message</span>
                                            </td>
                                            <td>The certification label's message.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">project-id</span>
                                            </td>
                                            <td>The LUID of the project the virtual connection is located in.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">owner-id</span>
                                            </td>
                                            <td>
                                                <p>The LUID of the user that owns the virtual connection.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

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.)_

```
<tsRequest>
  <virtualConnection name="Batters"
    isCertified="true"
    certificationNote="Approved by Marketing">
    <project id="1f2f3e4e-5d6d-7c8c-9b0b-1a2a3f4f5e6e"/>
    <owner id="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d"/>
  </virtualConnection>
</tsRequest>
```

#### Response Code

200

#### Response Body

```
<tsResponse>
  <virtualConnection id="virtualconnection-id"
    isCertified="certified-flag"
    name="virtualconnection-name">
    <project id="project-id"/>
    <owner id="owner-id"/>
  </virtualConnection>
</tsResponse>
```

```
{
  "virtualConnection": {
    "project": {
      "id": "project-id"
    },
    "owner": {
      "id": "owner-id"
    },
    "id": "virtualconnection-id",
    "isCertified": certified-flag,
    "name": "virtualconnection-id"
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400203</td><td>Generic error</td><td>An unknown error occurred.</td></tr><tr><td>403</td><td>403004</td><td>User not authorized to change virtual connection</td><td>Check to make sure the user has the required permissions.</td></tr><tr><td>403</td><td>403176</td><td>User not authorized to change virtual connection's owner</td><td>Check to make sure the user has the required permissions.</td></tr><tr><td>403</td><td>403177</td><td>User not authorized to move assets into the target project.</td><td>Check to make sure the user has the required permissions.</td></tr><tr><td>403</td><td>403178</td><td>User not authorized to move the virtual connection</td><td>Check to make sure the user has the required permissions.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found</td><td>Check the virtual connection LUID.</td></tr><tr><td>409</td><td>409124</td><td>A virtual connection with the chosen name already exists in the project.</td><td>Try a different virtual connection name.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The LUID for the site that contains the virtual connection.</td></tr><tr><td><span class="api-placeholder">virtual-connection-id</span></td><td>The LUID for the virtual connection that includes the database connections.</td></tr><tr><td><span class="api-placeholder">connection-id</span></td><td>The ID of the database connection. To determine what connections are in a virtual connection, call <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_virtual_connections.htm#ref_list_virtual_connection_database_connections" target="_blank">List Virtual Connection Database Connections</a>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest> <connection   serverAddress="server-address"   serverPort="port-number"   userName="test"   password="password" /></tsRequest>
```

```
{  "connection": {    "serverAddress": "server-address",    "serverPort": "port-number",    "userName": "test",    "password": "password"  }}
```

#### Request Attributes

<table class="api-parameters-table"><colgroup><col style="width:36%;"> <col></colgroup><tbody><tr><td><code>connection serverAddress</code></td><td>The new server for the database connection.</td></tr><tr><td><code>connection serverPort</code></td><td>The new port for the database connection</td></tr><tr><td><code>connection userName</code></td><td>The new username for the database connection.</td></tr><tr><td><code>connection password</code></td><td>The new password for the database connection.</td></tr></tbody></table>

#### 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

```
<tsResponse>  <virtualConnectionConnections>    <connection       id="connection-id"       serverAddress="server-address"       serverPort="port-number"      userName="connection-user-name"      password="password"/>  </virtualConnectionConnections></tsResponse>
```

Copy

```
{  "virtualConnectionConnections": {    "connection": {      "id": "connection-id",      "serverAddress": "server-address",      "serverPort": "port-number",      "userName": "connection-user-name",      "password": "password"    }  }}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403004</td><td>Operation unauthorized</td><td>The user isn’t authorized to perform the task.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>PUT</b>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

The request body is an empty tsRequest element.

```
<tsRequest/>
```

```
{}
```

#### 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 '<tsRequest/>'
```

#### Response Code

202

#### Response Body

```
<tsResponse>
  <job id="job-id" mode="Asynchronous" type="RefreshExtract" createdAt="date-time">
    <extractRefreshJob>
      <virtualConnection id="virtualconnection-id" name="virtualconnection-name" />
    </extractRefreshJob>
  </job>
</tsResponse>
```

```
{
  "job": {
    "id": "job-id",
    "mode": "Asynchronous",
    "type": "RefreshExtract",
    "createdAt": "date-time",
    "extractRefreshJob": {
      "virtualConnection": {
        "id": "virtualconnection-id",
        "name": "virtualconnection-name"
      }
    }
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>403180</td><td>Full refresh not allowed.</td><td>A full refresh extract operation is not allowed for the virtual connection.</td></tr><tr><td>400</td><td>403181</td><td>Incremental refresh not allowed.</td><td>The request specified an incremental refresh, but an incremental refresh extract operation is not allowed for the virtual connection.</td></tr><tr><td>400</td><td>409090</td><td>No extract-eligible tables.</td><td>The virtual connection has no active revision or no extract-eligible tables. Live tables are not refreshed.</td></tr><tr><td>403</td><td>403199</td><td>User not authorized to refresh the virtual connection.</td><td>The user must have either the Manage Extract or the Allow Extract Refresh permission on the virtual connection.</td></tr><tr><td>403</td><td>409082</td><td>Run Now is disabled for the site.</td><td>Enable Run Now for the site, then try the request again.</td></tr><tr><td>404</td><td>404049</td><td>Virtual connection not found.</td><td>Check the virtual connection LUID.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed.</td><td>Direct virtual connection extract refresh is not enabled for this site.</td></tr><tr><td>409</td><td>409093</td><td>Operation already in queue.</td><td>An extract refresh job for the virtual connection is already in the queue.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use. These TDS Edit methods are available in API 3.30 and later. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID of the site in the URI. This handler does not bind the path variable — the service uses the authenticated user's site LUID (<code>authUser.getSiteLuid()</code>).</td></tr><tr><td><span class="api-placeholder">workcopy-luid</span></td><td>The LUID of the work copy. Must be a UUID (8-4-4-4-12 hexadecimal digits), matching <code>[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}</code>.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <tdsElementList>
    <elementType>Column</elementType>
    <name>Sales</name>
    <column>
      <caption>Total Sales</caption>
    </column>
  </tdsElementList>
  <tdsElementList>
    <elementType>FieldDescription</elementType>
    <name>Sales</name>
    <description>Total sales amount, revised.</description>
  </tdsElementList>
</tsRequest>
```

```
{
  "tdsElementList": [
    {
      "elementType": "Column",
      "name": "Sales",
      "column": {
        "caption": "Total Sales"
      }
    },
    {
      "elementType": "FieldDescription",
      "name": "Sales",
      "description": "Total sales amount, revised."
    }
  ]
}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsElementList[]</span></td><td>Required. Elements to update. Must contain at least one element. An empty or missing list is HTTP 400 with error code <code>400008</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].elementType</span></td><td>Optional. Element type sent to the TDS service. For this operation, use <code>Column</code>, <code>FieldDescription</code>, or <code>TableDescription</code>. Any other value is forwarded and reported as a per-element failure.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].name</span></td><td>Required. Element name.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column</span></td><td>Used when <code>elementType</code> is <code>Column</code>. At most one of <code>caption</code>, <code>type</code>, and <code>role</code> 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.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.caption</span></td><td>Optional. The caption to set.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.role</span></td><td>Optional. An accepted <code>FieldRole</code> constant other than <code>FIELD_ROLE_UNKNOWN</code> or <code>UNRECOGNIZED</code> — either of those is rejected as HTTP 400 with error code <code>400008</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].column.type</span></td><td>Optional. An accepted <code>FieldType</code> constant other than <code>FIELD_TYPE_UNKNOWN</code> or <code>UNRECOGNIZED</code> — either of those is rejected as HTTP 400 with error code <code>400008</code>.</td></tr><tr><td><span class="api-placeholder">tdsElementList[].description</span></td><td>Used when <code>elementType</code> is <code>FieldDescription</code> or <code>TableDescription</code>. Description text to set. When <code>description</code> is null, the field is left unset so the TDS service can report a per-element failure instead of HTTP 500.</td></tr></tbody></table>

#### 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.

```
<tsResponse/>
```

```
{}
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">tdsElementResult[]</span></td><td>Failed elements only. Omitted on full success, including omitted rather than returned as an empty array.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].elementType</span></td><td>Required. Element type of the failed element, copied from the request.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].name</span></td><td>Required. Name of the failed element, copied from the request.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status</span></td><td>Required. Failure status for this element.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status.code</span></td><td>Required (within <code>status</code>). The translated HTTP status for this element (200, 400, 401, 403, 404, 409, 500, or 503). Not a Tableau 6-digit error sub-code.</td></tr><tr><td><span class="api-placeholder">tdsElementResult[].status.message</span></td><td>Optional. Error message from the TDS service.</td></tr></tbody></table>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400008</td><td>Missing tdsElementList</td><td><code>tdsElementList</code> is missing or empty. The list is required and must contain at least one element.</td></tr><tr><td>400</td><td>400008</td><td>Invalid column type or role</td><td><code>type</code> or <code>role</code> is not an accepted field type or role. <code>FIELD_TYPE_UNKNOWN</code>, <code>FIELD_ROLE_UNKNOWN</code>, and <code>UNRECOGNIZED</code> are rejected. The accepted names are not in the staged sources.</td></tr><tr><td>400</td><td></td><td>Column update sets more than one field</td><td>A column update may set at most one of <code>caption</code>, <code>type</code>, or <code>role</code>.</td></tr><tr><td>400</td><td></td><td>Invalid work copy LUID</td><td>The work copy LUID in the URI is not a UUID (8-4-4-4-12 hexadecimal digits).</td></tr><tr><td>400</td><td></td><td>Per-element invalid argument</td><td>One or more elements were rejected as invalid. The body lists only the failed elements, and each <code>status.code</code> is the HTTP status 400.</td></tr><tr><td>400</td><td></td><td>Unmapped per-element gRPC status</td><td>The TDS service returned a status that maps to HTTP 400. The body lists only the failed elements.</td></tr><tr><td>401</td><td>401000 / 401002</td><td>Missing or invalid authentication</td><td>No authentication token provided, or token is expired or invalid.</td></tr><tr><td>401</td><td></td><td>Per-element unauthenticated</td><td>The TDS service rejected an element as unauthenticated. The body lists only the failed elements.</td></tr><tr><td>403</td><td>403004</td><td>Data Management Bundle not licensed</td><td>On Tableau Server the TDS Edit API requires a Data Management Bundle license. The call is rejected when that license is absent.</td></tr><tr><td>403</td><td>403004</td><td>Unable to resolve tenant</td><td>On Tableau Cloud the subscription could not be checked because the tenant id for the site could not be retrieved.</td></tr><tr><td>403</td><td>403004</td><td>No cloud entitlements</td><td>On Tableau Cloud no entitlements were found for the tenant. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td>403004</td><td>Subscription not entitled</td><td>On Tableau Cloud the site edition is not Tableau+. The TDS Edit API requires a Tableau+ subscription.</td></tr><tr><td>403</td><td></td><td>Per-element permission denied</td><td>The TDS service rejected an element because permission was denied. The body lists only the failed elements.</td></tr><tr><td>404</td><td></td><td>Per-element not found</td><td>One 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.</td></tr><tr><td>405</td><td>405000</td><td>Method not allowed</td><td>The HTTP method is not supported for this resource.</td></tr><tr><td>409</td><td></td><td>Per-element already exists</td><td>One or more elements already exist. The body lists only the failed elements.</td></tr><tr><td>429</td><td>429000</td><td>Rate limit exceeded</td><td>Too many requests sent in a given time period.</td></tr><tr><td>500</td><td></td><td>Per-element internal error</td><td>The TDS service failed while editing an element. The body lists only the failed elements.</td></tr><tr><td>503</td><td></td><td>Per-element unavailable</td><td>The TDS service was unavailable while editing an element. The body lists only the failed elements.</td></tr></tbody></table>

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

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook to update.</td></tr><tr><td><span class="api-placeholder">include-view-acceleration-status-flag</span></td><td><i>Query parameter is optional. Boolean:</i> If <code>includeViewAccelerationStatus=true</code> then the list of views and the acceleration status of each view will be returned.</td></tr></tbody></table>

#### Request Body

Copy

```
<tsRequest>   <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"/>        </views>      <dataAccelerationConfig         accelerationEnabled="false"         accelerateNow="false" />      <dataFreshnessPolicy option="FreshAt">        <freshAtSchedule frequency="weekly" time="08:15:00" timezone="America/Los_Angeles">          <intervals>            <interval weekDay="Monday" />          </intervals>        </freshAtSchedule>        </dataFreshnessPolicy>  </workbook> </tsRequest>
```

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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col style="column-width: 30;width: 212px;">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>workbook name</code>
                                            </td>
                                            <td>(Optional) New name for the workbook being updated.</td>
                                        </tr>
                                        <tr>
                                            <td><code>workbook showTabs</code>
                                            </td>
                                            <td>(Optional) Specify <span class="api-command-ref">true</span> to have the updated workbook show views in tabs; otherwise,
								<span class="api-command-ref">false</span>. The default is <span class="api-command-ref">false</span>.</td>
                                        </tr>
                                        <tr>
                                            <td><code>workbook recentlyViewed</code>
                                            </td>
                                            <td>(Optional) Set this value to <span class="api-command-ref">true</span> to have the updated workbook show in the site's recently viewed list.
								The default is <span class="api-command-ref">false</span>. Once the flag is set to <span class="api-command-ref">true</span>, setting it to
								<span class="api-command-ref">false</span> 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 <span class="api-command-ref">recently-viewed-flag</span> will revert to <span class="api-command-ref">false</span>.</td>
                                        </tr>
                                        <tr>
                                            <td><code>workbook encryptExtracts</code>
                                            </td>
                                            <td>(Optional) <b>true</b> to encrypt the extracts or <b>false</b> to not encrypt extracts. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_extract_and_encryption.htm" class="xref">Extract and Encryption Methods</a>.</td>
                                        </tr>
                                        <tr>
                                            <td><code>workbook description</code>
                                            </td>
                                            <td>(Optional) Starting in API&nbsp;3.20, the new description for the updated workbook.</td>
                                        </tr>
                                        <tr>
                                            <td><code>project id</code>
                                            </td>
                                            <td>(Optional) The LUID of a project to assign the workbook to.</td>
                                        </tr>
                                        <tr>
                                            <td><code>owner id</code>
                                            </td>
                                            <td>(Optional) The LUID of a user to assign the workbook to as owner.</td>
                                        </tr>
                                        <tr>
                                            <td><code>dataAccelerationConfig accelerationEnable</code>
                                            </td>
                                            <td>(Optional) Boolean: If <code>true</code>, accelerate the specified view(s). Default is <code>false</code>. <i>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.</i></td>
                                        </tr>
                                        <tr>
                                            <td><code>dataAccelerationConfig accelerateNow</code>
                                            </td>
                                            <td>
                                                <p>
								(Optional) Boolean: If <code>true</code>, make view acceleration available as soon as possible.
								Default is <code>false</code>. <i>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.</i></p>
                                                <p>
                                Note, the <code>view</code> object in the response (visible by using the <code>?includeViewAccelerationStatus=true</code>
                                query parameter) contains the <code>accelerationStatus</code> attribute, which can have the following values:
                                </p>
                                                <ul>
                                                    <li><code>Off</code> - Accelerate now is not enabled.</li>
                                                    <li><code>Pending</code> - Accelerate now is enabled, but backgrounder processes
                                        are still running to make the acceleration available.</li>
                                                    <li><code>On</code> Acceleration is enabled.</li>
                                                </ul>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>view id</code>
                                            </td>
                                            <td>(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.</td>
                                        </tr>
                                        <tr>
                                            <td><code>dataFreshnessPolicy option</code>
                                            </td>
                                            <td>(Optional) Enum: The <a href="https://help.tableau.com/current/online/en-us/data_freshness_policy.htm" target="_blank" rel="noopener"> data freshness policy</a> mode for
								scheduling refreshment of the workbook data specified in the request. A valid value is one of:
								<ul><li><code>SiteDefault</code> - Use the default scheduling policy: refresh the data every 12 hours).</li><li><code>AlwaysLive</code> - Refresh as the data changes.</li><li><code>FreshAt</code> - Define a detailed cadence for refreshing the data.</li><li><code>FreshEvery</code>- Define an interval between data refreshes.</li></ul></td>
                                        </tr>
                                        <tr>
                                            <td><code>freshAtSchedule frequency</code>
                                            </td>
                                            <td>(Optional) Enum: The interval of workbook data refresh. A valid value is one of:
								<ul><li><code>Day</code></li><li><code>Week</code></li><li><code>Month</code></li></ul></td>
                                        </tr>
                                        <tr>
                                            <td><code>freshAtSchedule time</code>
                                            </td>
                                            <td>(Optional) Time in <code>HH:MM:SS</code>:  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 <code>time="10:30:00".</code></td>
                                        </tr>
                                        <tr>
                                            <td><code>freshAtSchedule timeZone</code>
                                            </td>
                                            <td>(Optional) Timezone string in IANA format: The timezone of the fresh at schedule time.
								For instance, <code>timezone="America/Los_Angeles"</code>. If no timezone is provided, then
								the local timezone of the Tableau server is used."
							</td>
                                        </tr>
                                        <tr>
                                            <td><code>freshAtSchedule intervals interval</code>
                                            </td>
                                            <td>A value that specifies the interval between refreshes of view acceleration data.
								The value you specify here depends on the
									value specified in <code>freshAtSchedule frequency</code>.
									<p><strong><code>Day</code></strong></p><p>
                                        If the schedule frequency is <code>Daily</code>, no interval is specified. Any information specified
									    in the <span class="api-command-ref">&lt;intervals&gt;</span> element is ignored.</p><p><strong><code>Week</code></strong></p><p>
                                        The interval expression is <code>weekDay="<span class="api-placeholder">weekday</span>"</code>, where
                                        <span class="api-placeholder">weekday</span> is <code>Sunday</code>, <code>Monday</code>, <code>Tuesday</code>,
                                        <code>Thursday</code>, <code>Friday</code>, or specify multiple <span class="api-command-ref">&lt;interval&gt;</span>
                                        elements to indicate that scheduled jobs should run on multiple days during the week.</p><p><strong><code>Month</code></strong></p><p>The interval expression is
                                        <code>monthDay="<span class="api-placeholder">day</span>"</code>, where
                                        <span class="api-placeholder">day</span> is either the day of the month (<code>1</code>, <code>2</code>, etc.) or <code>LastDay</code>.
									</p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">freshEverySchedule frequency</span>
                                            </td>
                                            <td>(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 <span class="api-placeholder">freshEverySchedule value</span>.
								A valid value is one of:
								<ul><li><code>Minutes</code></li><li><code>Hours</code></li><li><code>Days</code></li><li><code>Weeks</code></li></ul></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">freshEverySchedule value</span>
                                            </td>
                                            <td>
								(Optional) Integer: The quantity of frequency units between view acceleration data refreshes. For instance,
								to specify a refresh every 4 hours, the <code>dataFreshnessPolicy</code> would look like:
								</td>
                                        </tr>
                                        <tr>
                                            <td colspan="2">
                                                <table class="api-parameters-table">
                                                    <colgroup>
                                                        <col style="column-width: 50;">
                                                        <col style="column-width: 50;">
                                                    </colgroup>
                                                    <tbody>
                                                        <tr>
                                                            <td>XML</td>
                                                            <td>JSON</td>
                                                        </tr>
                                                        <tr>
                                                            <td>
                                                                <div class="codeSnippet"><a class="codeSnippetCopyButton" role="button">Copy</a>
                                                                    <div class="codeSnippetBody"><pre><code>&lt;dataFreshnessPolicy option="FreshEvery"&gt;<br>&nbsp;&nbsp;&lt;freshEverySchedule&nbsp;<br>&nbsp;&nbsp;frequency="hours"&nbsp;<br>&nbsp;&nbsp;value="4" /&gt;<br>&nbsp;&nbsp;&lt;/dataFreshnessPolicy&gt;<br></code></pre>
                                                                    </div>
                                                                </div>
                                                            </td>
                                                            <td>
                                                                <div class="codeSnippet"><a class="codeSnippetCopyButton" role="button">Copy</a>
                                                                    <div class="codeSnippetBody"><pre><code>"dataFreshnessPolicy": {<br>&nbsp;&nbsp;"option": "FreshEvery",<br>&nbsp;&nbsp;"freshEverySchedule": {<br>&nbsp;&nbsp;"frequency": "hours",<br>&nbsp;&nbsp;"value": 4"<br>&nbsp;&nbsp;}<br>}<br></code></pre>
                                                                    </div>
                                                                </div>
                                                            </td>
                                                        </tr>
                                                    </tbody>
                                                </table>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

With the exception of `dataFreshnessPolicy options`, any combination of the elements inside the <workbook> 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 <project> element is included, the id attribute must be included; other attributes of the <project> element are ignored.

If the <owner> element is included, the id attribute must be included; other attributes of the <owner> 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 "<tsRequest> <workbook > <dataAccelerationConfig accelerationEnabled='true' accelerateNow='true' /> <dataFreshnessPolicy option='FreshEvery'> <freshAtSchedule frequency='Week' time='08:15:00' timezone='America/Los_Angeles'> <intervals> <interval weekDay='Monday' /> </intervals> </freshAtSchedule> </dataFreshnessPolicy> </workbook> </tsRequest>"`

#### Response Code

200

#### Response Body

Copy

```
<tsResponse>  <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"/>          </view>        </views>      <dataFreshnessPolicy option="freshAt"/>          <freshAtSchedule />            <intervals>              <interval weekDay="Monday"            </intervals>      </dataFreshnessPolicy>  </workbook></tsResponse>
```

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:

<table style="width: 100%;">
                                    <colgroup><col>
                                    <col>
                                    </colgroup><tbody>
                                        <tr>
                                            <td>XML</td>
                                            <td>JSON</td>
                                        </tr>
                                        <tr>
                                            <td>
                                                <div class="codeSnippet"><a class="codeSnippetCopyButton" role="button">Copy</a>
                                                    <div class="codeSnippetBody"><pre><code>&lt;dataFreshnessPolicy option="FreshEvery"&gt;<br>&nbsp;&nbsp;&lt;freshEverySchedule&nbsp;<br>&nbsp;&nbsp;frequency="Weeks"&nbsp;<br>&nbsp;&nbsp;value="1" /&gt;<br>&nbsp;&nbsp;&lt;/dataFreshnessPolicy&gt;<br></code></pre>
                                                    </div>
                                                </div>
                                            </td>
                                            <td>
                                                <div class="codeSnippet"><a class="codeSnippetCopyButton" role="button">Copy</a>
                                                    <div class="codeSnippetBody"><pre><code>"dataFreshnessPolicy": {<br>&nbsp;&nbsp;"option": "FreshEvery",<br>&nbsp;&nbsp;"freshEverySchedule": {<br>&nbsp;&nbsp;"frequency": "Weeks",<br>&nbsp;&nbsp;"value": 1"<br>&nbsp;&nbsp;}<br>}<br></code></pre>
                                                    </div>
                                                </div>
n                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>400036</td><td>Bad request</td><td>View acceleration is enabled, but the workbook loads too quickly to make use of it, or the view has never been accessed by a user.</td></tr><tr><td>403</td><td>403025</td><td>Project update forbidden</td><td>A non-administrator user tried to change the workbook project, but the caller doesn't have <span class="api-command-ref">Write</span> permission for the target project.</td></tr><tr><td>403</td><td>403027</td><td>Owner update forbidden</td><td>A non-administrator user tried to change the workbook owner.</td></tr><tr><td>403</td><td>403027</td><td>Update forbidden</td><td>A non-administrator user tried to change the workbook, but the caller doesn't have <span class="api-command-ref">Write</span> permission for the workbook.</td></tr><tr><td>403</td><td>403004</td><td>Update forbidden</td><td>A non-administrative user tried to update the workbook, but does not have permissions to publish the updated workbook to the project.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>Owner not found</td><td>The owner ID in the request body doesn't correspond to an existing user.</td></tr><tr><td>404</td><td>404005</td><td>Project not found</td><td>The project ID in the URI doesn't match the project ID provided in the request body.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <connection
   serverAddress="server-address" serverPort="port"
	authenticationType="auth-type"
	userName="connection-username" password="connection-password"
   embedPassword="embed-password"
   queryTaggingEnabled="query-tagging-enabled" />
</tsRequest>
```

```
{
  "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 <connection> element is valid. If no attributes are included, no update is made.

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td class="api-placeholder"><span class="api-placeholder">serverAddress</span>
                                            </td>
                                            <td>The new server for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">port</span>
                                            </td>
                                            <td>The new port for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">authenticationType</span>
                                            </td>
                                            <td>
								Added in version 3.27.
                                <p>*The new authentication type for the connection.</p><p>Standard values:</p><ul><li><p><code>auth-user-pass</code>:&nbsp;username and password</p></li><li><p><code>oauth</code></p></li><li><p><code>auth-keypair</code>:&nbsp;keypair authentication</p></li></ul><p>Connector-specific values:</p><ul><li><p><code>sqlserver</code>:&nbsp;SQL&nbsp;Server username and password</p></li><li><p><code>Azure AD Password</code></p></li><li><p><code>AD Service Principal</code></p></li><li><p><code>username-password</code>:&nbsp;Several connectors use this value. For example, SAP&nbsp;HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.</p></li></ul><p>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_sources" target="_blank">Query Datasource Connections</a> or <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbook_connections" target="_blank">Query Workbook Connections</a>, which returns the authentication type string in the response. </p><p>Alternatively,  you can inspect the <code>&lt;connection&gt;</code> element in the XML of a workbook or data source which is available locally. Look for the value of the <code>authentication</code> attribute of the connection. </p></td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">userName</span>
                                            </td>
                                            <td>The new username for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">password</span>
                                            </td>
                                            <td>The new password for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">embedPassword</span>
                                            </td>
                                            <td><code>True</code> to embed the password; otherwise, <code>False</code>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">queryTaggingEnabled</span>
                                            </td>
                                            <td>
                                                <blockquote><p>[!WARNING]</p><p>Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the <code>queryTaggingEnabled</code> attribute is deprecated,
									will no longer be supported, and may be retired in future releases.<br><br>Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by
									setting <a href="https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#native_apiUserInfoInGeneratedSQLEnabled" target="_blank"><code>native_api.UserInfoInGeneratedSQLEnabled</code></a> to <code>true</code>.</p></blockquote>
                                                <p>For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) or earlier: If <code>true</code>, query tagging is enabled. If <code>false</code>, query tagging is disabled. The default is <code>false</code>.</p>
                                                <p>For more information on query tagging, see 	<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_how_to_query_tagging.htm" target="_blank" class="xref">Understand Workbook Impact on Your Database Using Query Tagging</a>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <connection id="connection-id"
	authenticationType="auth-type"
	serverAddress="server-address" serverPort="port"
	userName="connection-user-name"
	queryTaggingEnabled="query-tagging-enabled" />
</tsResponse>
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403029</td><td>Update forbidden</td><td>A non-administrator user tried to update the workbook connection, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook ID in the URI doesn't correspond to an existing workbook.</td></tr><tr><td>404</td><td>404020</td><td>Connection not found</td><td>The connection ID in the URI doesn't correspond to an existing connection.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

```
<tsRequest>
  <connectionLuids>
<connectionLuid>Luid1</connectionLuid>
<connectionLuid>Luid2</connectionLuid>
  </connectionLuids>
  <connection
    serverAddress="newAddress"
    serverPort="newPort"
    authenticationType="new Auth Type"
    userName="Jane Doe"
    password="xxxxxx"
    embedPassword="false"
    queryTaggingEnabled="false" />
  </tsRequest>
```

```
{
  "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 <connection> element is valid. If no attributes are included, no update is made.

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1-extra-wide">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><span class="api-placeholder">connectionLuids</span>
                                            </td>
                                            <td>An array of connection LUIDs in the workbook that you are updating.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">serverAddress</span>
                                            </td>
                                            <td> The new server for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">serverPort</span>
                                            </td>
                                            <td> The new port for the connection</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">authenticationType</span>
                                            </td>
                                            <td>
                                                <p>*The new authentication type for the connection.</p>
                                                <p>Standard values:</p>
                                                <ul>
                                                    <li>
                                                        <p><code>auth-user-pass</code>:&nbsp;username and password</p>
                                                    </li>
                                                    <li>
                                                        <p><code>oauth</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>auth-keypair</code>:&nbsp;keypair authentication</p>
                                                    </li>
                                                </ul>
                                                <p>Connector-specific values:</p>
                                                <ul>
                                                    <li>
                                                        <p><code>sqlserver</code>:&nbsp;SQL&nbsp;Server username and password</p>
                                                    </li>
                                                    <li>
                                                        <p><code>Azure AD Password</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>AD Service Principal</code>
                                                        </p>
                                                    </li>
                                                    <li>
                                                        <p><code>username-password</code>:&nbsp;Several connectors use this value. For example, SAP&nbsp;HANA, SAP Sybase ASE, SAP NetWeaver Business Warehouse (BW), Denodo, and Salesforce.</p>
                                                    </li>
                                                </ul>
                                                <p>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 <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_data_sources.htm#query_data_sources" target="_blank">Query Datasource Connections</a> or <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_workbooks_and_views.htm#query_workbook_connections" target="_blank">Query Workbook Connections</a>, which returns the authentication type string in the response. </p>
                                                <p>Alternatively,  you can inspect the <code>&lt;connection&gt;</code> element in the XML of a workbook or data source which is available locally. Look for the value of the <code>authentication</code> attribute of the connection. </p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">userName</span>
                                            </td>
                                            <td>The new username for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">password</span>
                                            </td>
                                            <td>The new password for the connection.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">embedPassword</span>
                                            </td>
                                            <td><code>True</code> to embed the password; otherwise, <code>False</code>.</td>
                                        </tr>
                                        <tr>
                                            <td><span class="api-placeholder">queryTaggingEnabled</span>
                                            </td>
                                            <td>
                                                <blockquote><p>[!WARNING]</p><p>Starting with API 3.23 (Tableau Cloud June 2024 / Server 2024.2), the <code>queryTaggingEnabled</code> attribute is deprecated,
									will no longer be supported, and may be retired in future releases.<br><br>Instead, for Tableau Server, use TSM to enable query tagging for all content on a server by
								setting <a href="https://help.tableau.com/current/server/en-us/cli_configuration-set_tsm.htm#native_apiUserInfoInGeneratedSQLEnabled" target="_blank"><code>native_api.UserInfoInGeneratedSQLEnabled</code></a> to <code>true</code>.</p></blockquote>
                                                <p>For API 3.22 (Tableau Cloud February 2024 / Server 2024.1) and earlier: If <code>true</code>, query tagging is enabled. If <code>false</code>, query tagging is disabled. The default is <code>false</code>.</p>
                                                <p>For more information on query tagging, see 	<a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_how_to_query_tagging.htm" target="_blank" class="xref">Understand Workbook Impact on Your Database Using Query Tagging</a>.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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

```
<tsResponse>
  <connection id="12ab34cd-56ef-78ab-90cd-12ef34ab56cd"
	serverAddress="database.example.com"
	serverPort="12345"
	authenticationType="new Auth Type"
	userName="jajohnson"
	queryTaggingEnabled="false" />
</tsResponse>
```

```
{
  "connection": {
	"id": "12ab34cd-56ef-78ab-90cd-12ef34ab56cd",
	"serverAddress": "database.example.com",
	"serverPort": "12345",
	"authenticationType": "new Auth Type",
	"userName": "jajohnson",
	"queryTaggingEnabled": "false"
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>403</td><td>403023</td><td>Update forbidden</td><td>A non-administrator user tried to update a data source, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403027</td><td>Owner update forbidden</td><td>A non-administrator user tried to change connection information, but the caller doesn't have <span class="api-command-ref">Write</span> permission.</td></tr><tr><td>403</td><td>403062</td><td>Unsupported operation</td><td>The data source contains multiple connections, but the URI did not include <code>/connections/<span class="api-placeholder">connection-id</span></code> to indicate which connection should be updated.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404004</td><td>Data source not found</td><td>The data source ID in the URI doesn't correspond to an existing data source.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

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

## 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

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

#### Request Body

As of version 3.28, you can specify an incremental refresh on extracts by updating the request body as follows:

```
<tsRequest>
	<extractRefresh incremental="true">
	</extractRefresh>
</tsRequest>
```

#### 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

```
<tsResponse>
  <job id="job-id" mode="Asynchronous" type="RefreshExtract" createdAt="date-time">
    <extractRefreshJob>
      <workbook id="workbook-id" name="workbook-name" incremental="true" />
    </extractRefreshJob>
  </job>
</tsResponse>
```

#### Version

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

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>401</td><td>401000</td><td>Unauthorized Access</td><td>The authentication token provided in the request header was invalid or has expired.</td></tr><tr><td>403</td><td>403032</td><td>Update Forbidden</td><td>A non-administrator user attempted to query workbook views, but the caller doesn't have sufficient permissions.</td></tr><tr><td>403</td><td>403004</td><td>Update forbidden</td><td>A non-administrative user tried to update the workbook, but does not have permissions to publish the updated workbook to the project.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI is unknown.</td></tr><tr><td>404</td><td>404006</td><td>Resource not found</td><td>The workbook ID in the URI is unknown.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr><tr><td>409</td><td>409093</td><td>Operation already in Queue</td><td>The extract refresh job is already in the queue.</td></tr></tbody></table>

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

#### Example

`curl "http://MY-SERVER/api/3.29/sites/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:**

```
<tsRequest>
</tsRequest>
```

**Example response:**

```
<tsResponse xmlns="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api http://tableau.com/api/ts-api-2.8.xsd">
  <job id="20cf4ddc-6d73-4733-89ec-8d336669bd56" mode="Asynchronous" type="RefreshExtract" createdAt="2017-12-06T22:58:52Z">
    <extractRefreshJob>
      <workbook id="5de9cc53-b17d-45af-804d-49144b39f29f" name="Regional" />
    </extractRefreshJob>
  </job>
</tsResponse>
```

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook.</td></tr><tr><td><span class="api-placeholder">workbook-id</span></td><td>The ID of the workbook.</td></tr></tbody></table>

#### 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

```
<tsResponse>
  <job id="job-id" mode="Asynchronous" type="RefreshThumbnails" createdAt="date-time">
    <thumbnailsRefreshJob>
      <workbook id="workbook-id" name="workbook-name" />
    </thumbnailsRefreshJob>
  </job>
</tsResponse>
```

```
{
  "job": {
    "thumbnailsRefreshJob": {
      "workbook": {
        "id": "workbook-id",
        "name": "workbook-name"
      }
    },
    "id": "job-id",
    "mode": "Asynchronous",
    "type": "RefreshThumbnails",
    "createdAt": "date-time"
  }
}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Generic error</td><td>An unknown error occurred. The content of the request body may be missing or incomplete, or may contain malformed XML.</td></tr><tr><td>403</td><td>403179</td><td>Permissions error</td><td>The user calling the method isn't a site administrator, server administrator, or owner of the workbook.</td></tr><tr><td>404</td><td>404006</td><td>Workbook not found</td><td>The workbook LUID is invalid, or the user doesn't have permission to read the workbook.</td></tr><tr><td>500</td><td>500000</td><td>Internal server error</td><td>The server was unable to create the job.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">datasource-luid</span></td><td>The LUID of the data source to download the encrypted keychain from.</td></tr></tbody></table>

#### Request Body

```

<tsRequest>
  <associatedUserLuidMapping/>
  <encryptedKeychainList>
    <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=</encryptedKeychain>
  </encryptedKeychainList>
</tsRequest>
```

```
{
"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

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><code>associatedUserLuidMapping</code>
                                        </td>
                                        <td>
                                            <p>
								(Required) The user IDs from the source site mapped to destination site user IDs.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><code>encryptedKeychainList</code>
                                        </td>
                                        <td>(Required) List of encrypted keychains from the source Tableau Server.</td>
                                    </tr>
                                    <tr>
                                        <td><code>encryptedKeychain</code>
                                        </td>
                                        <td>
                                            <p>(Required) Encrypted keychain from the source Tableau Server.</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### 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 "&lt;tsRequest&gt;   &lt;destinationSiteUrlNamespace&gt;site1&lt;/destinationSiteUrlNamespace&gt;    &lt;destinationSiteLuid&gt;9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d&lt;/destinationSiteLuid&gt;   &lt;destinationServerUrl&gt;http://example.com&lt;/destinationServerUrl&gt;  &lt;/tsRequest&gt;"
```

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad Request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>401</td>
                                    <td>401002</td>
                                    <td>Unauthorized Access</td>
                                    <td>
                                        <p>The authentication token provided in the request header was invalid or has expired.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403054</td>
                                    <td>Unauthorized Access</td>
                                    <td>A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Site not found</td>
                                    <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404004
                    </td>
                                    <td>Data source not found</td>
                                    <td>The data source ID in the URI doesn't correspond to an existing data source.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                </tr>
                            </tbody>
                        </table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">flow-luid</span></td><td>The LUID of the flow to upload the encrypted keychain from.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <associatedUserLuidMapping>
    <userLuidPair sourceSiteUserLuid="9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d" destinationSiteUserLuid="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" />
  </associatedUserLuidMapping>
  <encryptedKeychainList>
    <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=
    </encryptedKeychain>
  <encryptedKeychain>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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>associatedUserLuidMapping</code>
                                            </td>
                                            <td>(Required) The user IDs from the source site mapped to destination site user IDs.</td>
                                        </tr>
                                        <tr>
                                            <td><code>userLuidPair</code>
                                            </td>
                                            <td>(Required) The user IDs needed to map source site flow owner to destination site flow owner.</td>
                                        </tr>
                                        <tr>
                                            <td><code>sourceSiteUserLuid</code>
                                            </td>
                                            <td>
                                                <p>
								(Required) The user ID&nbsp;of the flow owner from the source site; an attribute of the <code>associatedUserLuidMapping</code> element.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>destinationSiteUserLuid</code>
                                            </td>
                                            <td>(Required) The user ID&nbsp;of the flow owner on the destination site; an attribute of the <code>associatedUserLuidMapping</code> element.</td>
                                        </tr>
                                        <tr>
                                            <td><code>encryptedKeychainList</code>
                                            </td>
                                            <td>(Required) List of encrypted keychains from the source Tableau Server.
</td>
                                        </tr>
                                        <tr>
                                            <td><code>encryptedKeychain</code>
                                            </td>
                                            <td>
                                                <p>(Required) Encrypted keychain from the source Tableau Server. You can get this value by calling the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm#download_flow_encrypted_keychain" class="xref">Download Flow Encrypted Keychain</a> method.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<tsRequest><associatedUserLuidMapping><userLuidPair sourceSiteUserLuid="9f9e9d9c-8b8a-8f8e-7d7c-7b7a6f6d6e6d" destinationSiteUserLuid="9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4"/></associatedUserLuidMapping><encryptedKeychainList><encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=</encryptedKeychain><encryptedKeychain>2BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=</encryptedKeychain></encryptedKeychainList></tsRequest>"
```

#### Response Code

200

#### Response Body

None

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>401</td>
                                    <td>401002</td>
                                    <td>Unauthorized access</td>
                                    <td>
                                        <p>The authentication token provided in the request header was invalid or has expired.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403054</td>
                                    <td>Unauthorized access</td>
                                    <td>A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Site not found</td>
                                    <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404004
                    </td>
                                    <td>Data source not found</td>
                                    <td>The data source ID in the URI doesn't correspond to an existing data source.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                </tr>
                            </tbody>
                        </table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">user-luid</span></td><td>The LUID of the user whose credentials you want to upload.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <associatedUserLuidMapping/>
  <encryptedKeychainList>
    <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=
    <encryptedKeychain>
  </encryptedKeychainList>
</tsRequest>
```

```
{
  "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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>associatedUserLuidMapping</code>
                                            </td>
                                            <td>
                                                <p>
								(Required) The user IDs from the source site mapped to destination site user IDs.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>encryptedKeychainList</code>
                                            </td>
                                            <td>(Required) List of encrypted keychains from the source Tableau Server.</td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 "<associatedUserLuidMapping/>     <encryptedKeychainList>         <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=         <encryptedKeychain> 	</encryptedKeychainList>"
```

#### Response Code

200

#### Response Body

None.

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad Request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>401</td>
                                    <td>401002</td>
                                    <td>Unauthorized Access</td>
                                    <td>
                                        <p>The authentication token provided in the request header was invalid or has expired.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403054</td>
                                    <td>Unauthorized Access</td>
                                    <td>A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Site not found</td>
                                    <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404002
                    </td>
                                    <td>User not found</td>
                                    <td>The user ID in the URI doesn't correspond to an existing user.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                </tr>
                            </tbody>
                        </table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

## 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

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr><tr><td><span class="api-placeholder">workbook-luid</span></td><td>The LUID of the workbook to download the encrypted keychain from.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
    <associatedUserLuidMapping/>
    <encryptedKeychainList>
        <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=</encryptedKeychain>
    </encryptedKeychainList>
</tsRequest>
```

```
{
"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

<table class="api-parameters-table">
                                    <colgroup>
                                        <col class="api-parameters-table-col-1">
                                        <col>
                                    </colgroup>
                                    <tbody>
                                        <tr>
                                            <td><code>associatedUserLuidMapping</code>
                                            </td>
                                            <td>
                                                <p>
								(Required) The user IDs from the source site mapped to destination site user IDs.</p>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td><code>encryptedKeychainList</code>
                                            </td>
                                            <td>(Required) List of encrypted keychains from the source Tableau Server.</td>
                                        </tr>
                                        <tr>
                                            <td><code>encryptedKeychain</code>
                                            </td>
                                            <td>
                                                <p>(Required) Encrypted keychain from the source Tableau Server.</p>
                                            </td>
                                        </tr>
                                    </tbody>
                                </table>

#### 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 '<tsRequest>
    <associatedUserLuidMapping/>
    <encryptedKeychainList>
        <encryptedKeychain>BADsJ5lBKho2Tdqqbo7txS8IyGlBu9LiRyb8etCHJLhBUurgIRHk3g5AeMQg6KHBw+6nwNIDEd65MKi76DLd5aIMhQC5aLCR4NE7R2gp7JbxLo+nOMGnfDQm5XekJVpLQGfY53GIX52ED2iTfOQ0yRNbnPV4djT0z23rosG0gpmqXV/GlBu9LiRyb8wx8RisnZdvv+SAlv222jVhksX1w5A6HB3Bs45BeWfpwrOnHwnNoWUGwHuu4iGlyE7m65RlATZN+fvDGOFN1zU2lXaSZyWqRKiWkD+oGlBu9LiRyb8Gz7RnesKvH6QEL9sT8cXA1ZOEA531xNAv9rjazEP5BssIdA1GcJ5J7zar5xxC68qm3cz3MkndyqWXZrf0vWPgwysUHEpWn60oDG/8/xG6c0Eigh4gwE+dA+NF1GlBu9LiRyb8+AzJ7vatf95LDwAuRT43G3Q+WApx9qBPXco15pKjwy00rHPgn4cRtu+unwh6d3gIh6AbK6X++U/vV/Ktpe31lSZmV8eHPeTNfdCrGOT9ozZhF5oKGlBu9LiRyb8tf1YcXawh3bvtZxg9d8a2mKNXDeaF+uJrpI43aFa4KrJKdfvDpq2k0aJhL1QNxWSFBYw0tPJX/rhKAeOHHY2K44Wh5JNWwL+x1uYap93IK303sJ1GlBu9LiRyb8UhfIW7o5iUtbYWrpCvVwubZLf4U5Y=</encryptedKeychain>
    </encryptedKeychainList>
</tsRequest>'
```

#### Response Code

200

#### Response Body

None.

#### Errors

<table class="api-error-table">
                            <colgroup>
                                <col class="api-error-table-col-1">
                                <col class="api-error-table-col-2">
                                <col class="api-error-table-col-3">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <th>HTTP status</th>
                                    <th><code>error</code> Code</th>
                                    <th>Condition</th>
                                    <th>Details</th>
                                </tr>
                                <tr>
                                    <td>400</td>
                                    <td>400000</td>
                                    <td>Bad Request</td>
                                    <td>The content of the request body is missing or incomplete, or contains malformed XML.</td>
                                </tr>
                                <tr>
                                    <td>401</td>
                                    <td>401002</td>
                                    <td>Unauthorized Access</td>
                                    <td>
                                        <p>The authentication token provided in the request header was invalid or has expired.</p>
                                    </td>
                                </tr>
                                <tr>
                                    <td>403</td>
                                    <td>403054</td>
                                    <td>Unauthorized Access</td>
                                    <td>A non-administrator user attempted to get data source revision information, but the caller doesn't have sufficient permissions.</td>
                                </tr>
                                <tr>
                                    <td>404</td>
                                    <td>404000</td>
                                    <td>Site not found</td>
                                    <td>The site ID in the URI doesn't correspond to an existing site.</td>
                                </tr>
                                <tr>
                                    <td>404	</td>
                                    <td>404006	</td>
                                    <td>Workbook not found	</td>
                                    <td>The workbook ID in URI doesn't correspond to an existing workbook.</td>
                                </tr>
                                <tr>
                                    <td>405</td>
                                    <td>405000</td>
                                    <td>Invalid request method</td>
                                    <td>Request type was not <span class="api-command-ref">PUT</span>.</td>
                                </tr>
                            </tbody>
                        </table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

## 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/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload) and [Append to File Upload](https://help.tableau.com/current/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

<table class="simple-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site.</td></tr><tr><td><span class="api-placeholder">upload-session-id</span></td><td>The upload session ID returned from the <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_publishing.htm#initiate_file_upload" target="_blank">Initiate File Upload</a> endpoint.</td></tr></tbody></table>

#### 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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>&nbsp;</td><td>Missing uploadSessionId parameter</td><td>The required <code>uploadSessionId</code> parameter isn't present in the querystring.</td></tr><tr><td>404</td><td>&nbsp;</td><td>Resource not found</td><td>The <code>uploadSessionId</code> parameter couldn't be found.</td></tr><tr><td>422</td><td>&nbsp;</td><td>Unprocessable entity</td><td>The TWB validation task completed, but detected errors. <b>See the response body for detailed validation information.</b></td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### 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

<table class="simple-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site.</td></tr></tbody></table>

#### 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/current/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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>&nbsp;</td><td>Missing required parameter</td><td>The required <code>tableau_workbook</code> parameter isn't present in the request.</td></tr><tr><td>400</td><td>&nbsp;</td><td>Invalid file type or content</td><td>The file is not a valid TWB file or does not contain TWB XML content, or the "filename" parameter doesn't end with ".twb".</td></tr><tr><td>406</td><td>406000</td><td>No acceptable response</td><td>This method can only return a JSON response. Use the <code>Accept:&nbsp;application/json</code> header.</td></tr><tr><td>422</td><td>&nbsp;</td><td>Unprocessable entity</td><td>The TWB validation task completed, but detected errors. <b>See the response body for detailed validation information.</b></td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### 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

<table class="simple-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site.</td></tr></tbody></table>

#### 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/current/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

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>&nbsp;</td><td>Missing required parameter</td><td>The required <code>tableau_workbook</code> parameter isn't present in the request.</td></tr><tr><td>400</td><td>&nbsp;</td><td>Invalid file type or content</td><td>The file is not a valid TWB file or does not contain TWB XML content, or the "filename" parameter doesn't end with ".twb".</td></tr><tr><td>406</td><td>406000</td><td>No acceptable response</td><td>This method can only return a JSON response. Use the <code>Accept:&nbsp;application/json</code> header.</td></tr><tr><td>422</td><td>&nbsp;</td><td>Unprocessable entity</td><td>The TWB validation task completed, but detected errors. <b>See the response body for detailed validation information.</b></td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### 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