---
schema_version: "1"
id: 26e97494b21f93640e709b7c0bde8a1fd7e65567c345e08b24909c9352bae7c9
title: Flow Methods
collection: tableau
version: current
locale: en-us
portal_url: https://docs.salesforce.com/tableau/current/en-us/api/rest_api/REST/rest_api_ref_flow.md
canonical_url: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_flow.htm
source_site: help.tableau.com
content_type: documentation
content_hash: c4b99ae1ce8cc17deacb381ec9592f8e011e23f40ca9575c95567d09feea43d9
description: "Using the flow methods of the Tableau Server REST API you can do the operations listed in the following categories:"
---
[Skip to main content](#main-content)

# Flow Methods

Using the flow methods of the Tableau Server REST API you can do the operations listed in the following categories:

**Flows** (sets of data preparation steps for a site)

- Get a list of flows for a site or the users and details of a specific flow
- Get a list of flow runs for a site
- Run a specific flow with all or a specified set of output steps
- Run a specific flow with [parameter values](https://help.tableau.com/current/prep/en-us/prep_parameters.htm#run-flows-with-parameters)
- Cancel a specific flow run
- Publish, update, delete and download a flow
- Download an encrypted keychain for a flow that is migrating to another site.
- Upload an encrypted keychain for a flow migrated to another site.

**Flow Tasks** (scheduled or manually initiated tasks that perform flows for a site)

- Get a list of flow tasks for a site and details of a specific flow task
- Run a flow task
- Add a flow task to a schedule
- Add a flow task to a schedule with [parameter values](https://help.tableau.com/current/prep/en-us/prep_parameters.htm#run-flows-with-parameters)
- Get a list of linked tasks for a site and details of a specific linked task
- Run a linked task

**Flow Connections** (connections to data sources of a flow)

- Get and update the connection information for a flow task

**Flow Permissions** (user permissions to initiate a flow)

- List, grant, and remove granular permissions of a user to a flow

This functionality relates to the UI elements and concepts described at: [Tableau Prep Conductor](https://help.tableau.com/current/server/en-us/prep_publishserver_overview.htm).

## Use Postman

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

[Postman: Flows](https://www.postman.com/salesforce-developers/salesforce-developers/folder/r21suuf/flows)

## Add Flow Permissions

Adds permissions to the specified flow for a Tableau Server user or group. You can specify multiple sets of permissions using one call.

#### URI

PUT /api/api-version/sites/site-id/flows/flow-id/permissions

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-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](#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">Flow Methods</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">Flow Methods</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>
```

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

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

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

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

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

## Publish Flow

Publishes a flow on the specified site.

To make other changes to a published flow, call [Update Flow](#update_flow) or [Update Flow Connection](#update_flow_connection).

**Version**: Available in API 3.3 and later.

**License**: No additional license required.

**Permissions**: Users who are not server administrators or site administrators can publish a flow only if the flow belongs to a project that they have permissions to publish to, have a site role that allows publishing and have write permissions on the flow if overwriting.

**Access Scope**: `tableau:flows:create`

- Scope added in Tableau Cloud June 2022 (API 3.16) and Tableau Server 2022.3 (API 3.17).

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

You can publish a flow in a single request or in multiple parts.

To publish a flow in a single request you include the content of the workbook file in the body of the request. The maximum size of a file that can be published in a single request is 64 MB.

To publish a flow in multiple parts, you initiate a file upload by calling [Initiate File Upload](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#initiate_file_upload), send portions of the file to the server using [Append to File Upload](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#append_to_file_upload), and then commit the upload by calling Publish Flow. In this case, Publish Flow doesn't contain the file to publish but the `uploadSessionId` and the `flowType` parameters are required.

#### URI

POST /api/api-version/sites/site-id/flows

POST /api/api-version/sites/site-id/flows?overwrite=overwrite-flag

POST /api/api-version/sites/site-id/flows?overwrite=overwrite-flag&uploadSessionId=upload-session-id&flowType=flow-file-type

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-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).

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

## 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](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#create_project) or for an existing project by calling [Update Project](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#update_project). For more information, see [Lock Content Permissions to the Project](https://help.tableau.com/current/server/en-us/help.htm#permissions_project_lock.htm).

#### Version

Version 3.3 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/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>
```

## Run Flow Now

Runs the specified flow.

This method runs the specified flow with all the output steps if none are specified. If you want to run only a subset of output steps, you can specify one or more output steps using the output-ids by using the [Flow Methods](#Query). The Run Flow Now method is the equivalent of selecting a flow using the Tableau Server UI, and then selecting **Run Now** from the menu.

A flow task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a flow task will often fail if the task has been put in the task queue in any of these ways, or is already in progress. Running the flow for a suspended task using Run Flow Now will resume the task job.

**Note:**

- This method is unavailable if you don't have Data Management. For more information, see [Tableau Prep Conductor](https://help.tableau.com/current/online/en-us/dm_overview.htm#tableau-prep-conductor).
- This method will fail and result in an error if your Server Administrator has disabled the **RunNow** setting for the site. For more information, see [Tableau Server Settings](https://help.tableau.com/current/server/en-us/maintenance_set.htm).

#### URI

POST /api/api-version/sites/site-id/flows/flow-id/run

POST /api/api-version/sites/site-id/flows/flow-id/run?flowOutputStepIds=flow-outputstep-id&flowRunMode=flow-run-mode

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-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">Flow Methods</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">Flow Methods</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">Flow Methods</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](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#create_schedule) method to create the task. The Run Flow task requires you to provide a task id. To get the task-id, use the Get Flow Run Tasks method, which returns the flowRun ID. The value of the flowRun ID is what you use as the task-id.

The method adds the flow run task to the backgrounder queue. Depending upon the backgrounder load, the task might not run immediately. The method returns information about the backgrounder job responsible for running the flow run task, including a job id that can be used with the [Query Job](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref.htm#query_job) method to query the status of the flow run.

A flow task can be initiated by a REST API call, a tabcmd command, or a job calling the task on a schedule. A REST request to start a flow task will often fail if the task has been put in the task queue in any of these ways, or is already in progress. If your request results in an error code `403102`, it means that there is already a scheduled task for this within a very close time period (seconds). In this case, if the task is currently in a suspended state, it will resume.

#### URI

POST /api/api-version/sites/site-id/tasks/runFlow/task-id/runNow

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-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).

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

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